原文 http://www.cnblogs.com/changminglong/articles/2840004.html
适用于
2007 Microsoft Office 套件,Microsoft Office Excel 2007,Microsoft Office PowerPoint 2007,Microsoft Office Word 2007
OpenXML优势
用户可以在Office应用程序和企业系统之间使用XML和ZIP技术来交换数据。文档是全局可以访问的。并且,您还可以减少文件损坏的风险。
Office XML 格式的结构
基于简单的分部分的压缩的ZIP文件格式。在新的Office Open XML格式的核心使用一些XML的引用架构和一个ZIP容器。每个文件都是由一些部件的集合组成的;这个集合定义了文档。
文档部件是存储在容器文件当中,或者存储在基于工业标准的ZIP格式的包中。许多部件都是用来描述应用程序数据,元数据,以及自定义数据的XML数据,它们都是存储在容器文件当中的。
新建一个Excel文件把后缀名该为为ZIP格式,然后解压我们会看到如下结构;
_rels 目录
这个目录中包含一个.rels文件,它定义了包中的根关系。它是在解析整个包时首先要浏览的第一个文件;.rels 文件包含了基于起始部件(虚拟的起始部件)的关系.
使用OpenXML 导出Excel
首先在http://www.microsoft.com/en-us/download/details.aspx?id=5124 下载OpenXMLSDKv2和OpenXMLSDKTool;
然后在建立一个Excel表格用OpenXMLSDKTool 打开,如下图所示
建立一个新项目,建立一个新类把左侧的代码拷贝到这个新类中;然后我们把想放入Excel中的数据传递到这个类中。
在这个新类中定义一个新的静态方法用来生成表的行代码如下:
private static void GenerateTableRow(SheetData sheetData1, Persion person, uint row) { Row row2 = new Row() { RowIndex = (UInt32Value)row, Spans = new ListValue<StringValue>() { InnerText = "1:4" } }; Cell cell5 = new Cell() { CellReference = "A" + row, StyleIndex = (UInt32Value)1U, DataType = CellValues.String, CellValue = new CellValue(person.Name) }; Cell cell6 = new Cell() { CellReference = "B" + row, StyleIndex = (UInt32Value)1U, DataType = CellValues.Number, CellValue = new CellValue(person.Age.ToString()) }; Cell cell7 = new Cell() { CellReference = "C" + row, StyleIndex = (UInt32Value)1U, DataType = CellValues.String, CellValue = new CellValue(person.Address) }; Cell cell8 = new Cell() { CellReference = "D" + row, StyleIndex = (UInt32Value)1U, DataType = CellValues.String, CellValue = new CellValue(person.Company) }; row2.Append(cell5); row2.Append(cell6); row2.Append(cell7); row2.Append(cell8); sheetData1.Append(row2); } private static void GenerateTableHeader(SheetData sheetData1) { Row row1 = new Row() { RowIndex = (UInt32Value)1U, Spans = new ListValue<StringValue>() { InnerText = "1:4" } }; Cell cell1 = new Cell() { CellReference = "A1", StyleIndex = (UInt32Value)2U, DataType = CellValues.SharedString }; CellValue cellValue1 = new CellValue(); cellValue1.Text = "0"; cell1.Append(cellValue1); Cell cell2 = new Cell() { CellReference = "B1", StyleIndex = (UInt32Value)2U, DataType = CellValues.SharedString }; CellValue cellValue2 = new CellValue(); cellValue2.Text = "1"; cell2.Append(cellValue2); Cell cell3 = new Cell() { CellReference = "C1", StyleIndex = (UInt32Value)2U, DataType = CellValues.SharedString }; CellValue cellValue3 = new CellValue(); cellValue3.Text = "2"; cell3.Append(cellValue3); Cell cell4 = new Cell() { CellReference = "D1", StyleIndex = (UInt32Value)2U, DataType = CellValues.SharedString }; CellValue cellValue4 = new CellValue(); cellValue4.Text = "3"; cell4.Append(cellValue4); row1.Append(cell1); row1.Append(cell2); row1.Append(cell3); row1.Append(cell4); sheetData1.Append(row1); }
然后在主函数中通过调用这个新类把数据传过去就能生成Excel。
具体代码请下载参考:http://files.cnblogs.com/changminglong/OfficeOpenXMLTest.rar