Excel Open Xml中CellStyleXfs,cellStyle,cellXfs之間關系的總結


 

最近這幾個東東打交道了幾天,總算是弄明白了,綜合多個帖子,現在總結如下:

在創建stylesheet時,必須創建fonts,Fills,Borders 和cellXfs(CellFormats)四個節點。

而cellXfs節點是綜合節點,它需要引用numFormatId列表、FontId列表、fillId列表和borderId列表,這些都包含在Styles.xml文件中。

1.cellStyle, 單元格自定義樣式總綱,"name"屬性表示的是CellStyleXfs中樣式的名稱,"xfId"屬性表示的是CellStyleXfs中"xf"子節點的索引,從0開始。

2.CellStyleXfs,單元格自定義樣式詳細定義,里面擁有FontId, fillId, borderId等屬性。

3.cellXfs,是單元格的樣式,里面也擁有FontId, fillId, borderId等屬性, 可以說,他就是CellStyleXfs的克隆,同CellStyleXfs相比,它多了一個xfid屬性,表示它對應CellStyleXfs的第幾項索引,從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

 
 
分類: Office, Open Xml


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM