我想从命令行向 libreoffice calc 表添加行。但我不知道怎么做。
我刚刚弄清楚了如何从命令行启动 libreoffice。
例如我正在寻找:-test.ods-file
之前
Name Text
Hans Bla
Christian BlaBlub
我进入...
ubuntu> [a command -insert] Alf|test -file=test.ods
这样“Alf”和“test”就被添加为表中的下一行。-
之后test.ods-file
:
Name Text
Hans Bla
Christian BlaBlub
Alf test
答案1
.ods
是一个档案。因此您需要提取该档案。
来自文档:
XML 文件结构
OpenDocument 文件格式的文档以包含 XML 文件的压缩 zip 存档形式存储。要查看这些 XML 文件,您可以使用解压缩程序打开 OpenDocument 文件。OpenDocument 文件中包含以下文件和目录:
- 文档的文本内容位于content.xml中。
所以这并不像
[a command -insert] Alf|test -file=test.ods
因为您还需要插入 XML 部分。
$ cd ~/tmp/
$ unzip ../test.ods
Archive: test.ods
extracting: mimetype
extracting: Thumbnails/thumbnail.png
inflating: settings.xml
inflating: content.xml
inflating: meta.xml
inflating: styles.xml
inflating: manifest.rdf
creating: Configurations2/images/Bitmaps/
creating: Configurations2/toolpanel/
creating: Configurations2/progressbar/
inflating: Configurations2/accelerator/current.xml
creating: Configurations2/floater/
creating: Configurations2/statusbar/
creating: Configurations2/toolbar/
creating: Configurations2/popupmenu/
creating: Configurations2/menubar/
inflating: META-INF/manifest.xml
当您查看 content.xml 并且想要在最后一行下方添加一个新行时,您需要添加类似这样的内容...
<table:table-row table:style-name="ro1">
<table:table-cell office:value-type="string" calcext:value-type="string"><text:p>a2a2a2</text:p>
</table:table-cell><table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>b2b2b2</text:p>
</table:table-cell></table:table-row>
前
<table:named-expressions/>
然后再次压缩文件(zip -r ../test2.ods .
从包含文件的目录中)。
结果:
为了从命令行编辑文件,我使用了此命令。我将示例放在 ~/Downloads 中,并在其中创建了一个 tmp/ 进行测试。所有用于此目的的命令:
cd ~/Downloads/tmp/
unzip ../test.ods
sed 's#</table:table><table:named-expressions/>#<table:table-row table:style-name="ro1"><table:table-cell office:value-type="string" calcext:value-type="string"><text:p>a3a3a3</text:p></table:table-cell><table:table-cell office:value-type="string" calcext:value-type="string"><text:p>b3b3b3</text:p></table:table-cell></table:table-row>&#' content.xml > content2.xml
mv content2.xml content.xml
zip -r ../test2.ods .
您需要做的就是用您自己的文本片段替换文本片段。
较新版本由 Terdon 提供(它使用变量使其更易于阅读):
$ from="</table:table><table:named-expressions/>"
$ to="<table:table-row table:style-name="ro1"><table:table-cell office:value-type="string" calcext:value-type="string"><text:p>a3a3a3</text:p></table:table-cell><table:table-cell office:value-type="string" calcext:value-type="string"><text:p>b3b3b3</text:p></table:table-cell></table:table-row>"
$ sed "s#$from#$to$from#" content.xml
“#” 是分隔符。如果文本中有“#”,请使用其他分隔符。