2012-03-29 2 views
3

OpenXMLを使用して12桁のUPC用に書式を設定するExcel文書で列を取得しようとしています。 I(このquestion基づいて)次のコードを使用していますこれを達成するためにCでOpenXMLで数値書式を適用するときに問題が発生しました

:上記のコードは、残念ながらExcelのような破損と判断スタイルシートを生成

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> 

誰も私のようなだけのOpenXMLを(それを中心に構築された任意のフレームワークを使用することはできません使用して表示される12桁の数字を可能番号形式で生成された有効なスタイルシートを、得ることができる方法についての洞察を提供することができればクローズドXML)私はうわーuldはそれを非常に感謝します。

おかげで、

+0

[OpenXML Productivity Tool](http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=5124)を使用して問題を把握しました。 フォント、罫線、塗りつぶし、およびセルスタイルのセクションも追加する必要があることを発見しました。私が望む形式の空白を作成することで、このツールを使用して必要なコードを確認することができました。 - **注**:マヌエルの答えを見る前にこれを理解したので、彼の提案だけで十分であるかどうかはわかりませんが、どのような場合でも生産性ツールを使用すると、鉱山。 –

答えて

1

は、あなたのスタイルシートのデフォルトのスタイルを逃しています。次の行を追加し(最初にする必要があります)、cellXfsの数を2に変更します。「1」ではなく「2」のスタイルを使用するようにシートを更新することを忘れないでください。

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

マヌエル、フォント、塗りつぶし、ボーダー、セルスタイルのセクションを定義する必要がないことを確認できれば、答えは –

+0

です。私はそれを言及すべきだった。フォント、塗りつぶし、および罫線のデフォルトのスタイルを指定する必要があります。なんらかの理由で、数字形式は暗黙のデフォルトを持っています。 – Manuel

関連する問題