import os #用于获取目标文件所在路径
import win32com
path=os.getcwd()+"\\文件\\" # 文件夹绝对路径
files=[]
for file in os.listdir(path):
if file.endswith(".xls") or file.endswith(".xlsx"): #只获取".xls"后缀的文件
files.append(path+file)
excel_app = win32com.client.Dispatch("Excel.Application")
excel_app.Visible = False # 不显示Excel文件
excel_app.DisplayAlerts = False
#新建excel工作簿
wb = excel_app.Workbooks.Add()
wb.SaveAs(os.getcwd() + "\\汇总.xlsx")
ws = wb.Worksheets(1)
ws.Name = "目录"
for i in range(len(files)):
file_name = files[i].split("\\")[-1].split(".")[0]
ws.Range("A"+str(i+1)).Value = file_name
#读取子文件
wb_sub = excel_app.Workbooks.Open(files[i])
ws_sub = wb_sub.ActiveSheet # #获取活动工作表
ws_sub.Copy(ws) #复制工作表到汇总表
wb.ActiveSheet.Name = file_name #更改工作表名
wb_sub.Close()
print(f"已复制文件 {file_name}")
#将“目录”工作表移动到最前面
first_sheet = files[0].split("\\")[-1].split(".")[0]
wb.Worksheets("目录").Move(wb.Worksheets(first_sheet))
wb.Save()
wb.Close()
excel_app.Quit()
Python保留格式复制多个excel工作表到汇总表并生成目录
需积分: 0 173 浏览量
更新于2023-03-10
收藏 114KB ZIP 举报
在Python编程中,处理Excel文件是一项常见的任务,尤其是在数据分析、报告生成或数据整理等领域。本教程将探讨如何使用Python来保留格式地合并多个Excel工作表到一个汇总表,并创建一个目录来索引这些工作表。我们将主要使用`openpyxl`库,这是一个强大的用于读写Excel .xlsx文件的Python库。
确保已经安装了`openpyxl`库。如果尚未安装,可以使用以下命令进行安装:
```bash
pip install openpyxl
```
接下来,我们详细讲解实现这个功能的步骤:
1. **读取多个Excel文件**:使用`openpyxl.load_workbook()`函数读取每个Excel文件,将其工作表保存在一个列表中。例如:
```python
import os
from openpyxl import load_workbook
# 获取所有Excel文件的路径
excel_files = [os.path.join(directory, f) for f in os.listdir(directory) if f.endswith('.xlsx')]
# 读取每个文件并存储其工作表
workbook_sheets = []
for file in excel_files:
wb = load_workbook(file)
for sheet in wb.sheetnames:
workbook_sheets.append((file, sheet, wb[sheet]))
```
2. **创建汇总工作簿**:初始化一个新的`Workbook`对象,这将成为我们的汇总表。
```python
summary_wb = openpyxl.Workbook()
```
3. **复制工作表**:遍历之前存储的工作表,使用`copy_worksheet()`方法将每个工作表复制到汇总工作簿,同时保持格式不变。
```python
for file, sheet_name, sheet in workbook_sheets:
copied_sheet = summary_wb.create_sheet(title=sheet_name)
copied_sheet._cells = sheet._cells.copy() # 保留原始单元格的格式
# 如果需要调整列宽,可以使用以下代码:
# for col_idx in range(sheet.max_column):
# copied_sheet.column_dimensions[col_idx + 1].width = sheet.column_dimensions[col_idx + 1].width
```
4. **生成目录**:为了创建目录,我们需要在汇总工作簿中添加一个新的工作表,列出所有工作表的名称及其来源文件。
```python
directory_sheet = summary_wb.create_sheet(title='目录')
directory_row = 1
for index, (file, sheet_name, _) in enumerate(workbook_sheets, start=1):
directory_sheet.cell(row=directory_row, column=1).value = f"{index}. {sheet_name}"
directory_sheet.cell(row=directory_row, column=2).value = os.path.basename(file)
directory_row += 1
```
5. **保存汇总工作簿**:使用`save()`方法将汇总工作簿保存为新的Excel文件。
```python
summary_wb.save('汇总表.xlsx')
```
通过以上步骤,你将能够利用Python和`openpyxl`库完成保留格式地合并多个Excel工作表的任务,并创建一个方便的目录来快速定位各个工作表。这个功能在处理大量数据时非常有用,特别是当你需要合并来自不同源的数据时。注意,为了实现更高级的功能,如处理不同格式或合并特定工作表,可能需要进一步定制代码。
Dilraba。
- 粉丝: 0
- 资源: 101