|
发表于 2024-6-25 18:34:09
|
显示全部楼层
理解了,你的需求是将同一个Excel文件中的单个Sheet表内的多个表格合并,保留第一个表的标题,而其他表的标题则去掉,同时在合并后的表格之间插入空行。这个过程需要操作单元格数据和格式。我们可以用 `openpyxl` 这个库来完成。
下面是一个示例代码,可以帮助你实现这一目标:
- import openpyxl
- from openpyxl import Workbook
- from copy import copy
- def merge_tables(src_file, dest_file, sheet_name):
- # 打开源Excel文件
- wb = openpyxl.load_workbook(src_file)
- sheet = wb[sheet_name]
- # 创建一个新的Workbook用于保存合并后的结果
- new_wb = Workbook()
- new_sheet = new_wb.active
-
- # 初始化变量
- current_row = 1
- table_start_row = None
- headers = None
- # 遍历行,找到每个表格的开始并合并
- for row in sheet.iter_rows(values_only=False):
- if row[0].value is not None and (table_start_row is None or (sheet.row_dimensions[row[0].row].hidden)):
- if table_start_row is not None:
- # 复制上一个表格内容(跳过第一行)
- for r in range(table_start_row + 1, row[0].row):
- for c in range(1, sheet.max_column + 1):
- new_cell = new_sheet.cell(row=current_row, column=c, value=sheet.cell(row=r, column=c).value)
-
- # 复制格式
- if sheet.cell(row=r, column=c).has_style:
- new_cell.font = copy(sheet.cell(row=r, column=c).font)
- new_cell.border = copy(sheet.cell(row=r, column=c).border)
- new_cell.fill = copy(sheet.cell(row=r, column=c).fill)
- new_cell.number_format = copy(sheet.cell(row=r, column=c).number_format)
- new_cell.protection = copy(sheet.cell(row=r, column=c).protection)
- new_cell.alignment = copy(sheet.cell(row=r, column=c).alignment)
- current_row += 1
- # 在两个表格之间插入空行
- current_row += 1
- table_start_row = row[0].row
- if headers is None:
- # 复制标题行
- headers = [cell.value for cell in row]
- for idx, header in enumerate(headers, start=1):
- new_sheet.cell(row=1, column=idx, value=header)
- current_row += 1
- # 复制最后一个表格内容(跳过第一行)
- for r in range(table_start_row + 1, sheet.max_row + 1):
- for c in range(1, sheet.max_column + 1):
- new_cell = new_sheet.cell(row=current_row, column=c, value=sheet.cell(row=r, column=c).value)
-
- # 复制格式
- if sheet.cell(row=r, column=c).has_style:
- new_cell.font = copy(sheet.cell(row=r, column=c).font)
- new_cell.border = copy(sheet.cell(row=r, column=c).border)
- new_cell.fill = copy(sheet.cell(row=r, column=c).fill)
- new_cell.number_format = copy(sheet.cell(row=r, column=c).number_format)
- new_cell.protection = copy(sheet.cell(row=r, column=c).protection)
- new_cell.alignment = copy(sheet.cell(row=r, column=c).alignment)
-
- current_row += 1
- # 保存新文件
- new_wb.save(dest_file)
- # 使用示例
- src_file = "your_excel_file.xlsx"
- dest_file = "merged_excel_file.xlsx"
- sheet_name = "Sheet1"
- merge_tables(src_file, dest_file, sheet_name)
复制代码
### 代码解释:
1. **导入必要的库**:使用 `openpyxl` 来操作Excel文件。
2. **打开源Excel文件并选择指定Sheet**。
3. **创建新的Workbook**:用于保存合并后的结果。
4. **遍历行**:找到每个表格的开始位置并进行合并:
- 若当前行是新的表格的开始,且前面已经有一个表格的开始位置,则复制前一个表格内容(跳过第一行)。
- 将两个表格之间插入空行。
- 找到标题行,并保留它。
5. **复制最后一个表格内容**。
6. **保存合并后的新文件**。
希望这个例子能帮助你有效地合并单个Sheet中的多个表格并保留第一个表的标题。如果有任何进一步的问题,欢迎随时提问!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|