如何保留 Excel 表头和第一行数据并追加 CSV 数据

准备工作

在开始之前,确保你的 Python 环境中已经安装了 openpyxlpandas 库。可以使用以下命令进行安装:

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)
  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值