提问人:Jonathan Cross 提问时间:1/15/2023 最后编辑:Jonathan Cross 更新时间:1/15/2023 访问量:65
防止 Libreoffice 转换后的 CSV 剥离尾随零?[关闭]
Prevent Libreoffice converted CSV from stripping trailing zero? [closed]
问:
这个问题似乎与特定的编程问题、软件算法或程序员主要使用的软件工具无关。如果您认为该问题在另一个 Stack Exchange 站点上是主题,您可以发表评论以解释在哪里可以回答该问题。
10个月前关闭。
我有一个 Calc 电子表格,其中包含当格式化为数字时,结果为 1.00(又名格式代码=ROUND(1.001,2)
-1234.57
0.00
)
但是,当我通过尾随将其转换为 CSV 时,会删除导致 .如何将正确的输出到 CSV 中?libreoffice --convert-to csv
0
1
1.00
注意:如果我提高精度,那么预期的是输出。=ROUND(1.001,3)
1.001
将单个单元格显式转换为 TEXT(例如)有效,但我想要在文档级别工作的东西,因为这很容易出错/乏味。=TEXT(ROUND(1.001,2), "0.00")
答:
“我怎样才能将正确的 1.00 输出到 CSV 中?” 简短的回答是你不能。这是因为CSV是一种糟糕的文件格式(请参阅:https://www.google.com/search?q=whyt+is+csv+a+bad+file+format )
但是当你在OpenOffice中有一个这样的文件时(让我们命名它: ):Untitled 1.ods
并且您需要/想要使用尾随零导出它,您可以执行以下操作:
C:\Program Files\LibreOffice\program\soffice --convert-to html "Untitled 1.ods"
哪个生成和 Html 文件名Untitled 1.html
在此之后,您可以使用 xmlstarlet 来执行 这:
xmlstarlet sel -t -m //tr -m td -v . -o "," -b -n "Untitled 1.html"
这将产生下一个输出:
a,b,c,d,e,f,
1,00,2,00,3,00,1,00,2,00,3,00,
4,00,5,00,6,00,4,00,5,00,6,00,
7,00,8,00,9,00,7,00,8,00,9,00,
这之所以有效,是因为导出到 HTML 会保留应用于单元格的格式,而导出到 CSV 只会导出值,而不关心所做的任何格式设置。
P.S. 输出只是说明了为什么“逗号分隔值 (CSV)”不应该被发明😁。
评论
1.00
1
libreoffice --convert-to csv
.\soffice --convert-to "csv:Text - txt - csv (StarCalc):44,34,0, , , ,false,false,true,false" --outdir C:\TEMP\ C:\TEMP\round.ods