准备工作
在开始之前,确保你的 Python 环境中已经安装了 openpyxl
和 pandas
库。可以使用以下命令进行安装:
pip install openpyxl pandas
第一步:编写函数保留表头和第一行数据
我们首先编写一个函数 keep_first_two_rows
,用于保留指定工作表的表头和第一行数据,其余数据将被删除。
from openpyxl import load_workbook
def keep_first_two_rows(filepath, sheetname):
try:
# 加载 Excel 文件
wb = load_workbook(filepath)
ws = wb[sheetname]
# 删除第三行之后的所有行
ws.delete_rows(3, ws.max_row)
# 保存修改后的 Excel 文件
wb.save(filepath)
print(f"成功保留表头和第一行数据到工作表 {sheetname}")
except Exception as e:
print(f"保留表头和第一行数据时出错: {e}")
解释:
load_workbook(filepath)
:加载指定路径的 Excel 文件。wb[sheetname]
:获取指定名称的工作表。ws.delete_rows(3, ws.max_row)
:从第三行开始删除所有后续行,只保留前两行。wb.save(filepath)
:保存对 Excel 文件的修改。
第二步:编写函数追加 CSV 数据
接下来,我们编写一个函数 append_data_from_csv
,用于将 CSV 文件中的数据追加到指定工作表的末尾。
import pandas as pd
from openpyxl import load_workbook
def append_data_from_csv(filepath, sheetname, csv_filepath):
try:
# 从 CSV 文件中读取新数据
new_data = pd.read_csv(csv_filepath)
# 加载 Excel 文件
wb = load_workbook(filepath)
ws = wb[sheetname]
# 将新数据追加到工作表末尾
for r_idx, row in enumerate(new_data.values, ws.max_row + 1):
for c_idx, value in enumerate(row, 1):
ws.cell(row=r_idx, column=c_idx, value=value)
# 保存修改后的 Excel 文件
wb.save(filepath)
print(f"成功从 CSV 文件中追加新数据到工作表 {sheetname} 后面")
except Exception as e:
print(f"追加新数据时出错: {e}")
解释:
pd.read_csv(csv_filepath)
:使用 pandas 从指定路径读取 CSV 文件中的数据。wb[sheetname]
:获取指定名称的工作表。enumerate(new_data.values, ws.max_row + 1)
:从工作表的最后一行开始,逐行追加 CSV 数据。ws.cell(row=r_idx, column=c_idx, value=value)
:将 CSV 文件中的每个值插入到 Excel 工作表的对应单元格中。wb.save(filepath)
:保存对 Excel 文件的修改。
第三步:主程序调用
最后,我们编写主程序,调用以上两个函数,完成具体操作。
if __name__ == "__main__":
# 指定 Excel 文件路径、工作表名和 CSV 文件路径
excel_file_path = "C:\\Users\\Administrator\\Desktop\\销售系数数据同步.xlsx"
sheet_name = "商品费用"
csv_file_path = "F:\\工作内容\\我的数据\\商品费用解析数据\\商品费用数据汇总.csv"
# 调用函数保留表头和第一行数据
keep_first_two_rows(excel_file_path, sheet_name)
# 调用函数从 CSV 文件中追加新数据到指定工作表后面
append_data_from_csv(excel_file_path, sheet_name, csv_file_path)
解释:
excel_file_path
:指定 Excel 文件的路径。sheet_name
:指定工作表名称。csv_file_path
:指定 CSV 文件的路径。keep_first_two_rows(excel_file_path, sheet_name)
:调用函数保留表头和第一行数据。append_data_from_csv(excel_file_path, sheet_name, csv_file_path)
:调用函数从 CSV 文件中追加新数据到指定工作表。
完整代码
from openpyxl import load_workbook
import pandas as pd
def keep_first_two_rows(filepath, sheetname):
try:
# 加载 Excel 文件
wb = load_workbook(filepath)
ws = wb[sheetname]
# 删除第三行之后的所有行
ws.delete_rows(3, ws.max_row)
# 保存修改后的 Excel 文件
wb.save(filepath)
print(f"成功保留表头和第一行数据到工作表 {sheetname}")
except Exception as e:
print(f"保留表头和第一行数据时出错: {e}")
def append_data_from_csv(filepath, sheetname, csv_filepath):
try:
# 从 CSV 文件中读取新数据
new_data = pd.read_csv(csv_filepath)
# 加载 Excel 文件
wb = load_workbook(filepath)
ws = wb[sheetname]
# 将新数据追加到工作表末尾
for r_idx, row in enumerate(new_data.values, ws.max_row + 1):
for c_idx, value in enumerate(row, 1):
ws.cell(row=r_idx, column=c_idx, value=value)
# 保存修改后的 Excel 文件
wb.save(filepath)
print(f"成功从 CSV 文件中追加新数据到工作表 {sheetname} 后面")
except Exception as e:
print(f"追加新数据时出错: {e}")
if __name__ == "__main__":
# 指定 Excel 文件路径、工作表名和 CSV 文件路径
excel_file_path = "C:\\Users\\Administrator\\Desktop\\销售系数数据同步.xlsx"
sheet_name = "商品费用"
csv_file_path = "F:\\工作内容\\我的数据\\商品费用解析数据\\商品费用数据汇总.csv"
# 调用函数保留表头和第一行数据
keep_first_two_rows(excel_file_path, sheet_name)
# 调用函数从 CSV 文件中追加新数据到指定工作表后面
append_data_from_csv(excel_file_path, sheet_name, csv_file_path)