我的任务是将所有Excel Interop转换为OpenXML,我目前正在了解它的格式。我正在关注this example,我已将其剪切为以下代码:
private Stylesheet GenerateStyleSheet() {
// see http://blogs.msdn.com/b/chrisquon/archive/2009/11/30/stylizing-your-excel-worksheets-with-open-xml-2-0.aspx for example
return new Stylesheet(
new Fonts(
new Font( // Index 0 - The default font.
new FontSize() {
Val = 13
},
new Color() {
Rgb = new HexBinaryValue() {
Value = "000000"
}
},
new FontName() {
Val = "Calibri"
}),
new Font( // Index 1 - The bold font.
new Bold(),
new FontSize() {
Val = 13
},
new Color() {
Rgb = new HexBinaryValue() {
Value = "000000"
}
},
new FontName() {
Val = "Calibri"
})),
new Fills(
new Fill( // Index 0 - The default fill.
new PatternFill() {
PatternType = PatternValues.None
}),
new Fill( // Index 1 - The default fill of gray 125 (required)
new PatternFill() {
PatternType = PatternValues.Gray125
}),
new Fill( // Index 2 - The yellow fill.
new PatternFill(
new ForegroundColor() {
Rgb = new HexBinaryValue() {
Value = "FFFFFF00"
}
}) {
PatternType = PatternValues.Solid
})),
new Borders(
new Border( // Index 0 - The default border.
new LeftBorder(),
new RightBorder(),
new TopBorder(),
new BottomBorder(),
new DiagonalBorder())),
new CellFormats(
new CellFormat() {
FontId = 0,
}, // Index 0 - The default cell style. If a cell does not have a style index applied it will use this style combination instead
new CellFormat() {
FontId = 1, ApplyFont = true
} // Index 1 - Bold
)); // return
}
请注意,在我的示例中,没有单元格格式引用任何边框,因此我不需要border元素。但是,如果我将其注释掉,生成的Excel文件在打开时会产生错误。
样式表中是否需要此元素?
如果我用new Borders(new Border())
替换边框部分,它似乎工作正常。只是想知道是否有人知道这一点,而我不必阅读整个ECMA规范。
更新:至少,任何人都有办法从Excel获得比修复的记录更多详细错误:来自/xl/styles.xml部分(样式)的格式?
答案 0 :(得分:0)
您可以在MSDN page上找到所有可用元素的列表。对于问题的第二部分:您可以使用2.5版本附带的OpenXMLTool来验证输出,它会告诉您文件结构有什么问题。