使用Python操作Excel表格写入数据,后续更新Java版。
"""
@Title: MjExcel
@Time: 2024/1/30 9:45
@Author: Michael
"""
import os
import re
from openpyxl import Workbook, load_workbook
from openpyxl.cell import Cell
from openpyxl.worksheet.worksheet import Worksheet
class MjExcel:
# 字母表
letters = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
"K", "L", "M", "N", "O", "P", "Q", "R", "S", "T",
"U", "V", "W", "X", "Y", "Z"]
# 构造函数
def __init__(self, path: str = None):
"""
:param path: excel文件路径,若为空则创建新文件,默认创建一个名为"Sheet"的工作表
"""
self.path = path
if MjExcel.isNoneStr(path):
# 新建文件
self.xlsx = Workbook()
else:
if not os.path.isfile(path):
raise Exception("非文件路径!")
post = path.lower().split(".")[-1]
if post != "xlsx":
raise Exception("非xlsx文件!")
self.xlsx = load_workbook(path)
self.sheets = self.get_sheets() # 所有的工作表
self.cur_sheet = None # 当前的工作表
self.set_cur_sheet()
# 设置当前的工作表
def set_cur_sheet(self, key: str | int = None):
"""
:param key: 工作表名称/索引,若为空则返回第一个
:return:
"""
self.cur_sheet = self.get_sheet(0) if key is None else self.get_sheet(key)
# 获取工作表的工作区域大小
def get_sheet_shape(self, sheet: Worksheet | str | int = None) -> tuple:
"""
:param sheet: 工作表/名称/索引,若为空则返回当前工作表大小
:return: tuple
"""
sheet = self.__get_sheet_by_type(sheet)
return sheet.max_row, sheet.max_column
# 获取所有的工作表
def get_sheets(self, remove_empty: bool = False) -> list[Worksheet]:
"""
:param remove_empty: 是否剔除空白的工作表
:return: list[Worksheet]
"""
self.sheets = self.xlsx.worksheets
if not remove_empty:
return self.sheets
# 根据工作表大小判断
sheets = []
for worksheet in self.sheets:
if self.get_sheet_shape(worksheet) == (1, 1):
continue
sheets.append(worksheet)
return sheets
# 获取所有的工作表名称
def get_sheets_name(self) -> list[str]:
"""
:return: list[str]