我的软件的一部分发出各种命令来打开和查看不同的文件类型。例如,我用于atril
PDF 和eom
PNG。
不过我对 CSV 文件有一个小问题。我可以打开它们,soffice –calc <filepath>
但每次它都会经历导入阶段。
有没有办法可以避免这种情况,以避免用户产生问题的风险,因为格式是一致的,并且我需要包含的唯一分隔符是逗号,?
提前致谢。
答案1
跳过导入的方法是将文件转换为无需导入即可读取的格式 - 例如:
soffice --headless --convert-to ods --outdir /tmp tblIssues.csv
soffice --view /tmp/tblIssues.ods
rm /tmp/tblIssues.ods
这会将文件转换tblIssues.csv
为 ODS 电子表格,将其保存/tmp
并在 Libreoffice 中打开。完成后,它将删除转换后的文件(可选)。
该--view
选项以只读方式打开文件,并隐藏编辑所需的 GUI 元素,使 LibreOffice 作为查看器更加实用。
您还可以使用其他格式,例如 PDF ( --convert-to pdf
),然后您可以使用其他查看器,例如atril
.
请注意,我认为 libreoffice Convert 命令可能会使用用户最后在导入器中使用的设置,因此如果将其设置为使用除此之外的分隔符,则,
可能无法工作。
另外,您可以修改命令以...
隐藏输出:
COMMAND > /dev/null 2>&1
与终端分开:
COMMAND & disown
答案2
安装unoconv(只需一次)
- 在 Ubuntu 上运行
sudo apt-get install unoconv
- 在 RHL/CentOS 上运行
sudo yum install unoconv
- 在 Ubuntu 上运行
在命令行或批处理模式(非交互式)上进行转换
- unoconv -f pdf /pathto/file.csv /pathto/file.pdf 2>/dev/null
就是这样!
笔记:
我将标准错误通过管道传输到 /dev/null ,因为我收到一个“看起来”像是转换失败的错误,但实际上它成功了。当我运行unoconv -f csv /tmp/this.csv /tmp/this.pdf
错误输出时:
unoconv: UnoException during export phase: Unable to store document to file:///tmp/this.pdf (ErrCode 19468)
但该文件确实是在 /tmp/this.pdf 创建的,并且我已通过 pdf 查看器确认该文件是完美的。
我不知道为什么,但我猜测错误是因为我没有运行侦听器。也许这里的其他人会解决这个问题;-)
无论如何,如果您需要从转换中返回退出 0(例如,puppet 或 Chef 可能需要),请像这样运行转换:
unoconv -f pdf /pathto/file.csv /pathto/file.pdf 2>/dev/null || /bin/true
最后,unoconv csv 转换默认为“逗号分隔”,幸运的是,这适合您。如果您想使用不同的和/或多个分隔符,请阅读手册页以查看导入过滤器选项。