如何保留 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)
相关推荐
壹屋安源1 天前
自动生成发票数据并存入Excel
python·excel·pandas·random·datetime·faker
Dream25122 天前
【数据分析之pandas】
数据挖掘·数据分析·pandas
Mobius80863 天前
探索 Seaborn Palette 的奥秘:为数据可视化增色添彩
图像处理·python·信息可视化·数据分析·pandas·matplotlib·数据可视化
赛丽曼4 天前
Pandas
人工智能·python·pandas
道友老李6 天前
【机器学习】数据分析之Pandas(一)
人工智能·python·机器学习·数据分析·pandas
无形忍者6 天前
Pandas系列|第一期:列值的前N码模糊匹配
linux·运维·pandas
code04号7 天前
df = pd.DataFrame(data)中的data可以是什么类型的数据?
python·pandas
runepic8 天前
[python]使用 Pandas 处理 Excel 数据:分割与展开列操作
python·excel·pandas
潜洋8 天前
Pandas教程之二十九: 使用 Pandas 处理日期和时间
python·pandas
fmc1211048 天前
【5】数据分析基础(series2)
数据挖掘·数据分析·pandas