添加现有CustomProperty的不更新的文件

我实际使用图书馆“DOCX”来生成净Word文档(2007+)。 什么是好的是,它可以用“的docx”模板重新创建或更新的文档。

问题:当我 “AddCustomProperty(...)”它不更新的word文档。 我真的需要打开它,然后选择所有和按F9键。 我不知道是否有办法来自动更新了“自定义属性”使用DOCX库。

要重现我的问题,你可以做以下步骤:

  1. 打开“样品”关于DOCX项目中可用。
  2. 运行一次(它会创建在调试\文档文件)
  3. 打开发票模板,然后添加一行(有或无文本),并保存文件
  4. 重新运行相同的样本项目(它会使用现有的模板)
  5. 开的发票的结果。 当你这样做,你可以看到表已经创建, 所有其他字段,直到选中所有尚未更新,然后按CTRL + F9

如果任何人有一个解决方案,我会很乐意喜欢耳朵了。

(注:我不希望MS Word中互操作)

项目和样品,请访问:http://docx.codeplex.com/

--------------解决方案-------------

问题是,当我们用微软Word(我用的是2010年版),然后我们修改模板,并将其保存。 它改变了什么文件包含的内容。

下面是我们所拥有的,当我们首先使用DOCX模板:

<w:fldSimple w:instr="DOCPROPERTY company_name \* MERGEFORMAT" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:r>
<w:t>
<w:rPr>
<w:b />
<w:sz w:val="24" />
<w:szCs w:val="24" />
<w:color w:val="1F497D" />
</w:rPr>Company Name</w:t>
</w:r>
</w:fldSimple>

而当我们使用Word编辑(添加断线​​或一些文本),我们保存它,它fldSimple改写为这样的事情:

<w:pw:rsidR="006D64DE" w:rsidRDefault="006B25B1">
<w:r>
<w:fldChar w:fldCharType="begin" />
</w:r>
<w:r>
<w:instrText>DOCPROPERTY company_name \* MERGEFORMAT</w:instrText>
</w:r>
<w:r>
<w:fldChar w:fldCharType="separate" />
</w:r>
<w:r>
<w:rPr>
<w:b />
<w:color w:val="1F497D" />
<w:sz w:val="24" />
<w:szCs w:val="24" />
</w:rPr>
<w:t>Company Name</w:t>
</w:r>
...
<w:r>
<w:rPr>
<w:b />
<w:color w:val="1F497D" />
<w:sz w:val="24" />
<w:szCs w:val="24" />
</w:rPr>
<w:fldChar w:fldCharType="end" />
</w:r>
</w:p>

与其等待别人来解决这个问题,我只是试着做实现的初稿。 其实,我修改了方法UpdateCustomPropertyValue(...)。 其实,我添加的第一个的foreach的代码。 第二个的foreach已经在那里了,并把它应用到文档从创建DOCX。

internal static void UpdateCustomPropertyValue(DocX document, string customPropertyName, string customPropertyValue)
{
foreach (XElement e in document.mainDoc.Descendants(XName.Get("instrText", w.NamespaceName)))
{
string attr_value = e.Value.Replace(" ", string.Empty).Trim();
string match_value = string.Format(@"DOCPROPERTY {0} \* MERGEFORMAT", customPropertyName).Replace(" ", string.Empty);

if (attr_value.Equals(match_value, StringComparison.CurrentCultureIgnoreCase))
{
XNode node = e.Parent.NextNode;
bool found = false;
while (true)
{
if (node.NodeType == XmlNodeType.Element)
{
var ele = node as XElement;
var match = ele.Descendants(XName.Get("t", w.NamespaceName));
if (match.Count() > 0)
{
if (!found)
{
match.First().Value = customPropertyValue;
found = true;
}
else
{
ele.RemoveNodes();
}
}
else
{
match = ele.Descendants(XName.Get("fldChar", w.NamespaceName));
if (match.Count() > 0)
{
var endMatch = match.First().Attribute(XName.Get("fldCharType", w.NamespaceName));
if (endMatch != null && endMatch.Value == "end")
{
break;
}
}
}
}
node = node.NextNode;
}
}
}

foreach (XElement e in document.mainDoc.Descendants(XName.Get("fldSimple", w.NamespaceName)))
{
string attr_value = e.Attribute(XName.Get("instr", w.NamespaceName)).Value.Replace(" ", string.Empty).Trim();
string match_value = string.Format(@"DOCPROPERTY {0} \* MERGEFORMAT", customPropertyName).Replace(" ", string.Empty);

if (attr_value.Equals(match_value, StringComparison.CurrentCultureIgnoreCase))
{
XElement firstRun = e.Element(w + "r");
XElement firstText = firstRun.Element(w + "t");
XElement rPr = firstText.Element(w + "rPr");

// Delete everything and insert updated text value
e.RemoveNodes();

XElement t = new XElement(w + "t", rPr, customPropertyValue);
Novacode.Text.PreserveSpace(t);
e.Add(new XElement(firstRun.Name, firstRun.Attributes(), firstRun.Element(XName.Get("rPr", w.NamespaceName)), t));
}
}
}

分类:C# 时间:2012-01-01 人气:2
本文关键词: .NET,DOCX
分享到:

