直接保存pandas DataFrame的内容到Excel文件中
这里我们通过openpyxl库进行操作
示例代码
import openpyxl
import pandas as pd
from openpyxl.utils.dataframe import dataframe_to_rows
import os
from loguru import loggerdef add_dataframe_to_table(excel_path: str, dataframe: pd.DataFrame, sheet_name: str, row_num: int, column_letter: str) -> tuple[int, int, int, int] | None:"""添加dataframe到表格中,其中row_num与column_letter表示插入后左上角的坐标:param excel_path: 表格路径:param dataframe: dataframe格式数据:param sheet_name: sheet表路径:param row_num: 插入d行:param column_letter: 插入列:return:"""try:if not os.path.exists(excel_path):  # 如果文件不存在,创建新文件create_excel(excel_path)# 打开工作簿workbook = openpyxl.load_workbook(excel_path)# 如果工作表不存在,创建新工作表if sheet_name not in workbook.sheetnames:worksheet = workbook.create_sheet(title=sheet_name)else:worksheet = workbook[sheet_name]rows = dataframe_to_rows(dataframe, index=False, header=True)  # 将dataframe写入工作表# 解析工作表start_col = openpyxl.utils.column_index_from_string(column_letter)start_row = int(row_num)# 写入数据for r_idx, row in enumerate(rows, start_row):for c_idx, value in enumerate(row, start_col):worksheet.cell(row=r_idx, column=c_idx, value=value)workbook.save(excel_path)  # 保存文件logger.debug(f"已将数据写入Excel表格: {excel_path}")return start_row, start_row + dataframe.shape[0], start_col, start_colexcept Exception as e:logger.exception(e)def create_excel(file_path, sheet_name="Sheet1"):"""创建一个空的excel"""try:excel_wb = openpyxl.Workbook()  # 创建一个表格default_sheet = excel_wb.activeexcel_wb.remove(default_sheet)  # 删除默认创建的工作表excel_wb.create_sheet(title=sheet_name)  # 创建新的工作表excel_wb.save(file_path)  # 表村表格print(f"已创建新的Excel文件: {file_path}")except Exception as e:print(f"创建Excel文件时出错: {e}")def main():# 示例使用excel_file_path = "示例数据.xlsx"# 1. 创建示例数据sample_data = {'姓名': ['张三', '李四', '王五', '赵六'],'年龄': [25, 30, 35, 28],'城市': ['北京', '上海', '广州', '深圳'],'工资': [5000, 7000, 6000, 8000]}df = pd.DataFrame(sample_data)# 2. 创建Excel文件并添加数据if not os.path.exists(excel_file_path):create_excel(excel_file_path)# 3. 添加dataframe到表格add_dataframe_to_table(excel_path=excel_file_path,dataframe=df,sheet_name="员工数据",row_num=3,column_letter="D")if __name__ == "__main__":main()
