有几种方法可以从编程语言中创建Word文档,包括R Markdown和带有R的officer包以及Python中的Python -docx库。但最新的、更有趣的是Quarto,它是RStudio(现在是Posit)提供的免费、开源技术发布系统,是Python、Julia和R的原生版本。
Quarto的最大优势之一是,与特定于Word的包不同,经过一些小调整的相同Quarto文件可以用于生成除Word之外的数十种输出格式,包括PowerPoint、HTML和PDF。(了解更多:“什么是Quarto?”RStudio推出下一代R Markdown”。)此外,您还可以自动创建Word报告,并包括分析结果和可视化代码。
下面是如何使用Quarto创建Word文档。
步骤1:安装Quarto
因为Quarto不是特定于语言的库,所以可以像安装其他独立软件一样安装它。你可以在Quarto的“Get Started”页面上找到Windows、macOS和Linux的二进制下载。
如果您是R用户,并且拥有最新版本的RStudio,那么默认情况下应该包含Quarto。您不需要单独安装Quarto。
如果您想在Visual Studio Code中使用Quarto,除了安装Quarto应用软件外,还需要安装Quarto扩展。为了呈现包含Python代码的Quarto文档,我的系统还指示我通过运行python3 -m pip install Jupyter来安装Jupyter Notebook。
您可以使用任何纯文本编辑器和终端创建和呈现Quarto文件,就像使用R或Python脚本一样,因为它们是纯文本而不是二进制文件。但是,您将错过IDE的所有内置工具,例如代码完成建议和呈现按钮。
步骤2:创建一个Quarto文档文件
一旦你安装了Quarto,你可以用通常的方式在你的IDE中创建一个新的Quarto文件,要么在RStudio中创建>新文件>四Quarto文档(不是四Quarto Presentation),要么在VS Code中创建>新文件,并选择“Quarto”作为语言。
在RStudio中,您可以选择几种Quarto文档输出格式。选择Word,然后可以自动生成Word示例文档或空白文档。在您熟悉Quarto语法之前,看看示例是什么样子是很有帮助的。
RStudio在选择Word输出时生成的示例四开本文档。
RStudio中默认的YAML头包括标题、输出格式(在本例中为Word的docx)和编辑器(可视所见即所得或源代码)。
如果你在VS Code中从一个空白文档开始,你可以在顶部添加基本的YAML头:
—
title: “Your document title”
format: docx
—
据我所知,在VS Code中没有WYSIWYG四分之一编辑器,所以没有理由指定一个编辑器。
然后开始创建你的内容。
步骤3:使用Markdown语法添加文本
Quarto使用Pandoc版本的Markdown语法来编写文本。这包括在你想要用斜体显示的文本周围加一个下划线,在你想要加粗的文本上加两个星号,在段落之间加空行,在一行末尾加两个或多个空格来创建换行符,在一行开头加散列符号来表示标题字体大小。一个散列表示最大的字体大小,h1;2是第二大的,h2;等等。
第4步(可选):根据引用.docx为文档设置样式
一些为Quarto HTML输出格式设计的基于css的文档样式在导出到Word时将无法工作。但是,您可以为您的文档创建一个单独的参考样式Word文档,其中包含字体样式、大小等。
下面的代码应该在你的终端(不是R或Python控制台)中运行,以创建一个默认的Word样式文档,在这个例子中称为my_doc_style.docx(你可以叫它任何名字):
quarto pandoc -o my-doc-style.docx \
—print–default-data-file reference.docx
这将创建一个常规的Word .docx文件,而不是Microsoft Word .dotx模板。您可以打开您的引用.docx,并通过从Word功能区打开样式面板来自定义它的样式,就像对任何Word文档一样。
要在Quarto文档中使用模板,请使用如下语法将其添加到文档的YAML头文件中:
format:
docx:
reference-doc: my-doc-style.docx
对于Quarto Word文档,还可以使用其他自定义功能,例如添加目录或节编号,这些可以在Quarto Word文档中看到。
步骤5:将R或Python代码的结果添加到Word文档中
从R或Python生成Word文档的最佳功能之一是能够运行代码并将结果添加到文档中(包括图形)。
你可以通过在你的Quarto文件中添加代码块来做到这一点,这些代码块由三个反引号来设置,就像R:
“`{r}
# R code here
“`
或者Python是这样的:
“`{python}
# Python code here
“`
您可以为代码块设置选项,例如是否显示代码(echo)、运行代码(eval)、显示代码警告消息,等等。对于R、Python或Julia,块选项以#|(通常称为“散列管道”)开始。
下面的chunk选项将在一个chunk中显示R代码的结果,但不显示Word文档中的代码:
“`{r}
#| echo: false
#| eval: true
# R code here
“`
其他选项包括#| fig-cap:我的图标题,#| warning: false表示在代码运行时不显示任何警告消息,#| cache: true表示缓存计算密集型块的结果,其中数据不会改变。
可以使用!expr执行图标题选项中的代码,其语法为
#| fig-cap: !expr paste(“Data pulled on”Sys.Date())
步骤6:渲染文档
你可以在RStudio或VS Code中使用渲染按钮,键盘快捷键Ctrl/Cmd + Shift + K或终端命令来渲染一个Quarto文档
quarto render my_quarto_document.qmd –to docx
对于名为my_quarto_document的文档。
R用户也可以使用quarto R包的命令
quarto_render(“my_quarto_document”)
注意:在早期版本中,RStudio弹出的初始Word文档预览有时并不总是显示我的图形。这似乎已经解决了。但是,如果您遇到这种情况,请尝试将初始的.docx文件复制为一个新的、可编辑的Word文档,因为这为我解决了这个问题。
步骤7(可选):用参数自动化多个版本
能够使用代码的结果创建Word文件不仅对一次性文档有用。它还允许您通过从外部数据源提取新数据、运行新计算并通过单个渲染调用生成最新图形的代码简化常规数据报告和更新。
但是Quarto还能够向报表添加参数,这些参数类似于呈现期间在外部定义的变量。这样您就可以使用报表作为模板,并为不同的参数(如城市或地区)创建相同的报表。例如,如果您需要为10个城市中的每一个运行一个报告,那么city可以定义为文档YAML头中的一个参数,例如
—
title: “My Quarto Document”params:
city: New York—
这将设置一个名为city的参数,其默认值为New York。然后,您可以在R代码中使用params$city访问city参数的值,例如
“`{r}
#| echo: false
cat(“This report is about”, params$city)
“`
为了在R中使用相同的Quarto文档创建多个报告,但参数值不同,我通常创建一个函数来呈现我的文档,然后使用purrr包的walk()函数在一列项上运行我的函数。例如,如果参数化的Quarto文档名为params_test。qmd有一个名为city的参数,这可以是我在R中的渲染函数:
render_my_doc <- function(the_city = “New York”, the_doc = “params_test.qmd”) {
quarto::quarto_render(input = the_doc, execute_params = list(“city” = the_city),
output_file = paste0(“test_”, the_city, “.docx”), output_format = “docx”)
}
下面是我如何使用函数为纽约、芝加哥和洛杉矶生成三个单独的文档:
library(purrr)
walk(list(“New York”, “Chicago”, “Los Angeles”), render_my_doc)
Python语法略有不同,它基于造纸厂库。例如,在Python代码块中定义参数,如下所示
“`{python}
#| tags: [parameters]
city = ‘Boston’
“`
你可以在Quarto Parameters文档中阅读更多关于Python文档参数化的信息。
本文由数字化转型网(www.szhzxw.cn)翻译而成,作者:Sharon Machlis;翻译:数字化转型网郑亚茹;翻译审核:数字化转型网默然。

免责声明: 本网站(http://www.szhzxw.cn/)内容主要来自原创、合作媒体供稿和第三方投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等) 版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。
