Excel文档处理之Open XML

Excel文档处理之Open XML本文详细介绍了如何使用 OpenXML 处理 Excel 文档 包括新建 Excel 文档 添加工作表 向工作表添加内容 设置表格样式以及操作代码示例

大家好,欢迎来到IT知识分享网。

引言

在使用Open XML处理Excel文档之前,需要先确定它的作用范围,Open XML适用于2007版本及以上的Excel文档的处理。

第二步就是配置Open XML的开发环境:Open XML相关下载链接。

1、新建Excel文档

咱们先从一个实际的Excel文档入手,在桌面上新建一个Excel文档,默认会有一个Sheet,可以理解为一个工作表或一个页面。

Excel文档处理之Open XML   Excel文档处理之Open XML

创建一个Excel所等价的代码如下:

//本代码段为简化代码,只作理解之用。 //SpreadsheetDocument:Excel文档的变量类型 //以path中所指定的地址和名称创建一个Excel文档 //SpreadsheetDocumentType.Workbook:指明创建的文件类型为后缀名为.xlsx的Excel文档 SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(path, SpreadsheetDocumentType.Workbook);

将刚刚新建的Excel文档的后缀名改为rar(压缩包格式),然后打开压缩包,看到如下图所示的目录,其中xl文件夹中的文件很重要,需要仔细研究。打开xl文件夹。

Excel文档处理之Open XMLExcel文档处理之Open XMLExcel文档处理之Open XML

先打开workbook.xml,默认会用浏览器显示其内容,workbook.xml主要对sheet(理解为工作表或页面)进行宏观性全局性的描述。下图中,第二行开始到结束,由叫做“workbook”的元素包裹在最外层,可以把workbook理解为工作薄,但不完全等价于Excel文件。红色方框框起来的元素为“ sheets”,它的内部描述了该文档有几个sheet(理解为工作表或页面)。由于新建的Excel文档默认只有一个sheet,所以“sheets”元素的内部只有一个“sheet”元素,对应着创建Excel文档后默认的“Sheet1”工作表,图中的sheet元素内部,有三个必备属性:r:id、sheetId、name。r:id是字符串类型的属性,以“rId”+数字作为其内容;sheetId为数字类型的属性;name就是该sheet的名字。前两个属性都属于sheet的id值,都是隐含的内在的属性,name属性是外在的显露出来的属性,图中name属性的值“Sheet1”刚好对应新建的Excel中的默认的sheet名称。

Excel文档处理之Open XML

2、添加一个sheet工作表

倘若在Excel中添加一个工作表,并将其命名为“测试”,会有什么变化呢?具体的操作要么把Excel文件后缀名恢复原样,要么可以再新建一个Excel,并添加一个工作表。再次打开workbook.xml文件时,会发现多了一个sheet元素。该sheet元素对应的r:id和sheetId的值都比默认的sheet元素的值增加了1,name属性的值为“测试”。

Excel文档处理之Open XML

添加一个工作表等价的代码如下:

//本代码段为简化代码,只作理解之用。 //workbookPart:管理Workbook工作薄 //WorksheetPart:管理工作表,一个WorksheetPart对应一个工作表 //workbookPart.AddNewPart<WorksheetPart>():添加一个新的WorksheetPart WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>(); //workbookPart.Workbook.Sheets:Workbook元素中的Sheets元素 //Sheets.Elements<Sheet>():Sheets元素中Sheet元素的集合 //Elements<Sheet>().LastOrDefault():Sheet元素集合中最后一个Sheet元素或默认的Sheet元素 Sheet sheet = workbookPart.Workbook.Sheets.Elements<Sheet>().LastOrDefault(); //定义默认的sheetId值 //当工作薄中一个工作表也没有时,便以1作为新添加的工作表的Sheet元素的Id值 //当工作薄中存在工作表时,便将最后一个工作表的Id值加1作为新添加的工作表的Sheet元素的Id值UInt32Value sheetId = 1; if (sheet != null) { sheetId = sheet.SheetId + 1; } //AppendChild:添加一个子元素 workbookPart.Workbook.Sheets.AppendChild(new Sheet() { //Id为字符串类型的Id属性 Id = workbookPart.GetIdOfPart(worksheetPart), //SheetId为数值类型的Id属性 SheetId = sheetId, //工作表的名称 Name = sheetName });

3、向sheet工作表中添加内容

在上方压缩包目录图中,打开worksheets文件夹。该目录下有一个名为“sheet1.xml”的文件,对应默认的”Sheet1“工作表。有多少个工作表,这个文件夹里面就有多少个sheet文件,sheet文件对所有非空表格的信息都进行了登记。

Excel文档处理之Open XML

打开sheet1.xml文件,内容如下图所示。其中sheetViews元素可以描述当前选中的表格所在的位置,由于新建的Excel文档没有选中表格,所有sheetViews没有描述;sheetData元素记录非空表格的位置及表格内容,同样,由于Excel没有写入任何内容,sheetData中也就没有记录。

Excel文档处理之Open XML

这时,对空白的Sheet1工作表添加如下图所示的内容。分别在A1、B2、C3单元格添加了“1”、“数据”、“Data”,并选中B1单元格。添加这些数据后,sheet1.xml文件主要的变化如下图。sheetViews元素中,selection元素描述选中的单元格为B1。sheetData元素中,有三个row元素,分别对应添加的“1”、“数据”、“Data”;在row元素中,r属性表示第几行,c元素记录非空表格的位置及表格内容;在c元素中,r元素表示单元格的位置,其中第一个c元素中,v元素表示单元格的内容,第二个和第三个c元素的解释请看下面的内容。

Excel文档处理之Open XMLExcel文档处理之Open XML

在xl文件夹中,多了一个名为sharedStrings.xml的文件,这个文件名字面上的意思是共享字符串,这是Excel中很有意思的一个东西,它将可能会重复用到的字符串都存储于这个文件中。打开它,内容如下图所示,si元素中存储着可能会重复用到的字符串,可以想象,当N个单元格中的内容都是“数据”时,那么Excel就不用为每个单元格分配额外的存储空间,而只需要在上图中的v元素中存储该字符串的引用即可,例:在下图中,数据在sharedStrings.xml文件中的位置是第0个(默认从第0个开始),上图中c元素中t属性赋值为“s”,表明该单元格的内容为共享字符串,v元素中的值为0,表示该单元格中的内容为sharedStrings.xml文件中第0个字符串。

Excel文档处理之Open XMLExcel文档处理之Open XML

向表格中添加内容的代码如下:

//本代码段为简化代码,只作理解之用。 //SheetData:记录非空单元格的位置及内容 //worksheetPart:管理工作表,一个WorksheetPart对应一个工作表 SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().FirstOrDefault(); //Row:工作表中的行 Row row = sheetData.Elements<Row>().LastOrDefault(); //添加普通数据 void AddData(object data) { Cell cell = row.AppendChild(new Cell() { //CellValue:单元格内容 CellValue = new CellValue() { Text = data.ToString() }, //DataType&

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/158987.html

(0)
上一篇 2024-11-27 13:45
下一篇 2024-11-27 14:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信