【发布时间】:2022-04-28 18:37:19
【问题描述】:
背景与目的
我正在使用 officer 包在 MSWord 中生成格式化的逐项详细信息集合(类似于目录)。
集合中的每个项目都有一个标题,然后是每个定义的详细信息的行。
每行(标题或详细信息)都有一个标签,后跟一个制表符,然后是值。
例如:Item #001 <w: tab\> The Name of the First Item
制表位由作为模板引用的现有 MSWord 文档中的段落样式定义。模板文件是空的,但包含我们需要的样式定义。(注意:我无法发布 Word 文件 - 请参阅帖子末尾以了解创建最小可复制 MSWord 模板文档的步骤;然而,挑战似乎是officer 如何处理选项卡。)
在R,我生成的内容如下:
library(officer)
# Open an MSWord document containing the style definitions
doc <- read_docx("my_template.docx")
# Add the Header
doc <- doc %>% body_add_par("Item #001: The first item", style = "Equip Header")
# Add some details
doc <- doc %>% body_add_par("QUANTITY:<w:tab/>One (1)", style = "Equip Detail")
doc <- doc %>% body_add_par("PROVIDED BY: K.E.C.", style = "Equip Detail")
doc <- doc %>% body_add_par("PROVIDED BY: 	 K.E.C.", style = "Equip Detail")
#... and so on ...
# save the file
print(doc, target = "test.docx")
请注意,在第一个详细信息项中,我为选项卡添加了 Word xml 标记,在第二个详细信息项中,我在值字符串中使用了制表符(使用制表键),在第三个详细项中,我使用 html 字符作为水平选项卡。
该脚本按预期工作,但选项卡除外。这是保存到test.docx 的内容。
如图所示,段落样式中仍然存在制表位,但标签/值集的“值”部分没有被制表符覆盖。我们可以在图像中看到第一个和第三个选项卡被视为转义字符串。在第二项中,制表符被视为两个空格。
这是设计使然。 body_add 函数转义特殊字符。这样,“>”变为“&lt;”,“&#9;”变为“&amp;#09;”
这是使用制表符/制表位时的样子。
问题:
如何在 MS Word 中生成使用 MS Word 段落样式、尊重制表位并在字符串中保留制表符的使用的内容?
我对其他 r 软件包/解决方案持开放态度
为测试创建一个简单的可重现模板
- 打开一个新的 MSWord 文档
- 键入一些内容(您的标签)
- 将光标放在同一行,设置制表位(有关创建制表位的步骤,请参阅here)
- 在制表位处键入更多内容(您的值)
- 选择线条并定义样式
- 从主页功能区,展开样式菜单并选择“创建样式”,输入您的样式名称(这是
...body_add("your string", style = "your style name")中使用的名称 - 点击“确定”
- 从文件中删除所有内容并将其保存在工作目录中。
【问题讨论】: