2017-10-11 198 views
0

我正在生成一个大型的excel文件,我试图使数据的标题变为粗体。Excel Styles.xml应该如何 - OpenXML

如果我注释掉所有CellFormat代码并创建电子表格,那么该文件将正确创建,但是如果我不注释行,那么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

回答

1

我觉得这里的问题是,在你的细胞格式,请参考填充FillId = 0和边框BorderId = 0。由于您已在这里重新创建样式表:

stylePart.Stylesheet = New Stylesheet 

没有这样的填充或边框在您的文档中可用。 您有两个解决方案:

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

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