Возникли проблемы с применением числового формата с OpenXML в C # - PullRequest
3 голосов
/ 29 марта 2012

Я пытаюсь получить столбец в документе Excel, который я генерирую, используя OpenXML, для удобного форматирования для 12-значных UPC.

Для этого я использую следующий код(на основе этого вопроса ):

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();

Приведенный выше код, к сожалению, создает таблицу стилей, которая превосходит поврежденную, и выглядит так:

<?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>

Если бы кто-нибудь мог дать представление о том, как я могу получить действительную таблицу стилей, сгенерированную с форматом нумерации, который позволяет отображать 12 цифр только с использованием OpenXML (я не могу использовать какие-либо фреймворки, построенные вокруг него, такие как ClosedXML), я бы оченьцените это.

Спасибо,

1 Ответ

1 голос
/ 29 марта 2012

Вам не хватает стиля по умолчанию в вашей таблице стилей. Добавьте следующую строку (должна быть первой) и измените счетчик cellXfs на 2. Не забудьте обновить свой лист, чтобы использовать стиль «2» вместо «1».

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