合并或串联数百个 Excel 个文件

Merge or Concatenate Hundreds of Excel files

我在一个目录中有 638 个 Excel 个文件,每个文件大约 3000 KB。我想将它们全部连接在一起,希望只使用 Python 或命令行(没有其他编程软件或语言)。

本质上,这是涉及一些简单数据操作的更大过程的一部分,我希望这一切都可以通过 运行 单个 python 文件(或双击批处理文件)来完成).

我尝试了以下代码的变体 - Pandas、openpyxl 和 xlrd,它们的速度似乎差不多。转换为 csv 似乎需要 VBA ,我不想进入。

temp_list=[]
for filename in os.listdir(filepath):
    temp = pd.read_excel(filepath + filename,
                        sheet_name=X, usecols=fields)
    temp_list.append(temp)

是否有更简单的命令行解决方案来将它们转换为 csv 文件或合并到一个 excel 文档中?还是仅使用基本库来读取单个文件就差不多了?

.xls(x) 是一种非常(过度)复杂的格式,具有许多多年来积累的特性和怪癖,因此很难解析。而且它从来都不是为速度或大量数据而设计的,而是为了便于商务人士使用。

因此,根据您的文件数量,最好的办法是将它们转换为 .csv 或其他易于解析的格式(或首先使用这种格式进行数据交换)——以及最好在 之前 处理它们——例如文件到达后。

例如这就是如何使用 Excel's COM interface:

.xls(x) 的第一个 sheet 保存到 pywin32pywin32
import win32com.client
# Need the typelib metadata to have Excel-specific constants
x = win32com.client.gencache.EnsureDispatch("Excel.Application")
# Need to pass full paths, see 
w = x.Workbooks.Open("<full path to file>")
s = w.Worksheets(1)
s.SaveAs("<full path to file without extension>",win32com.client.constants.xlCSV)
w.Close(False)

运行 这并行通常没有效果,因为 . You can force creating a different process for each batch as per How can I force python(using win32com) to create a new instance of excel?.