返回

利用 Shell 脚本自动化转换 XLS 文件为 CSV 格式:逐行指南

Linux

使用 Linux Shell 脚本自动转换文件夹中的所有 XLS 文件为 CSV 格式

对于忙碌的数据分析师或数据处理人员来说,经常需要将大量 .xls 文件转换为 .csv 格式。手动处理这些文件既耗时又容易出错。本教程将介绍如何使用 Linux Shell 脚本来自动完成此任务,只需几行代码即可。

使用 find 命令查找 XLS 文件

第一步是查找要转换的 .xls 文件。为此,我们将使用 find 命令:

find /path/to/directory -name "*.xls"

此命令将递归搜索指定目录(/path/to/directory)及其所有子目录,查找所有以 .xls 结尾的文件。它将返回这些文件的路径列表,每个路径一行打印。

使用 while 循环迭代 XLS 文件

接下来,我们将使用 while 循环来迭代每个 .xls 文件:

while read filename; do
  # 处理 $filename
done < <(find /path/to/directory -name "*.xls")

此循环将逐行读取 find 命令的输出,并将每一行分配给变量 $filename。这样,我们就可以逐个访问每个 .xls 文件的路径。

使用 xls2csv 转换 XLS 文件为 CSV 文件

现在,我们可以使用 xls2csv 程序将每个 .xls 文件转换为 .csv 格式。xls2csv 是一个命令行工具,可以将 Microsoft Excel 文件转换为 CSV 文件。

要使用 xls2csv,我们只需将 .xls 文件的路径作为第一个参数,.csv 文件的路径作为第二个参数:

xls2csv "$filename" "${filename%.*}.csv"

此命令使用 $filename 作为输入文件,并从文件名中去掉 .xls 扩展名(使用 "${filename%.*}"),然后附加 .csv 扩展名作为输出文件。

完整的脚本

将上面的步骤组合在一起,我们得到以下完整的 Shell 脚本:

#!/bin/bash

find /path/to/directory -name "*.xls" | while read filename; do
  xls2csv "$filename" "${filename%.*}.csv"
done

使用说明

要使用此脚本,请将其保存到一个文件(例如 xls2csv_all.sh),并使其可执行:

chmod +x xls2csv_all.sh

然后,运行脚本:

./xls2csv_all.sh

此脚本将查找指定目录中所有 .xls 文件,并使用 xls2csv 程序将它们转换为 .csv 格式。

常见问题解答

  1. 可以使用此脚本转换子目录中的 XLS 文件吗?

是的,只需将 find 命令中的路径更改为要搜索的子目录即可。

  1. 如何自定义输出 CSV 文件的名称?

您可以使用 filename%.*} 部分来指定输出 CSV 文件的自定义名称。例如,以下命令将输出带有前缀 converted_ 的 CSV 文件:

xls2csv "$filename" "converted_${filename%.*}.csv"
  1. 此脚本适用于所有 Excel 文件版本吗?

否,xls2csv 程序可能不支持所有 Excel 文件版本。请参阅 xls2csv 文档以获取详细信息。

  1. 此脚本可以在 Windows 上使用吗?

否,此脚本专为 Linux 系统设计。

  1. 如果我想使用其他程序(例如 LibreOffice Calc)转换文件,该如何修改脚本?

您可以轻松地将 xls2csv 替换为您选择的程序。例如,使用 LibreOffice Calc:

libreoffice --headless --convert-to csv "$filename" --outdir /path/to/output/directory