using System.IO;
using System.Text; namespace iLIS.Common
{
/// <summary>
/// 生成Excel文档内容
/// 存入工作流
/// </summary>
public class ExcelDocumentx
{
private readonly StreamWriter _streamWriter; public ExcelDocumentx(Stream stream)
{
_streamWriter = new StreamWriter(stream, Encoding.UTF8);
} /// <summary>
/// 写入Excel文件头
/// </summary>
public void Begin()
{
const string excelHeader = @"<?xml version='1.0'?>
<?mso-application progid='Excel.Sheet'?>
<Workbook xmlns='urn:schemas-microsoft-com:office:spreadsheet'
xmlns:o='urn:schemas-microsoft-com:office:office'
xmlns:x='urn:schemas-microsoft-com:office:excel'
xmlns:ss='urn:schemas-microsoft-com:office:spreadsheet'
xmlns:html='http://www.w3.org/TR/REC-html40'>
<DocumentProperties xmlns='urn:schemas-microsoft-com:office:office'>
<Author>Hitek</Author>
<Company>HitekSoft(C) Ltd.,</Company>
<Version>12.00</Version>
</DocumentProperties>
<Styles>
<Style ss:ID='sH'>
<Alignment ss:Vertical='Center' ss:WrapText='1'/>
<Borders>
<Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/>
<Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/>
<Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/>
<Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/>
</Borders>
<Font ss:FontName='宋体' x:CharSet='134' ss:Size='11' ss:Color='#000000'
ss:Bold='1'/>
<Interior ss:Color='#F2F2F2' ss:Pattern='Solid'/>
<NumberFormat/>
<Protection/>
</Style> <Style ss:ID='sBD'>
<Alignment ss:Vertical='Center' ss:WrapText='1'/>
<Borders>
<Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/>
<Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/>
<Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/>
<Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/>
</Borders>
</Style>
</Styles>";
_streamWriter.WriteLine(excelHeader);
} /// <summary>
/// 添加工作表
/// </summary>
/// <param name="name">表单名称</param>
/// <param name="defaultRowHeight">默认行高</param>
/// <param name="defaultColumnWidth">默认列宽</param>
public void BeginSheet(string name, double defaultRowHeight = 0, double defaultColumnWidth = 0)
{
_streamWriter.WriteLine("<Worksheet ss:Name='" + name + "'>");
_streamWriter.Write("<Table");
//默认行高
if (defaultRowHeight > 0.0001)
_streamWriter.Write(string.Format(" ss:DefaultRowHeight='{0}'", defaultRowHeight));
//默认列宽
if (defaultColumnWidth > 0.0001)
_streamWriter.Write(string.Format(" ss:ss:DefaultColumnWidth='{0}'", defaultColumnWidth));
_streamWriter.WriteLine(">");
} /// <summary>
/// 添加标题行
/// </summary>
/// <param name="colNames">标题行的名称</param>
/// <param name="colWidths">标题行的列宽</param>
public void AddHeaderRow(string[] colNames, double[] colWidths = null)
{
//列宽
if (colWidths != null && colWidths.Length > 0)
{
for (int i = 0; i < colWidths.Length; i++)
{
if (colWidths[i] > 0.0001)
_streamWriter.WriteLine(string.Format("<Column ss:Index='{0}' ss:AutoFitWidth='0' ss:Width='{1}'/>", i + 1, colWidths[i]));
}
}
AddRow(colNames, "sH");
} /// <summary>
/// 添加一行
/// </summary>
/// <param name="styleName">样式名称</param>
/// <param name="vals"></param>
public void AddRow(object[] vals, string styleName = null)
{
if (string.IsNullOrEmpty(styleName))
styleName = "sBD";
_streamWriter.WriteLine("<Row>");
foreach (var val in vals)
{
string strval = val == null ? "" : val.ToString()
.Replace("<", "<")
.Replace(">", ">");
_streamWriter.WriteLine("<Cell ss:StyleID='{0}'><Data ss:Type='String'>{1}</Data></Cell>\n", styleName, strval);
}
_streamWriter.WriteLine("</Row>");
}
/// <summary>
/// 完成表单
/// </summary>
public void EndSheet()
{
_streamWriter.WriteLine("</Table>");
_streamWriter.WriteLine("</Worksheet>");
}
/// <summary>
/// 写入Excel文件结束 完成导出
/// </summary>
public void End()
{
_streamWriter.WriteLine("</Workbook>");
_streamWriter.Close();
}
}
}

