0

私はクライアントの DocumentML 処理に取り組んでおり、OpenXML はまったく初めてです。私は Erik White のブログを読んだり聞いたりしましたが、OpenXML は非常に強力なようです。私が抱えている問題は、OpenXML Productivity Tool によって生成されたコードに 21121 行が含まれていることです。クラスを追加し、そこにこのコードを貼り付けました。ソリューションがそのクラスに入ろうとすると、いつでもフリーズします。また、IDE でクラスを開こうとすると、VS がフリーズします。私のマシンには 8 GB の RAM と 4 コアのプロセッサが搭載されているため、この問題はこれまで一度もありませんでした。

誰かが以前にこの問題を抱えていましたか? OpenXML のために必要な設定または何かがありますか。VS 2010 Ultimate SP1 を実行しており、フル インストールを実行しました。どんな助けでも大歓迎です。

ありがとう

編集1

フォームにあるチェックボックスにアクセスしようとしています。派生した XML を見ると、

<w:sdtPr xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
 <w:rPr>
  <w:rFonts w:asciiTheme="minorHAnsi" w:hAnsiTheme="minorHAnsi" w:cstheme="minorHAnsi" />
  <w:sz w:val="20" />
  <w:szCs w:val="20" />
 </w:rPr>
 <w:id w:val="-210274200" />
 <w14:checkbox xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml">
  <w14:checked w14:val="0" />
  <w14:checkedState w14:val="2612" w14:font="MS Gothic" />
  <w14:uncheckedState w14:val="2610" w14:font="MS Gothic" />
 </w14:checkbox>
</w:sdtPr>

ノードにチェックボックスが含まれているかどうかを確認しようとしているので、次のようにします。

  private static XNamespace w14 = 
        "http://schemas.microsoft.com/office/word/2010/wordml>";

 if (element.Elements(w + "sdtPr")
                        .Elements(w14 + "checkbox").Count() > 0)
                { }    

しかし、コードがその条件に該当することはありません。ここに欠けているものはありますか?助けてくれてありがとう END EDIT 1

4

1 に答える 1

0

最初は、生産性ツールによって生成されたコードをコピーし、それをファイルとして使用するという同じアプローチをとっていました。これにより、VS が常にクラッシュし、変更ごとにコードを完全に再生成する必要があったため、テストと更新が非常に面倒でした。これにより、テンプレートを使用するようになりました。これにより、時間を大幅に節約でき、メモリへのロードと Open XML SDK での操作が非常に簡単になりました。

byte[] byteArray = File.ReadAllBytes("C:\\temp\\test.docx");
using (MemoryStream stream = new MemoryStream())
{
    stream.Write(byteArray, 0, (int)byteArray.Length);
    using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(stream, true))
    {
       // Do work here
    }
    File.WriteAllBytes("C:\\temp\\test.docx", stream.ToArray()); 
}
于 2012-08-28T13:44:26.530 に答える