1、实现功能的操作
1)安装openpyxl库 使用pip命令安装openpyxl库:
pip install openpyxl
2)打开老的工作簿和新的工作簿
使用openpyxl
库的load_workbook()
方法打开两个工作簿
例如,
from openpyxl import load_workbook
# 打开老的工作簿
old_wb = load_workbook('old.xlsx')
# 打开新的工作簿
new_wb = load_workbook('new.xlsx')
2)复制数据
使用openpyxl
库的copy_worksheet()
方法将工作簿第一个工作表数据复制到01工作簿第一个表
例如,
# 从老的工作簿获取第一个工作表
old_sheet = old_wb.worksheets[0]
# 从新的工作簿获取第一个工作表
new_sheet = new_wb.worksheets[0]
# 复制老的工作表到新的工作簿的第一个工作表
new_sheet = copy_worksheet(old_sheet)
3)删除原内容
使用openpyxl
库的delete_cols()
和delete_rows()
方法删除工作簿的第一个表的原内容,
例如,
# 删除第一行
new_sheet.delete_rows(1)
# 删除第一列
new_sheet.delete_cols(1)
4)导出更改过的工作簿
使用openpyxl
库的save()
方法将更改过的工作簿导出,
例如,
# 保存更改过的新的工作簿
new_wb.save('new.xlsx')
5)删除工作簿
使用os库的remove()
方法删除工作簿,
例如,
import os
os.remove('old.xlsx')
2、实现代码
1)简单代码
from openpyxl import load_workbook
from openpyxl.utils import cell as cell_utils
from openpyxl.utils.cell import column_index_from_string
from openpyxl.utils.cell import coordinate_from_string
from openpyxl.worksheet.copy import copy_worksheet
import os
# 打开老的工作簿
old_wb = load_workbook('old.xlsx')
# 打开新的工作簿
new_wb = load_workbook('new.xlsx')
# 从老的工作簿获取第一个工作表
old_sheet = old_wb.worksheets[0]
# 从新的工作簿获取第一个工作表
new_sheet = new_wb.worksheets[0]
# 复制老的工作表到新的工作簿的第一个工作表
new_sheet = copy_worksheet(old_sheet)
# 删除第一行
new_sheet.delete_rows(1)
# 删除第一列
new_sheet.delete_cols(1)
# 保存更改过的新的工作簿
new_wb.save('new.xlsx')
# 删除老的工作簿
os.remove('old.xlsx')
2)完整代码
from openpyxl.worksheet.worksheet import Worksheet
from openpyxl import Workbook, load_workbook
from copy import copy
from openpyxl.utils import get_column_letter
def xlsx_sheet_copy(src_path, tag_path, sheet_name): # 跨xlsx复制sheet
# 跨xlsx文件复制源文件xlsx中指定的sheet
# 保留所有格式,以及行高列宽,视觉效果几乎一致
# 不能复制除了文字以外的东西,例如图片
# src_path:源xlsx文件路径
# tag_path:目标xlsx文件路径
# sheet_name:需要复制的源xlsx文件sheet的名称
src_workbook = load_workbook(src_path) # 打开源xlsx
src_file_sheet = src_workbook[sheet_name] # 打开目标sheet
tag_workbook = load_workbook(tag_path) # 打开目标xlsx
tag_file_sheet = tag_workbook.create_sheet(sheet_name) # 新建一个同名空sheet等待写入
for row in src_file_sheet:
# 遍历源xlsx文件制定sheet中的所有单元格
for cell in row: # 复制数据
tag_file_sheet[cell.coordinate].value = cell.value
if cell.has_style: # 复制样式
tag_file_sheet[cell.coordinate].font = copy(cell.font)
tag_file_sheet[cell.coordinate].border = copy(cell.border)
tag_file_sheet[cell.coordinate].fill = copy(cell.fill)
tag_file_sheet[cell.coordinate].number_format = copy(
cell.number_format
)
tag_file_sheet[cell.coordinate].protection = copy(cell.protection)
tag_file_sheet[cell.coordinate].alignment = copy(cell.alignment)
wm = list(zip(src_file_sheet.merged_cells)) # 开始处理合并单元格
if len(wm) > 0: # 检测源xlsx中合并的单元格
for i in range(0, len(wm)):
cell2 = (
str(wm[i]).replace("(<MergedCellRange ", "").replace(">,)", "")
) # 获取合并单元格的范围
tag_file_sheet.merge_cells(cell2) # 合并单元格
# 开始处理行高列宽
for i in range(1, src_file_sheet.max_row + 1):
tag_file_sheet.row_dimensions[i].height = src_file_sheet.row_dimensions[
i
].height
for i in range(1, src_file_sheet.max_column + 1):
tag_file_sheet.column_dimensions[
get_column_letter(i)
].width = src_file_sheet.column_dimensions[get_column_letter(i)].width
tag_workbook.save(tag_path) # 保存
tag_workbook.close() # 关闭文件
src_workbook.close()