相关文章

  • 添加标题,DOCX使用OPENXML 2012-03-05

    我想添加一个新的头(手动使用OPENXML代码),DOCX(Office 2010的)文件,它已经包含了头(header1.xml). 我试图通过添加一个名为myheader.xml只有一个段落文件,OpenXML可以做到这一点. 当Word中打开该文档,头1的内容在不同的位置,提出(2号线低于)以前. 当我删除的段落,(仅<w:hdr> </w:hdr>相关命名空间)头1的内容在不同的药水仍然呈现( 仅 1号线下) 是否有针对此问题的解决方案? --------------解决方

  • Windows 7将不会让我下载AVG,PDF,EXE,DOC,DOCX或腹板和单据 2012-06-05

    我想下载AVG病毒防护. 它得到ALMOST,下载,然后我看看它不能下载. 我无法下载PDF,EXE,DOC,DOCX文档未来通过我的摹MAIL. --------------解决方案------------- 嗨, ·问题是什么时候开始的? ·当你下载附件会发生什么? 第1步:检查问题无加载项模式仍然存在. 尝试"法3"下面的文章中: "如何优化Internet Explorer"的http://support.microsoft.com/kb/936213/ro

  • 阅读DOX,DOCX文件具有相同风格 2012-06-18

    我用下面的代码读取DOC,DOCX文件,并显示在RichTextBox的,但这种方式不能用相同的style.for例子显示的文件,如果文字是用红色的RichTextBox用黑色表现出来我应该怎么办? Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.ApplicationClass(); object nullobj = System.Reflection.Missing.Value

  • 转换器的API文档,DOCX,RTF,TXT,XLS,XSLX,PDF格式为Web应用程序的HTML / HTM格式无需后端使用的MS Office 2012-07-07

    我需要一个第三方API转换* DOC,DOCX,RTF,TXT,XLS,XSLX,PDF转换成HTML / HTM *无后端使用MS Office组件(MSWORD / EXCEL)格式. 该API必须支持图像的相对路径,因为我会在基于ASP.NET Web应用程序中使用它. 请帮我,钱不是问题,付费的API也是可取的. 提前致谢 --------------解决方案------------- 那么,这可能不是你要找的答案,但有可以读取DOC,DOCX,XLS和XLSX格式(ApachePOI)

  • 文本索引(对于Python)与DOC,DOCX和PDF文件的内置支持 2012-08-18

    我目前在寻找一个文本索引我的Python程序. 我入围Solr的,一个Lucene项目,嗖的一声,这是原产于蟒蛇. 我搜索对DOC,DOCX和PDF文件的支持很多文档,和Solr不停地指着我的提卡包,其中一个版本的使用Solr集成. 结果不提及在某些方面,如果任何包有三种格式的内置支持 . 是否嗖和Solr支持他们? 其中其他开源本地索引读取这些格式? --------------解决方案------------- 使用Solr 1.4或更高版本,你可以有上传Word和PDF文件和索引动态; 见

  • Word文档(DOC,DOCX) - 可他们得到的恶意软件? 2012-09-19

    你好朋友. 正如标题所说 - 可以word文档,如DOC或DOCX在他们的恶意软件? 如果是这样的 - 什么都能之一执行,以防止这种情况? 基本上,这是故事:一台PC感染了大量的恶意软件. 现在我要带回我的word文档回到我的新格式化干净的PC而不reinfecting它,我听说word文档可能包含恶意软件. 嗯 - 我能做些什么,除了保持车窗的最新和运行他们的防病毒扫描? 商祺 --------------解决方案------------- 我没有问题,打开该网站时,我将安全级别设置互联网为高

  • 编辑文档(DOC,DOCX,RTF,TXT)的Web表单 2012-10-07

    我正在开发使用asp.net 3.5中的Web应用程序. 此应用程序有很多类似的.doc,.DOCX,.RTF,.PDF,.TXT等文件......有时城市搜救需要编辑这个文件. 作为一名优秀的Web应用程序,用户需要下载的文件,对其进行编辑,并再次上传到服务器. 我想知道是否有什么办法(组件)以使编辑器(如微软Word)在网络表单,允许用户编辑文档,并将其保存在服务器上? 谢谢 --------------解决方案------------- 可以使用WebDAV协议来实现这一点,这是HTTP协

  • 改变我的文档DOC,DOCX,RTF PDF,TXT HTML而不是WPS的 2012-10-10

    我只是购买办公和从Windows 2007年我的文档保存,我需要改变所有文件到DOC,DOCX,RTF,PDF,TXT,HTML我怎么能做到这一点 --------------解决方案------------- 没有视窗2007,并且即使有,也不会产生文档(Windows是一个操作系统). 如果您的文档具有.wps文件扩展名,很有可能他们作品被创造. Word 2010中能够打开.wps文件. 一旦你已经打开了一个文档,你可以在任何的其他格式你提到使用文件重新保存| 另存为.

  • 有没有办法把一个上传的文件前PDF,DOCX的快照并将其保存到服务器在PHP中的形象? 2012-10-26

    我有一个表格,并且允许您使用PDF,DOCX转上传你的简历. 我想他们的IP保存为图像,并把他们上传的文件还为图像和发送图像到人力资源的电子邮件. 如何任何建议,以最好的完成这件事? 所有使用PHP --------------解决方案------------- PDF格式的部分很容易使用PHP和ImageMagick的. 我不知道的东西,从DOCXs创建图像. 出于兴趣,你为什么要送HR图像,而不是原来的文件呢?

  • 我同时从服务器下载文件(DOC,XLS,DOCX等),在IE8和Windows XP中使用的Java Servlet面临的问题。 2012-11-01

    我同时从服务器下载文件(DOC,XLS,DOCX等),在IE8和Windows XP中使用的Java Servlet面临的问题. 我得到这个错误:"Internet Explorer无法从<IP>下载文件<文件名>. 互联网浏览器无法打开此Internet站点. 请求的站点不可用或无法找到. 请稍后再试." 只在第一次出现此错误,但是当我们打同一链路上进入正常工作. 这也是工作在Firefox精绝. 这个问题是发生在有IE8和Window XP中的所有机器. 请

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 2.338 (s). 10 q(s)