0

我正在为客户处理 DocumentML,我对 OpenXML 完全陌生。我已经阅读并收听了 Erik White 的博客,OpenXML 似乎非常强大。我遇到的问题是 OpenXML Productivity 工具生成的代码中有 21121 行。我添加了一个类并将此代码粘贴在那里,现在任何时候我的解决方案尝试进入该类它都会冻结,如果我尝试在 IDE 中打开该类,VS 会冻结。我以前从未遇到过这个问题,因为我的机器有 8 GB 内存和 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)
                { }    

但是代码从不属于那个条件。我在这里缺少什么吗?感谢您的帮助 结束编辑 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 回答