如何保留 Excel 表頭和第一行數據并追加 CSV 數據
準備工作
在開始之前,確保你的 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)

浙公網安備 33010602011771號