C#Execl的更多相关文章

  1. Execl数据导入sql server方法

    在日常的程序开发过程中,很多情况下,用户单位给予开发人员的数据往往是execl或者是access数据,如何把这些数据转为企业级是数据库数据呢,下面就利用sqlserver自带的功能来完成此项任务. 首 ...

  2. asp.net读取execl模板并填充数据,关闭进程

    <head runat="server"> <title></title> <script src="Scripts/jquer ...

  3. PL/SQL导出到execl中,数据前面的0发生丢失的解决办法

    ERR出现的场景再现: 使用 PL/SQL导出按钮,选择‘CSV文件’,保存为1.csv,后用execl打开,复制到VuGen中作为login脚本的参数化文件username. ERR及发现过程: 在 ...

  4. 数据字典生成工具之旅(4):NPOI操作EXECL

    这篇会介绍NPOI读写EXECL,读写EXECL的组件很多,可以使用微软自己的COM组件EXECL.exe读写,不过这种方式限制很大. 1:客户环境必须装Office(虽然现在机子上不装Office的 ...

  5. Java读取Execl表格数据

    在前面提到用java代码新建一个Execl 表格并添加数据到表格中, 这次写了一个读取Execl表格数据并添加导数据库中的案列 给定对方一个Execl模板表格,如果导入的Execl表格和预订的表格不相 ...

  6. jsp表格数据导出到Execl

    1.关于“下载” 需要设置页面header的一个属性为:Content-Disposition: attachment; filename=下载的文件.txt 如: <a href=" ...

  7. Winform数据导出Execl小工具

    前台界面.cs文件 using System; using System.Collections.Generic; using System.ComponentModel; using System. ...

  8. EXECL文件导入数据库

    Execl数据导入数据库: 注意事项:execl中的列名与列数要与数据库的列名和列数一致.值类型一致,列名不一致的话可在导入的时候,给字段起别名,确定保持一致 v 界面代码: <div> ...

  9. 原生js获取execl里面的值 主要使用ActiveXObject

    今天一个程序员给了一个excel表,里面有一百多条数据,叫我一个一个数据的复制到系相应的函数里面比如 put("gaga1","gaga2"),这样一句话,要我 ...

  10. 当用GridView导出Execl的时候,会发生只能在执行 Render() 的过程中调用 RegisterForEventValidation的错误

    当用GridView导出Execl的时候,会发生只能在执行 Render() 的过程中调用 RegisterForEventValidation的错误提示. 有两种方法可以解决以上问题: 1.修改we ...

随机推荐

  1. 1297: [SCOI2009]迷路

    1297: [SCOI2009]迷路 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 652  Solved: 442[Submit][Status] ...

  2. 1635: [Usaco2007 Jan]Tallest Cow 最高的牛

    1635: [Usaco2007 Jan]Tallest Cow 最高的牛 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 383  Solved: 211 ...

  3. 关于Hibernate

    计应134(实验班) 李佳鸿 Hibernate简介 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来 ...

  4. 同步 VS 异步

    同步请求资源 请求msdn上的一个页面计算页面大小 static void Main(string[] args) { string url = "https://docs.microsof ...

  5. Go语言并发机制初探

    Go 语言相比Java等一个很大的优势就是可以方便地编写并发程序.Go 语言内置了 goroutine 机制,使用goroutine可以快速地开发并发程序, 更好的利用多核处理器资源.这篇文章学习 g ...

  6. android 中判断WiFi是否可用的可靠方法 ,android 是否联网

    http://alex-yang-xiansoftware-com.iteye.com/blog/619841 在一些程序中,需要从网上下载数据,或者通过其他方式对网络产生流量,当wifi不可用时应该 ...

  7. css布局与盒子模型

    一.    盒子模型 注: 1.红色为border; 2.背景应用于内容.内边距.边框组成的区域: 3.Width和height指的是内容区域的高度和宽度. 边框属性: 1.  padding属性:( ...

  8. PMS5003ST+Arduino Nano 串口读取数据

    先上代码: 库文件是在guihub上的大神写的https://github.com/jbanaszczyk,我拿来小改下用以支持5003ST #include <Arduino.h> #i ...

  9. maven 的 snapshot 和 release 的区别

    release 是发行版,通常正式发布使用. snapshot 快照版本.在开发过程中,每提交一次修改,编译好响应的jar包,都会更新到仓库中,所有添加了这个jar包的依赖都会把远程仓库里的jar包更 ...

  10. eclipse一直报An internal error occurred during: "Building workspace". GC overhead limit exceeded

    最近导入到eclipse里的工程挺大的,每次eclipse启动之后都回update workspace,然后就一直报: An internal error occurred during: " ...