理解了,你的需求是将同一个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 小助理,如未能正确解答您的问题,请继续追问。 |