Microsoft Word自动化 - 删除标题(及其子信息) - 以编程方式

时间:2016-01-26 17:36:29

标签: php python ms-word automation

只是想知道是否有人有阅读Microsoft Word文档和以编程方式删除某些段落和块的经验(基于标题)

是否有人知道任何可以使用我熟悉的语言之一执行此操作的库:

  • 的Python
  • PHP
  • C#
  • 爪哇

我已经搜索了一些,大多数似乎能够读取和写入文档(及其部分),但迭代一份当前标题的列表似乎并没有被覆盖。如果我可以将列表作为对象(或类似的东西),那么我可以专门删除我想要的内容。

这样做的主要目的是我有一个包含大量信息的大型模板文档,但只需要某些部分,每个文档都要选择,因此我打算构建一个小前端来动态生成这些文档。 / p>

How I would achieve this in MS Word

正如您在上图中所看到的,删除" Mutts"标题2项目将删除红色框内的所有内容,如果可以使用任何预先编写的库,这将是惊人的,我将不必深入研究XML。

如果可能的话,我也不想使用COM(组件对象模型),但如果涉及到我可能会使用Python for Windows Extensions。

非常感谢你们提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

我发布这个作为答案,因为评论的信息太多了。考虑到这一点,这不会 真正回答你的问题。对于看起来像这样的word文档:

标题1

东西

东西

东西

标题2

其他东西

其他东西

其他东西

生成的xml,剥离了属性和不必要的元素,如下所示:

<?xml encoding="UTF-8"?>
<w:document>
    <w:body>
        <w:p>
            <w:pPr>
                <w:pStyle w:val="Heading1"/>
            </w:pPr>
            <w:r>
                <w:t>Heading 1</w:t>
            </w:r>
        </w:p>
        <w:p>
            <w:r>
                <w:t>Stuff</w:t>
            </w:r>
        </w:p>
        <w:p>
            <w:r>
                <w:t>Stuff</w:t>
            </w:r>
        </w:p>
        <w:p>
            <w:r>
                <w:t>Stuff</w:t>
            </w:r>
        </w:p>
        <w:p/>
        <w:p>
            <w:pPr>
                <w:pStyle w:val="Heading1"/>
            </w:pPr>
            <w:r>
                <w:t>Heading 2</w:t>
            </w:r>
        </w:p>
        <w:p>
            <w:r>
                <w:t>Other stuff</w:t>
            </w:r>
        </w:p>
        <w:p>
            <w:r>
                <w:t>Other stuff</w:t>
            </w:r>
        </w:p>
        <w:p>
            <w:r>
                <w:t>Other stuff</w:t>
            </w:r>
        </w:p>
    </w:body>
</w:document>

所以,&#34;内容&#34;每个标题下方都没有真正包含在标题内。我所使用的API都不能用于迭代现有文档。即使你可以检索标题列表,你也需要获取该标题和下一个标题之间的所有段落。话虽如此,我仍然不愿意认为那里有一个很好的图书馆。

我之前使用过Python的docx模块来创建文档,并且花费了一些时间。通常,您可能需要考虑一种加法方法(创建所需的标题)而不是减法方法(删除您不需要的标题)。另外,仅供参考,可以通过将.docx文件重命名为.zip来探索SELECT a.ID, a.dat1, b.dat3 FROM Table_1 a LEFT JOIN Table_2 b on a.ID=b.ID 文件。