如何在用 R 创建的 MSWord 文档中使用制表位?
How do I Use Tab Stops in MSWord Documents Created in R?
背景和Objective
我正在使用 officer
程序包在 MSWord 中生成格式化的 collection 详细信息(类似于目录)。
collection 中的每个项目都有一个 header,后跟一行用于每个定义的详细信息。
每一行(header 或详细信息)都有一个标签,后跟一个制表符,然后是值。
例如:Item #001 <w: tab\> The Name of the First Item
制表位由作为模板引用的现有 MSWord 文档中的段落样式定义。模板文件是空的,但包含我们需要的样式定义。
(注意:我不能 post Word 文件 - 请参阅 post 末尾以了解创建最低限度可重现的 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
.
的内容
如图所示,段落样式中仍存在制表位,但 label/value 集的“值”部分未被制表符覆盖。我们可以在图像中看到第一个和第三个选项卡被视为转义字符串。在第二项中,制表符被视为两个空格。
这是设计使然。 body_add
函数转义特殊字符。这样,“>”变成“<
”,“	
”变成“&#09;
”
这是使用制表符/制表位时的样子。
问题:
如何在 MSWord 中生成使用 MSWord 段落样式、尊重制表位并保留在字符串中使用制表符的内容?
我对其他 r
软件包/解决方案持开放态度
创建用于测试的简单可复制模板
- 打开一个新的 MSWord 文档
- 输入一些内容(您的标签)
- 将光标放在同一行上,设置制表位(有关创建制表位的步骤,请参阅here)
- 在制表位处再输入一些内容(您的值)
- Select行和定义样式
- 在“主页”功能区中,展开“样式”菜单,然后select“创建样式”,输入您的样式名称(这是
...body_add("your string", style = "your style name")
中使用的名称
- 点击“确定”
- 从文件中删除所有内容并将其保存在工作目录中。
答案是用\t
表示tab
这可以用'\t'来完成。您定义模板的方式是正确的。
您还可以在段落属性框中定义表格的位置。
我在这里发布了模板:https://github.com/davidgohel/officer/files/8581914/template.docx
library(officer)
library(dplyr)
doc <- read_docx(path = "template.docx")
styles_info(doc, type = "paragraph") %>%
filter(style_name %in% "NormalPlusTabs")
doc %>%
body_add_fpar(fpar("Name:\tdoudou\tbleu"), style = "NormalPlusTabs") %>%
print(target = "test.docx")
背景和Objective
我正在使用 officer
程序包在 MSWord 中生成格式化的 collection 详细信息(类似于目录)。
collection 中的每个项目都有一个 header,后跟一行用于每个定义的详细信息。
每一行(header 或详细信息)都有一个标签,后跟一个制表符,然后是值。
例如:Item #001 <w: tab\> The Name of the First Item
制表位由作为模板引用的现有 MSWord 文档中的段落样式定义。模板文件是空的,但包含我们需要的样式定义。
(注意:我不能 post Word 文件 - 请参阅 post 末尾以了解创建最低限度可重现的 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
.
如图所示,段落样式中仍存在制表位,但 label/value 集的“值”部分未被制表符覆盖。我们可以在图像中看到第一个和第三个选项卡被视为转义字符串。在第二项中,制表符被视为两个空格。
这是设计使然。 body_add
函数转义特殊字符。这样,“>”变成“<
”,“	
”变成“&#09;
”
这是使用制表符/制表位时的样子。
问题:
如何在 MSWord 中生成使用 MSWord 段落样式、尊重制表位并保留在字符串中使用制表符的内容?
我对其他 r
软件包/解决方案持开放态度
创建用于测试的简单可复制模板
- 打开一个新的 MSWord 文档
- 输入一些内容(您的标签)
- 将光标放在同一行上,设置制表位(有关创建制表位的步骤,请参阅here)
- 在制表位处再输入一些内容(您的值)
- Select行和定义样式
- 在“主页”功能区中,展开“样式”菜单,然后select“创建样式”,输入您的样式名称(这是
...body_add("your string", style = "your style name")
中使用的名称
- 点击“确定”
- 从文件中删除所有内容并将其保存在工作目录中。
答案是用\t
表示tab
这可以用'\t'来完成。您定义模板的方式是正确的。 您还可以在段落属性框中定义表格的位置。
我在这里发布了模板:https://github.com/davidgohel/officer/files/8581914/template.docx
library(officer)
library(dplyr)
doc <- read_docx(path = "template.docx")
styles_info(doc, type = "paragraph") %>%
filter(style_name %in% "NormalPlusTabs")
doc %>%
body_add_fpar(fpar("Name:\tdoudou\tbleu"), style = "NormalPlusTabs") %>%
print(target = "test.docx")