如何有效地将 R 中的表格插入 Word 文档?

如何有效地将 R 中的表格插入 Word 文档?

我正在使用 LibreOffice 创建 Word 文档 (.docx)。我需要包含一些我在 R 中计算的数字结果。它们看起来像一个简单的数字表,行和列带有文本标题,以及一些 NA(表示 R 的“缺失值”常量的字符串)。

我尝试将表格以 .csv 格式保存到磁盘,在 LibreOffice Calc 中打开,然后将其复制粘贴到 Writer 中。它被插入为 OLE 对象。这有几个问题。首先,这意味着文档很大,打开速度很慢。其次,我担心兼容性问题(当其他人使用 Word 而不是 LibreOffice 阅读此内容时,我不相信 OLE 对象会正常工作)。第三,它将表格中的数字格式化为数字(右对齐),但将 NA 值格式化为文本(左对齐),并将包含 NA 的行上的所有数字格式化为文本。因此很难阅读,因为列没有对齐。

我知道我可以在 LibreOffice 中创建一个表格,然后将数字复制粘贴到那里。但是有没有更快的解决方案,也许是一些可以自动从 .csv 创建表格的 Word 插件,或者可能是将 R 输出保存为 HTML 表格的方法(粘贴到 LibreOffice 中时会自动格式化)?我不需要花哨的外观,只要一切都排列整齐并创建一个原生的 Word 表格即可。

答案1

您只需在 LibreOffice(writer)中打开 .csv,选择全部,然后单击表格向导:

在此处输入图片描述

就我而言,这导致了:

在此处输入图片描述


至于 HTML 方式,以下 PERL 脚本将执行您需要的操作(我假设您使用的是 Linux 并且有一个以空格分隔的 .csv 文件):

#!/usr/bin/perl -w
print <<EOF;
<html>
<head>
<style>
TABLE{
border-collapse:collapse;

}
TD{
border:1px solid black;
padding:3px;
text-align:left;
}
</style>
</head>
<body>
<table>

EOF
while(<>){
    chomp; 
    print "<tr>";
    my @a=split(/\s+/); 
    print "<td>$_</td>" foreach (@a);
    print "</tr>\n";
}
print "</table></body></html>\n";

将脚本保存为 csv2html.pl 并像这样运行:

$ perl csv2html.pl input.csv > output.html

答案2

事实证明,LibreOffice 还具有选择性粘贴功能(废话)。它允许我在粘贴从 Calc 复制的表格时选择“格式化文本”或“HTML”而不是“calc8”。我仍然更喜欢脚本解决方案,因为选择性粘贴使用 Calc 中现有的格式,其中带有 NA 的行左对齐,只有数字的行右对齐。

相关内容