最近这几个东东打交道了几天,总算是弄明白了,综合多个帖子,现在总结如下:
在创建stylesheet时,必须创建fonts,Fills,Borders 和cellXfs(CellFormats)四个节点。
而cellXfs节点是综合节点,它需要引用numFormatId列表、FontId列表、fillId列表和borderId列表,这些都包含在Styles.xml文件中。
1.cellXfs,是给单元格自行设置的样式。
2.CellStyleXfs,就是在单元格样式中建立的自定义样式,用于cellXfs中的xfid属性。
3.cellStyle, 在"name"属性可以找到CellStyleXfs中的样式名,对应的属性"xfId",是"CellStyleXfs"节点的子节点"xf"的索引,从"0"开始。
他们之间的具体关系,下面这篇文章写的很精辟,how to understand the process of cell formatting ?
http://social.msdn.microsoft.com/Forums/zh-CN/e6fe3ff0-152e-4398-9d17-fee8476ae466/how-to-understand-the-process-of-cell-formatting
-
总结一下:即单元格没有指定特别的样式时,也就是打开excel,在单元格中随意输入一个字符,然后什么都不做就保存,这就是没有指定特别的样式,用excel再次打开该文档时,它就去cellStyle里找默认的Normal样式,该样式在CellStyleXfs里定义,可以找到对应的fontid, fillid, borderid, numfmtid等等。 如果给单元格指定了某种样式,就去cellXfs里找这种格式,它里面也可以找到对应的fontid, fillid, borderid, numfmtid等等。
实际的Demo如下:
1.打开excel,在单元格中随意输入一个字符,然后什么都不做就保存,这就是没有指定特别的样式, 此时style.xml中的cellXfs, cellStyleXfs, cellStyles如下:
2.用excel打开这个文件,新建一种单元格样式:样式1,但不给任何一个单元格应用,操作步骤如下:
保存该文件,现在styles.xml里的代码如下:
可以看到,新增的样式保存在cellStyleXfs和cellStyles节点中了,因为没有单元格应用它,所以在cellXfs中没有它的踪迹。
在sheet1.xml中,如下图,该单元格没有s="*"的标记,excel就去cellStyles里去找默认的常规样式,然后按照xfId="0"再去cellStyleXfs里找第一项,用里面标记的borderid, fillid, fontid, numFmtId去给它应用了。
3.给一个单元格应用:样式1
此时styles.xml中代码如下:
这时,cellXfs里就有添加进样式1的内容了, 同时在sheet1.xml中,应用了此样式的单元格上有了s="1"的标记,如下图,索引从0开始,s="1"其实指的第二项,这时excel就直接用cellXfs里第二项,用里面标记的borderid, fillid, fontid, numFmtId去给它应用了。
1.CellStyle Class Cell Style.When the object is serialized out as xml, its qualified name is x:cellStyle.
http://msdn.microsoft.com/zh-cn/library/ie/documentformat.openxml.spreadsheet.cellstyle.aspx?cs-save-lang=1&cs-lang=vb
2.CellStyleFormats Class Formatting Records.When the object is serialized out as xml, its qualified name is x:cellStyleXfs.
http://msdn.microsoft.com/zh-cn/library/ie/documentformat.openxml.spreadsheet.cellstyleformats.aspx
3.CellFormats Class Cell Formats.When the object is serialized out as xml, its qualified name is x:cellXfs.
http://msdn.microsoft.com/zh-cn/library/ie/documentformat.openxml.spreadsheet.cellformats.aspx
excel
2007
中
的/xl/
style
s.
xml
文件
中
的"
cell
Style
Xfs
"和"
cell
Style
s"节点都有什么作用,具体的怎么关联的?
Cell
Style
Xfs
节点其实是在单元格样式
中
建立的自定义样式。
<
cell
Style
Xfs
count="3"> <xf numFmtId="0" fo...
using System.IO;
using DocumentFormat.
Open
Xml
.Packaging;
using DocumentFormat.
Open
Xml
;
using DocumentFormat.
Open
Xml
.Spreadsheet;
using X14 = Docume
目前发现
Open
XML
的SDK有两个版本,SDK2.0和SDK2.5。
Open
XML
2.0的帮助文档:https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2010/ff478153(v=office.14)
Open
XML
2.5的帮助文档:https://docs.microsoft.com/zh-cn/office/
open
-
xml
/spreadsheets
很多时候,需要一个软件应用程序来生成Microsoft
Excel
文件格式的报告。有时,甚至希望应用程序接收
Excel
文件作为输入数据。例如,为公司财务部门开发的应用程序将需要在
Excel
中
生成所有输出。任何想要生成MS Office文件作为输出的Java程序员都必须使用预定义的只读API来执行此操作。
Apache POI概述
什么是Apache POI?
Apache POI是一种流行的API,允许程序员使用Java程序创建,修改和显示MS Office文件。它是由Apache Software
感觉说的不够清楚,简单举例:fontId1=1 为自己设置的宋体,fonid2=2为微软雅黑且forecolor设置为红色,fillId0=0,fillId1=1被office占用,fillid2=2为自定义填充蓝色,fillId3=3为自定义填充紫色,borderId=0还是无边框。那么
第一次调用
Uint32Value result[1]=create
Cell
Format(
style
sheet,fontid2,
前言:本文简单介绍使用
Open
XML
如何设置
Excel
单元格格式。
在操作
Excel
时,不可避免的需要设置单元格的格式。使用
Open
XML
设置简单的单元格格式还是很方便的。
Excel
需要使用到的单元格式在
Cell
Formats对象
中
,
Cell
Formats是对象workbookPart.Workbook
Style
sPart.
Style
sh...
//添加Sheet
Style
:Font\Border\Fill\字体居
中
Fonts fonts = new Fonts() { Count = (UInt32Value)2U, KnownFonts = true };
//fontId = 0
DocumentFormat.
Open
Xml
.Spreadsheet.Font font =...