在C#中使用OpenXML应用数字格式时遇到问题

时间:2012-03-29 16:18:28

标签: c# openxml

我正在尝试使用OpenXML生成我正在生成的Excel文档中的列,以友好的方式为12位UPC格式化。

为了实现这一点,我使用以下代码(基于此question):

var sp = workbookpart.AddNewPart<WorkbookStylesPart>();
sp.Stylesheet = new Stylesheet {NumberingFormats = new NumberingFormats(), CellFormats = new CellFormats()};

var upcFormatting = new NumberingFormat {NumberFormatId = 164, FormatCode = "000000000000"};

var upcCellFormat = new CellFormat
                                {
                                        NumberFormatId = upcFormatting.NumberFormatId,
                                        FontId = 0U,
                                        FillId = 0U,
                                        BorderId = 0U,
                                        FormatId = 0U,
                                        ApplyNumberFormat = BooleanValue.FromBoolean(true)
                                 };
sp.Stylesheet.NumberingFormats.AppendChild(upcFormatting);
sp.Stylesheet.CellFormats.AppendChild(upcCellFormat);

sp.Stylesheet.NumberingFormats.Count++;
sp.Stylesheet.CellFormats.Count++;

var styleIndex = sp.Stylesheet.CellFormats.Count;

workbookpart.Workbook.Save();

遗憾的是,上面的代码会生成一个excel认为已损坏的样式表,表单如下:

<?xml version="1.0" encoding="UTF-8"?>
<x:styleSheet xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
   <x:numFmts count="1">
     <x:numFmt formatCode="000000000000" numFmtId="164"/>
   </x:numFmts>
   <x:cellXfs count="1">
   <x:xf numFmtId="164" applyNumberFormat="1" xfId="0" borderId="0" fillId="0" fontId="0"/> 
   </x:cellXfs>
</x:styleSheet>

如果有人能够提供有关如何获得使用编号格​​式生成的有效样式表的见解,该格式允许仅使用OpenXML显示12位数字(不能使用围绕它构建的任何框架,例如ClosedXML)我我会非常感激。

谢谢,

1 个答案:

答案 0 :(得分:1)

您缺少样式表中的默认样式。添加以下行(必须是第一行)并将cellXfs计数更改为2.不要忘记更新工作表以使用样式“2”而不是“1”。

<xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/>