Skip to main content

excel

使用'C20'等方式读取数据

# 提取单元格位置(如C20)中的列和行索引
def parse_cell_position(cell_position: str) -> Tuple[int, int]:
# 获取列字母和行号
column_str = "".join([c for c in cell_position if c.isalpha()])
row_str = "".join([c for c in cell_position if c.isdigit()])

# 将列字母转换为列索引,行号保持不变
column = column_index_from_string(column_str)
row = int(row_str)

return column, row # openpyxl使用的是0索引



def write_to_excel(xls_filename: str, start_cell: str, data_list: List[str], output_filename: str) -> None:
"""
将数据列表写入指定的 Excel 文件,支持覆盖指定单元格的数据。

:param xls_filename: 需要读取的xls文件(输入文件)
:param start_cell: 起始单元格位置(例如 'C20')
:param data_list: 需要写入的数据列表
:param output_filename: 输出的xlsx文件名(如果文件存在则修改,若不存在则创建)
:return: None
"""

# 使用xlrd读取xls文件(用于读取原始xls数据)
workbook_xls = xlrd.open_workbook(xls_filename)
sheet_xls = workbook_xls.sheet_by_index(0)

# 检查输出文件是否存在
if os.path.exists(output_filename):
# 如果文件存在,则使用openpyxl打开该文件
workbook_xlsx = openpyxl.load_workbook(output_filename)
sheet_xlsx = workbook_xlsx.active
else:
# 如果文件不存在,则新建一个xlsx文件
workbook_xlsx = openpyxl.Workbook()
sheet_xlsx = workbook_xlsx.active

# 解析起始单元格位置
start_column, start_row = parse_cell_position(start_cell)

# 将数据写入指定位置(覆盖原有数据)
for i, data in enumerate(data_list):
sheet_xlsx.cell(row=start_row + i, column=start_column, value=data)

# 保存为输出文件
workbook_xlsx.save(output_filename)


# 追加数据,如果原来的单元格已经存在数据,则按顺序追加
def append_write_to_excel(xls_filename: str, start_cell: str, data_list: List[str], output_filename: str) -> None:
"""
将数据列表写入指定的 Excel 文件,支持追加写入。

:param xls_filename: 需要读取的xls文件(输入文件)
:param start_cell: 起始单元格位置(例如 'C20')
:param data_list: 需要写入的数据列表
:param output_filename: 输出的xlsx文件名(如果文件存在则修改,若不存在则创建)
:return: None
"""

# 使用xlrd读取xls文件(用于读取原始xls数据)
workbook_xls = xlrd.open_workbook(xls_filename)
sheet_xls = workbook_xls.sheet_by_index(0)

# 检查输出文件是否存在
if os.path.exists(output_filename):
# 如果文件存在,则使用openpyxl打开该文件
workbook_xlsx = openpyxl.load_workbook(output_filename)
sheet_xlsx = workbook_xlsx.active
else:
# 如果文件不存在,则新建一个xlsx文件
workbook_xlsx = openpyxl.Workbook()
sheet_xlsx = workbook_xlsx.active

# 解析起始单元格位置
start_column, start_row = parse_cell_position(start_cell)

# 确定写入的起始行位置:如果文件已经存在,则从现有数据的下一行开始
if os.path.exists(output_filename):
# 查找最后一行,假设数据填充在列中
max_row = sheet_xlsx.max_row
start_row = max_row + 1 if start_row < max_row else start_row

# 将数据写入到目标位置
for i, data in enumerate(data_list):
sheet_xlsx.cell(row=start_row + i, column=start_column, value=data)

# 保存为输出文件
workbook_xlsx.save(output_filename)
if __name__ == "__main__":
# 示例使用
xls_filename = "example.xls" # 你要读取的xls文件
start_cell = "C20" # 起始单元格位置
data_list = ["Item 1", "Item 2", "Item 3", "Item 4"] # 需要写入的数据列表
output_filename = "output.xlsx" # 输出的xlsx文件名

write_to_excel(xls_filename, start_cell, data_list, output_filename)