python 通过openpyxl 操作Excel 简单封装
python 通过openpyxl操作Excel 简单封装。对:python 通过win32操作Excel 简单封装使用chatgpt生成的代码。
需注意:
1、openpyxl 只能处理 .xlsx 文件,不支持 .xls文件。
2、openpyxl 复制表格不支持直接按索引插入新表,因此复制的表默认放在最后。
from openpyxl import load_workbook, Workbook
from openpyxl.utils import get_column_letter
from openpyxl.cell.cell import Cell as OpenpyxlCell
class Excel:
def openExcelFile(self, filename):
"""打开指定的 Excel 文件并返回一个 WorkBook 对象。"""
return WorkBook(load_workbook(filename))
def newExcelFile(self):
"""创建一个新的 Excel 文件并返回一个 WorkBook 对象。"""
return WorkBook(Workbook())
class WorkBook:
def __init__(self, wb):
self.__wb = wb
def add_sheet(self, sheet_name=None):
"""在工作簿中添加一个新的工作表。"""
if sheet_name:
self.__wb.create_sheet(title=sheet_name)
else:
self.__wb.create_sheet()
def copy_sheet(self, source_index, name=None):
"""复制工作表。"""
source_sheet = self.__wb.worksheets[source_index - 1]
new_sheet = self.__wb.copy_worksheet(source_sheet)
if name:
new_sheet.title = name
def delete_sheet(self, index):
"""删除工作簿中指定索引位置的工作表。"""
sheet = self.__wb.worksheets[index - 1]
self.__wb.remove(sheet)
def activateSheet(self, index):
"""激活工作簿中指定索引位置的工作表,并返回一个 Sheet 对象。"""
return Sheet(self.__wb.worksheets[index - 1])
def save(self, filename):
"""保存工作簿。"""
self.__wb.save(filename)
def close(self):
"""关闭工作簿(无需保存)。"""
self.__wb.close()
@property
def sheetCount(self):
"""获取工作簿中的工作表数量。"""
return len(self.__wb.worksheets)
@property
def sheetsNames(self):
"""获取工作簿中的所有工作表名称。"""
return [sheet.title for sheet in self.__wb.worksheets]
class Sheet:
def __init__(self, sheet):
self.__sheet = sheet
def setCellValue(self, row, col, value):
"""设置单元格的值。"""
self.__sheet.cell(row=row, column=col, value=value)
def getCellValue(self, row, col):
"""获取单元格的值。"""
return self.__sheet.cell(row=row, column=col).value
def setCellTextFormat(self, row, col):
"""设置单元格为文本格式。"""
cell = self.__sheet.cell(row=row, column=col)
cell.number_format = '@'
@property
def maxRow(self):
"""获取最大行数。"""
return self.__sheet.max_row
@property
def maxColumn(self):
"""获取最大列数。"""
return self.__sheet.max_column
if __name__ == '__main__':
s1 = Excel()
wb1 = s1.openExcelFile(r"C:\22.xlsx")
print(wb1.sheetsNames)
sht1 = wb1.activateSheet(3)
s2 = Excel()
wb2 = s2.openExcelFile(r"C:\555.xlsx")
print(wb2.sheetsNames)
sht2 = wb2.activateSheet(1)
for x in range(2, sht1.maxRow + 1):
name = sht1.getCellValue(x, 4)
id = sht1.getCellValue(x, 5)
phone = sht1.getCellValue(x, 7)
num = sht1.getCellValue(x, 8)
card = sht1.getCellValue(x, 9)
print(name, id, phone, num, card)
wb2.copy_sheet(source_index=1, name=name)
sht2 = wb2.activateSheet(wb2.sheetCount)
sht2.setCellTextFormat(2, 2)
sht2.setCellTextFormat(4, 2)
sht2.setCellTextFormat(3, 6)
sht2.setCellTextFormat(3, 9)
sht2.setCellTextFormat(4, 7)
sht2.setCellValue(3, 2, name)
sht2.setCellValue(4, 2, id)
sht2.setCellValue(3, 6, phone)
sht2.setCellValue(3, 9, num)
sht2.setCellValue(4, 7, card)
wb2.save(r"C:\555.xlsx")
wb1.close()
s1 = None
s2 = None