将多个 .xls 格式文件转换为 .xlsx 格式

将多个 .xls 格式文件转换为 .xlsx 格式

我是 Linux 新手。我知道Linux中有一些通过终端在文件格式之间进行转换的方法。但有什么办法可以实现以下目标吗?

我有 3 个文件夹,在这些文件夹中,还有 15 个文件夹。每个文件夹都有 12 个 .xls 格式的文件,以及一些其他 .R 文件和 pdf 文件。有没有办法创建这 3 个文件夹的精确副本,其中所有 .xls 都转换为 .xlsx 格式?

如果以下内容看起来太不真实,那么如何将一个文件夹中的所有 .xls 文件转换为 .xlsx 文件格式?然后我就可以复制上述内容。

注意:我没有LibreOffice,我使用WPS。如果以下需要 LibreOffice 我可以根据需要安装它。

答案1

这将需要libreoffice

来自这个堆栈溢出问题Unix命令将xls文件转换为xlsx文件?:

libreoffice --convert-to xlsx my.xls --headless

请注意,该--convert-to选项意味着该--headless选项(当上面的 SO 答案于 2014 年编写时,它在 Libreoffice 版本 4.2.3 中没有,但自从至少2018 年的 Libreoffice 6,并且可能比这更长)。将其添加到命令行并没有什么坏处,但这不是必需的。

然后您可以将其集成到find命令中:

find . -type f -name "*.xls" -exec libreoffice --convert-to xlsx {} \;

该命令将在当前目录中查找名称以 结尾的文件,并执行替换为文件名的.xls命令。{}

自由办公室人状态 :

--convert-to output_file_extension[:output_filter_name] [--outdir output_dir] file...

批量转换文件。如果 --outdir 未指定,则当前工作目录将用作转换后文件的输出目录。这意味着--headless

例子:

 --convert-to pdf *.doc

将所有 .doc 文件转换为 PDF。

 --convert-to pdf:writer_pdf_Export --outdir /home/user *.doc

使用 Writer PDF 导出对话框中的设置将所有 .doc 文件转换为 PDF,并将其保存在 /home/user 中。

来自@cas 的评论,

libreoffice 可以采用多个文件名参数(手册页中的示例显示了这一点),因此作为 find 运行会更快。 -type f -name '*.xls' -exec libreoffice --convert-to xlsx {} + - 只需要运行 libreoffice 一次,而不是每个文件运行一次

find . -type f -name '*.xls' -exec libreoffice --convert-to xlsx {} +

答案2

对 @Nicolas 的答案进行小修改,使其适用于 MacOS:您必须指向 libreoffice 二进制文件,因为可能没有为 shell 定义命令“libreoffice”。就我而言,是:

find . -type f -name "*.xls" -exec /Applications/LibreOffice.app/Contents/MacOS/soffice --convert-to xlsx {} \;

相关内容