- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在向 docx 添加一些自定义 XML,以便在我正在编写的应用程序中跟踪它。
我是通过 ZIP 库打开 Word 文档并通过官方 Open XML SDK 路径手动完成的。两者都有相同的结果,即我的 XML 被插入到文档中的 customXml 文件夹中。对于这两种方法,文档都可以在 Word 中正常打开,并且存在 XML。
但是当我将文档另存为 MyDoc2.docx 时,例如我所有的 XML 都消失了。
我做错了什么?
我一直关注的 Microsoft 链接:
http://msdn.microsoft.com/en-us/library/bb608597.aspx
http://msdn.microsoft.com/en-us/library/bb608612.aspx
以及我从 Open XML SDK 2.0 获取的代码:
public static void AddNewPart(string document, string fileName)
{
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
{
MainDocumentPart mainPart = wordDoc.MainDocumentPart;
CustomXmlPart myXmlPart = mainPart.AddCustomXmlPart(CustomXmlPartType.CustomXml);
using (FileStream stream = new FileStream(fileName, FileMode.Open))
{
myXmlPart.FeedData(stream);
}
}
}
谢谢,约翰
最佳答案
好的,所以我设法找到了以下文章Using Custom XML Part as DataStore在 openxmldeveloper.org 上,删除了不必要的代码,以便插入和保留自定义 XML:
static void Main(string[] args)
{
using (WordprocessingDocument doc = WordprocessingDocument.Open("Test.docx", true, new OpenSettings()))
{
int customXmlPartsCount = doc.MainDocumentPart.GetPartsCountOfType<CustomXmlPart>();
if (customXmlPartsCount == 0)
{
CustomXmlPart customXmlPersonDataSourcePart = doc.MainDocumentPart.AddNewPart<CustomXmlPart>("application/xml", null);
using (FileStream stream = new FileStream("Test.xml", FileMode.Open))
{
customXmlPersonDataSourcePart.FeedData(stream);
}
CustomXmlPropertiesPart customXmlPersonPropertiesDataSourcePart = customXmlPersonDataSourcePart
.AddNewPart<CustomXmlPropertiesPart>("Rd3c4172d526e4b2384ade4b889302c76");
Ds.DataStoreItem dataStoreItem1 = new Ds.DataStoreItem() { ItemId = "{88e81a45-98c0-4d79-952a-e8203ce59aac}" };
customXmlPersonPropertiesDataSourcePart.DataStoreItem = dataStoreItem1;
}
}
}
因此,只要您不修改文件,Microsoft 的所有示例都可以使用。问题似乎是因为我们没有设置与主文档的关系。
关于c# - 为什么我的自定义 XML 在 Word 保存时不会转移到新版本的 DOCX 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6341845/
如果我将我的个人 repo 转移到一个组织(由我创建),我将失去所有 见解 例如来自原始 Repo 的流量历史记录、拉取请求、贡献者、 fork 等? 最佳答案 拉取请求被保留:参见“About re
如何为解析 if-then[-else] 案例制定正确的规则?这是一些语法: { module TestGram (tparse) where } %tokentype { String }
如何为解析 if-then[-else] 案例制定正确的规则?这是一些语法: { module TestGram (tparse) where } %tokentype { String }
我读过有关mutex的信息,这些信息由线程拥有,并且只能由拥有的线程使用。在this answer中,该解决方案建议每个进程在发出互斥信号之前,必须拥有互斥锁的所有权。我必须在这里承认自己的愚蠢,不知
我只能从回调函数之一中想到 curl_close() 。 但是 php 抛出了一个警告: PHP 警告:curl_close():尝试从回调中关闭 cURL 句柄。 任何想法如何做到这一点? 最佳答案
带有冲突的语法的精简版本: body: variable_list function_list; variable_list: variable_list variable | /* empty
我创建了新的开发者帐户,然后将应用程序转移到新帐户。然后我在新帐户下创建了相同的标识符。并构建App并上传到AppStore。 I have got the warning with WARNING
我想像这样管理类主任的所有 Activity : 此外所有 Activity 都扩展基本 Activity 以使用公共(public) View 。 在这种情况下,我想处理传输 Activity ,例
使用 C 中的简单链表实现,我如何告诉 Splint 我正在转让 data 的所有权? typedef struct { void* data; /*@null@*/ void* ne
请参阅以下 yacc 代码。如果我删除生产因素:'!' expr,解析冲突消失。这里发生了什么? %{ #include #include %} %token TRUE %token FALSE
是否可以将 props 向下传输到子组件,其中 { ..this.props } 用于更简洁的语法,但是排除某些 props,如 className 或 id? 最佳答案 您可以使用解构来完成这项工作
如果我有以下数据框: date A B M S 20150101 8 7 7.5 0 20150101 10 9 9
我需要将一个 __m128i 变量(比如 v)移动 m 位,以便位移动所有变量(因此,结果变量表示 v*2^m)。执行此操作的最佳方法是什么?! 请注意 _mm_slli_epi64 分别移动 v0
我需要这样调用我的程序: ./program hello -r foo bar 我从 argv[1] 中打招呼,但我在使用值 bar 时遇到问题,我是否也应该将“r:”更改为其他内容? while((
我是新来的 Bison我在转换/减少冲突方面遇到了麻烦...我正在尝试从文件加载到 array data[] : struct _data { char name[50]; char sur
当然有很多关于解决移位/归约错误的文档和方法。 Bison 文档建议正确的解决方案通常是%期待它们并处理它。 当你遇到这样的事情时: S: S 'b' S | 't' 您可以像这样轻松解决它们: S:
我有以下(大量精简的)快乐语法 %token '{' { Langle } '}' { Rangle } '..' { DotDot } '::' { ColonC
我的 Bison 解析器中有很多错误,即使它运行良好,我也想了解这些冲突。代码如下: 词法分析器: id ([[:alpha:]]|_)([[:alnum:]]|_)* %% {id
在我的项目中,我有这样的情况,一个 Activity 应该将值(value)转移到另一个 Activity 。并且根据这个值应该选择需要的菜单元素。我试图在 bundle 的帮助下做到这一点,但我不知
我一直在阅读 NSIndexPaths 以获得 uitableviews 等。但是我很难操纵现有的索引路径。 我想在保留行的同时采用现有的索引路径递增/移动每个部分。因此 indexPath.sect
我是一名优秀的程序员,十分优秀!