Excel Styles.xml应该是什么样子 – OpenXML

我正在生成一个大型的Excel文件,我试图使数据的标题加粗。

如果我注释掉所有的CellFormat代码并创build电子表格,那么文件将正确创build,但如果我不注释行,那么Excel会给我一个错误: Repaired Records: Format from /xl/styles.xml 。 (很明显,我点击Yes来修复文件。)

这是我的代码看起来像:

 Public Function Create_Spreadsheet_Stylesheet(ByRef stylePart As WorkbookStylesPart) As WorkbookStylesPart Dim font1Id As UInt32Value, font2Id As UInt32Value Dim font1 As New Font With { .FontName = New FontName With {.Val = "arial"}, .FontSize = New FontSize With {.Val = 9} } Dim font2 As New Font With { .Bold = New Bold, .FontName = New FontName With {.Val = "arial"}, .FontSize = New FontSize With {.Val = 9} } stylePart.Stylesheet = New Stylesheet stylePart.Stylesheet.Fonts = New Fonts stylePart.Stylesheet.Fonts.Append(font1) font1Id = Convert.ToUInt32(stylePart.Stylesheet.Fonts.ChildElements.Count - 1) stylePart.Stylesheet.Fonts.Append(font2) font2Id = Convert.ToUInt32(stylePart.Stylesheet.Fonts.ChildElements.Count - 1) stylePart.Stylesheet.Save() Dim cf1 As New CellFormat() With { .FontId = font1Id, .FillId = 0, .BorderId = 0 } Dim cf2 As New CellFormat() With { .FontId = font2Id, .FillId = 0, .BorderId = 0 } stylePart.Stylesheet.CellFormats = New CellFormats ' I would comment this line out stylePart.Stylesheet.CellFormats.Append(cf1) ' And this one stylePart.Stylesheet.CellFormats.Append(cf2) ' And this one stylePart.Stylesheet.Save() Return stylePart End Function 

styles.xml如下所示:

 <?xml version="1.0" encoding="UTF-8"?> <x:styleSheet xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> <x:fonts> <x:font> <x:sz val="9" /> <x:name val="arial" /> </x:font> <x:font> <x:b /> <x:sz val="9" /> <x:name val="arial" /> </x:font> </x:fonts> <x:cellXfs> <x:xf fontId="0" fillId="0" borderId="0" /> <x:xf fontId="1" fillId="0" borderId="0" /> </x:cellXfs> </x:styleSheet> 

我在做什么错误的代码,或者我必须改变,以获得Excel使用cellFormat。

我在网上看了很多关于如何加粗单元格的例子,我一直在这里学习这个教程:

https://social.msdn.microsoft.com/Forums/windows/en-US/4ae9ba85-d5d2-4ce8-a0ba-dece26ed7d2a/open-xml-sdk-for-making-font-bold?forum=oxmlsdk

我认为这里的问题是,在你的单元格格式中,你引用填充FillId = 0和边界与BorderId = 0 。 既然你已经在这里重新创build了一个样式表:

 stylePart.Stylesheet = New Stylesheet 

您的文档中没有这样的填充或边框。 你有两个解决scheme:

  1. 在添加单元格格式之前,创build一个基本的填充(白色背景)和一个基本边框(无边框)对象,并将它们添加到样式表中,就像添加字体一样。
  2. 尝试从CellFormat的定义中删除对这些边框的引用和填充。 也许它会工作。

请注意,在下面的示例中,他们使用的是现有的excel文件,它可能在其样式表中存储了某些边界和填充,因此他们不必这样做。