实用的开放源码的Excel导入导出类库 CarlosAg ExcelXmlWriter
2013-07-08 19:06
393 查看
做企业管理软件经常会遇到要把数据导出成EXCEL格式,目前市面上有很多工具类库可以实现此功能。CarlosAgExcelXmlWriter是其中之一,它绿色小巧,免安装,又源码开放,我在项目中一直以这个类库来实现对EXCEL文件操作。
写一个控制台程序,调用上面的代码,如下所示
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
这个例子具备典型的意义,即使是经常使用它的开发人员,也会经常忘记需要调用的类型名称和属性。生手可以借助这个工具入门,熟练之后,仍然可以借助于这个工具,生成原型。
[code]Range对象则表示一个或多个单元格,可以设置单元格的公式Formula。
请参考下面的代码,以加深对对象模型的了解。
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
在上面的例子中,可以引用一个单元格的值来设置另一个单元格的值。注意索引的下标依照C#的标准,从零开始。
[code]book[0][3,1].Value=1
2使用
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
4使有Cell对象
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
除数据之外,你还可以对单元的其它属性赋值,比如设置
如果同时要给多个单元格设置一样的属性,则可以考虑创建一个XmlStyle对象,如下面的代码所示
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
访问多个单元格,可以用Range对象,参考下面的代码
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
给单元格设置求值公式
应用公式是地,添加多个参数,下面的代码相当于Excel公式=SUM(D4,$E$4,F4:G4).
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
DataSet/DataTable直接转化为ExcelXmlWorksheet,DataSet中的每一个Table被转化为一个Worksheet。
http://www.carlosag.net/Tools/ExcelXmlWriter/Generator
程序集和源代码下载地址http://www.carlosag.net/Tools/ExcelXmlWriter/
代码下载:http://www.carlosag.net/downloads/ExcelSamples.zip
图形工具CodeGenerator
因Excel涉及到的对象模型比较多,初步了解时,需要查找资料才能入门。为此作者设计了一个GUI程序,CarlosAg.ExcelXmlWriter.Generator.exe,使用它可以根据Excel文件的内容,生成.NET平台上4种语言的代码。写一个控制台程序,调用上面的代码,如下所示
classProgram{ staticvoidMain(string[]args){ ExcelXmlWriter.Sample.Appapp=newExcelXmlWriter.Sample.App(); app.Generate(@"c:\test.xml"); } }
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
这个例子具备典型的意义,即使是经常使用它的开发人员,也会经常忘记需要调用的类型名称和属性。生手可以借助这个工具入门,熟练之后,仍然可以借助于这个工具,生成原型。
对象模型ObjectModel
与OfficeInterop建立的对象模型相似,它主要由以下几个类型组成:ExcelXmlWorkbook代表一个Excel文件,它下面有多个
Worksheet,中有Row代表行,Cell代表Excel单元格。Worksheet
[code]Range对象则表示一个或多个单元格,可以设置单元格的公式Formula。
ExcelXmlWorkbookbook=newExcelXmlWorkbook();
book.Properties.Author="YogeshJagota";
Worksheetsheet=book[0];
sheet.Name="AgewiseOutstanding";
sheet.FreezeTopRows=3;
sheet.PrintOptions.Orientation=PageOrientation.Landscape;
sheet.PrintOptions.SetMargins(0.5,0.4,0.5,0.4);
sheet[0,0].Value="Outstandingason"+DateTime.Now;
sheet[0,1].Value="NameofParty";
sheet[1,1].Value="RSM";
sheet[2,1].Value="ASM";
sheet[3,1].Value="0-30";
sheet[4,1].Value="31-60";
sheet[5,1].Value="61-90";
sheet[6,1].Value="91+";
sheet[0,2].Value="M/sStupidPaymaster";
sheet[1,2].Value="Mr.Nonsense";
sheet[2,2].Value="Mr.MoreNonsense";
sheet[3,2].Value=0;
sheet[4,2].Value=5000;
sheet[5,2].Value=45000;
sheet[6,2].Value=0;
sheet[0,3].Value="M/sGoodPaymaster";
sheet[1,3].Value="Mr.GoodRSM";
sheet[2,3].Value="Mr.GoodASM";
sheet[3,3].Value=32000;
sheet[4,3].Value=0;
sheet[5,3].Value=0;
sheet[6,3].Value=0;
sheet[7,3].Value=sheet[6,3];
stringoutputFile="OutstandingFile.xml";
book.Export(outputFile);
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
在上面的例子中,可以引用一个单元格的值来设置另一个单元格的值。注意索引的下标依照C#的标准,从零开始。
导入导出Import/Export
导入:ExcelXmlWorkbook的Import方法,接受一个字符串或是流,返回一个对象,表示内存的Excel对象模型。导入失败时,返回null空对象。ExcelXmlWorkbook
导出:ExcelXmlWorkbook的Export方法,接受一个字符串或是流,将当前的Excel对象写入到Excel文件中。
导出导出都涉及两个重载方法,推荐用参数类型的方法,以便对导入导出错误有更多的了解。Stream
这里也学到一个经验,包括微软和其它的第三方组件供应商遇到文件读写时,一般都会提供如上面所示的两个重载方法。
string类型的,用于直接访问磁盘文件,Stream类型的用于访问已经读取到内存流中的文件,或是资源。比如,我经常将资源嵌入到程序集中再通过读取嵌入的资源达到访问文件的目的。这种情况下,没有办法直接访问磁盘文件。
访问单元格AccessCell
有以下四种方式对单元的内容进行读写
1使用ExcelXmlWorkbook对象,下面的代码取第一个Worksheet,设置它的第四行,第二列的值是1
[code]book[0][3,1].Value=1
2使用
Worksheet对象
Worksheetsheet=book[0];
sheet[3,1].Value=1
3使用Row对象
Worksheetsheet=book[0];
Rowrow=sheet[1];
row[3].Value=1
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
4使有Cell对象
Worksheetsheet=book[0];
Rowrow=sheet[1];
Cellcell=row[3];
cell.Value=1
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
除数据之外,你还可以对单元的其它属性赋值,比如设置
Font,
Alignment,
Interior,
Border,和
DisplayFormat。
sheet[1,3].Font.Bold=true;
如果同时要给多个单元格设置一样的属性,则可以考虑创建一个XmlStyle对象,如下面的代码所示
XmlStylestyle=newXmlStyle();
style.Font.Bold=true;
sheet[1,3].Style=style;
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
访问多个单元格,可以用Range对象,参考下面的代码
Rangerange=newRange(sheet[0,2],sheet[7,2]);
range.Font.Bold=true;
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
高级特性AdvancedFeature
设置列自动过滤newRange(sheet[0,1],sheet[6,3]).AutoFilter();
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
给单元格设置求值公式
sheet[7,3].Value=FormulaHelper.Formula("sum",newRange(sheet[3,3],sheet[6,3]));
sheet[7,3].Value=newFormula().Add("sum").StartGroup().Add(newRange(sheet[3,3],sheet[6,3])).EndGroup();
应用公式是地,添加多个参数,下面的代码相当于Excel公式=SUM(D4,$E$4,F4:G4).
Formulaformula=newFormula().Add("sum").StartGroup();
formula.Add("D4").Operator(',');
formula.Add(newRange(sheet[4,3]){Absolute=true}).Operator(',');
formula.Add(newRange(sheet[5,3],Range(sheet[6,3])).EndGroup();
sheet[7,3].Value=formula;
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
DataSet/DataTable直接转化为ExcelXmlWorksheet,DataSet中的每一个Table被转化为一个Worksheet。
ExcelXmlWorksheetsheet=ExcelXmlWorksheet.DataSetToWorkbook(sourceDataSet)
资源地址
GUI工具的下载地址程序集和源代码下载地址
代码下载:
相关文章推荐
- CarlosAg.ExcelXmlWriter实现.net下Excel导出功能(服务端不需要安装Excel程序)
- CarlosAg.ExcelXmlWriter实现.net下Excel导出功能(服务端不需要安装Excel程序)
- 导出合并后的多个工作表在一个EXCEL中,首先引用CarlosAg.ExcelXmlWriter.dll
- 一个免费的Excel输出类库:CarlosAg Excel Xml Writer Library
- ASP.NET 之 常用类、方法的超级总结,并包含动态的EXCEL导入导出功能,奉上类库源码
- CarlosAg.ExcelXmlWriter
- 【飞秋】ASP.NET 之 常用类、方法的超级总结,并包含动态的EXCEL导入导出功能,奉上类库源码
- CarlosAg.ExcelXmlWriter 的确不错的写入Excel第三方控件
- c# DataTable针对xml、excel、csv导入和导出
- 使用NPOI导入导出标准Excel(源码)
- [原创]Net实现Excel导入导出到数据库(附源码)
- ThinkPHP 3.2 + PHPExcel 导入导出文件 第三方类库不能用问题解决
- 超实用的PHPExcel[导入][导出]实现方法总结
- c# DataTable针对xml、excel、csv导入和导出
- jxl 依据xml映射配置 导入导出excel(2)
- DataTable针对xml、excel、csv导入和导出
- DataTable 对xml、excel、csv 对文件的导入和导出功能
- 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续2篇-模板导出综合示例)
- OpenXmlHelper,其于OpenXml SDK2.0写的帮助类,主要实现Excel的导出、导入的功能及具体的源码Demo
- jxl 依据xml映射配置 导入导出excel (1)