如何在ruby中为docx文件添加自定义属性

如何在ruby中为docx文件添加自定义属性,ruby,ms-word,office365,office-js,docx,Ruby,Ms Word,Office365,Office Js,Docx,我试图弄清楚如何在ruby中以编程方式向.docx文件正确添加自定义属性。我还有一个office js加载项,可以读取这些自定义属性,但稍后会有更多内容 以下是我目前在ruby中向.docx文件添加自定义属性的步骤: 使用gem打开文档,并使用Docx:document.open(filepath.zip)读取归档文件的内容 添加一个docProps/custom.xml文件,其中包含我想要的自定义属性元素,例如: 将以下关系元素添加到\u rels/.rels文件中: 注意:Id属性值由存

我试图弄清楚如何在ruby中以编程方式向
.docx
文件正确添加自定义属性。我还有一个office js加载项,可以读取这些自定义属性,但稍后会有更多内容

以下是我目前在ruby中向
.docx
文件添加自定义属性的步骤:

  • 使用gem打开文档,并使用Docx:document.open(filepath.zip)读取归档文件的内容
  • 添加一个
    docProps/custom.xml
    文件,其中包含我想要的自定义
    属性
    元素,例如:
  • 将以下
    关系
    元素添加到
    \u rels/.rels
    文件中:
  • 
    
    注意:Id属性值由存在的
    元素的数量计算得出

    完成这些步骤后: 在空白/新创建的文档上运行此代码后,我可以在计算机上用Word打开该文件,我的office js加载项可以成功读取我在ruby应用程序中设置的自定义属性

    问题: 在我的office js加载项中上载和打开文档时,无法识别已设置的自定义属性

    我的office js外接程序使用Microsoft的office js API读取和写入自定义属性,当以这种方式设置属性时,我的外接程序能够在Word和Word Online中识别它们,因此我非常确定,在尝试在ruby函数中手动设置属性时,我遗漏了一些内容

    我尝试比较了一个由ruby函数设置了自定义属性的
    .docx
    文件和一个使用我的外接程序设置的自定义属性文件的存档,但我看不到任何明显的差异,这将导致Word Online无法识别使用我的ruby设置的自定义属性代码


    不幸的是,似乎没有任何ruby gems允许我像使用office js API那样编辑docx文件上的自定义属性,这就是我求助于手动操作的原因。

    请提供一些“无法识别”的详细信息:您的代码是什么、出了什么问题以及何时出错?另外,尝试实验:保存文件a和B的2个副本。以编程方式将道具添加到a。将两者作为zip文件打开。使用复制粘贴使B与A完全相同。然后查看Word Online是否会读取B中的属性。在实验方面,正如您所提到的,我已经尝试过这样做,但还没有完全确定在使用ruby函数时需要添加或修改什么。有一些差异,我已经确定和复制粘贴,但似乎无法让它的工作思想,这种方法。我有一种感觉,它可能与/word/webextensions文件夹有关,该文件夹存在于由office js加载项编辑的我的文件中,但我不确定使用Open XML SDK生产力工具(这是免费下载)该文件夹中的详细信息是什么。它有一个比较功能,可以显示两个文件之间的单词openxml的差异。打开“坏”文件,然后对“好”文件进行比较,查看它们之间的区别。你提到了这些关系,所以你知道它们可能是一个潜在的问题——仔细看看。定义自定义ID值可能比尝试使用Word使用的可能导致冲突的模式更安全。特别是如果你找不到任何其他的区别。谢谢@Cindymister,方便的工具!这两个文档之间存在一些差异,我曾尝试将粘贴从一个文档复制到另一个文档,但仍然无法使其工作。主要区别在于
    /word/settings.xml
    中有一个
    w:proofstate
    和一个额外的
    w:rsid
    ,而且“好”文件有一个word/webextensions文件夹,其中包含
    /\u rels/taskpanes.xml.rels
    taskpanes.xml
    webextension1.xml
    。在复制粘贴不应该覆盖的前两个文件中没有什么太有趣的内容,但是在
    webextensions1.xml
    中,在
    we:webextension
    we:reference
    中都有一个id,这可能会给我带来麻烦?
    <property fmtid="{D5CDD505-2E9C-101B-9397-08002B2CF9AE}" pid="2" name="matter.id">
        <vt:lpwstr>518</vt:lpwstr>
    </property>
    
    <Override PartName="/docProps/custom.xml" ContentType="application/vnd.openxmlformats-officedocument.custom-properties+xml"/>
    
    <Relationship Id="rId5" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties" Target="docProps/custom.xml"/>