OpenXML生成代码冻结Visual Studio

时间:2012-08-24 14:51:42

标签: c# visual-studio-2010 openxml

我正在为客户端进行DocumentML处理,我对OpenXML完全不熟悉。我已经阅读并听取了Erik White的博客,OpenXML看起来非常强大。我遇到的问题是OpenXML Productivity工具生成的代码中有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

1 个答案:

答案 0 :(得分: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()); 
}