LibreOffice,如何在使用命令行导出时保留前导零?

LibreOffice,如何在使用命令行导出时保留前导零?

我在 Ubuntu 15.10 Docker 容器中使用 LibreOffice 5.0.5.2 将任意传入的电子表格文件转换为规范的 CSV 文件:

/usr/lib/libreoffice/program/soffice.bin \
    --convert-to 'csv:Text - txt - csv (StarCalc):44,34,76,1,1/2/2/2/3/2,1031,true,false,true' \
    --outdir '/tmp/outgoing' \
    'incoming.csv'

我认为文档,此命令行应忠实地将电子表格转换为 CSV,使用:

  • ,作为字段分隔符(“44”)
  • "作为括号字符(“34”)
  • UTF-8 作为传入编码(“76”)
  • 从文件的第一行开始(“1”)
  • 将第 1、2 和 3 列格式化为文本(“1/2/2/2/3/2”),
  • 使用 UTF-8 进行传出编码(“1031”)
  • 引用所有文本单元格(“true”)
  • 不检测特殊数字(“false”)
  • 保存单元格内容如图所示(“true”)

这种方法效果很好,但包含某些前导零的文本的列除外。例如,如果incoming.csv是这样的:

"0123456789"

最终导出的文件如下:

123456789

我的理解是,如果列被标记为文本进口,这将保留前导零,然后反过来,在出口将保留这些保留的零。但对于某些输入集来说,情况似乎并非如此。

例如,它们保留其前导零,我认为这是因为它们包含非数字字符:

  • 0x3E
  • 0 123 456

使用命令行,如何诱导 LibreOffice 在导出期间保留前导零?

答案1

最后,我找到了三个可以帮助我整理的资料来源:

  1. https://stackoverflow.com/a/30465397/2908724
  2. https://bugs.documentfoundation.org/show_bug.cgi?id=36313
  3. https://unix.stackexchange.com/a/259434/50240

上面的命令中缺少的是--infilter,它指示 LibreOffice 在进口设置。该--convert-to标志仅指定出口设置。

此命令会完全保留所有测试用例的前导零。神奇的是终端true,意思是“引用所有文本单元格”,相当于导入对话框中同名的复选框。

/usr/lib/libreoffice/program/soffice.bin \
    --convert-to 'csv:Text - txt - csv (StarCalc):44,34,76,1' \
    --infilter='CSV:44,34,76,1,,1031,true' \
    --outdir '/tmp/outgoing' 'incoming.csv'

附注:参数顺序很重要:--outdir必须遵循--infilter--convert-to

此外,似乎--infilter可以指定多个来声明允许的特定组合和设置。

相关内容