Excel Styles.xml应该是什么样的 - OpenXML

时间:2017-10-11 09:51:17

标签: excel vb.net openxml-sdk

我正在生成一个大的excel文件,我正在努力使数据的标题变为粗体。

如果我注释掉所有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 个答案:

答案 0 :(得分:1)

我认为这里的问题是,在您的单元格格式中,您引用的是填充FillId = 0和边框BorderId = 0。由于您在此处重新创建了样式表:

stylePart.Stylesheet = New Stylesheet

您的文档中没有此类填充或边框。 你有两个解决方案:

  1. 创建基本填充(白色背景)和基本边框(无 border)对象并在添加单元格之前将它们添加到样式表中 格式,就像你添加字体一样。
  2. 尝试从CellFormat的定义中删除对Border和Fill的引用。也许它会起作用。
  3. 请注意,在您关注的示例中,他们使用的是现有的excel文件,该文件可能在其样式表中存储了某些边框和填充,因此他们不必这样做。