在 Excel 中使用 Python 自動填充公式
安裝Python包的國內鏡像源
清華大學 https://pypi.tuna.tsinghua.edu.cn/simple 阿里云 https://mirrors.aliyun.com/pypi/simple/ 豆瓣 https://pypi.douban.com/simple/ 百度云 https://mirror.baidu.com/pypi/simple/ 中科大 https://pypi.mirrors.ustc.edu.cn/simple/ 華為云 https://mirrors.huaweicloud.com/repository/pypi/simple/ 騰訊云 https://mirrors.cloud.tencent.com/pypi/simple/
準備工作
首先,確保你已經安裝了 openpyxl 庫。如果還沒有安裝,可以使用以下命令進行安裝:
pip install openpyxl
步驟 1:導入必要的庫
首先,我們需要導入 openpyxl 庫中的 load_workbook 和 Translator 類。
from openpyxl import load_workbook from openpyxl.formula.translate import Translator
步驟 2:定義填充公式的函數
接下來,我們定義一個名為 fill_down_formulas 的函數。這個函數接受以下參數:
filepath:Excel 文件的路徑。sheetname:工作表名稱。start_row:開始填充公式的行號。start_column:開始填充公式的列號。num_columns:需要填充公式的列數。
def fill_down_formulas(filepath, sheetname, start_row, start_column, num_columns): try: # 加載 Excel 文件 wb = load_workbook(filename=filepath) ws = wb[sheetname]
步驟 3:獲取起始單元格的公式
在指定的列范圍內,我們首先獲取起始單元格的公式。
# 循環處理每一列 for column_index in range(start_column, start_column + num_columns): # 獲取起始單元格的公式 formula = ws.cell(row=start_row, column=column_index).value print(f"原始公式 ({start_row}, {column_index}):", formula)
步驟 4:向下填充公式
從起始行的下一行開始,我們將公式填充到該列的其余單元格中。這里使用 Translator 類來更新公式。
# 從起始行開始填充公式 for row in range(start_row + 1, ws.max_row + 1): # 獲取起始單元格和當前單元格的坐標 start_coordinate = ws.cell(row=start_row, column=column_index).coordinate current_coordinate = ws.cell(row=row, column=column_index).coordinate print("起始坐標:", start_coordinate) print("當前坐標:", current_coordinate) # 使用 Translator 解析并更新公式 translated_formula = Translator(formula, origin=start_coordinate).translate_formula(current_coordinate) print("翻譯后的公式:", translated_formula) ws.cell(row=row, column=column_index).value = translated_formula
步驟 5:保存修改后的 Excel 文件
填充完公式后,保存修改后的 Excel 文件。
# 保存修改后的 Excel 文件 wb.save(filepath) print(f"成功向下填充公式到第 {start_column} 列到第 {start_column + num_columns - 1} 列,起始行 {start_row}") except Exception as e: print(f"填充公式時出錯: {e}")
步驟 6:執行腳本
在腳本的最后,我們指定 Excel 文件路徑、工作表名稱、起始行、起始列和列數,并調用 fill_down_formulas 函數。
if __name__ == "__main__": # 指定 Excel 文件路徑、工作表名、起始行、起始列和列數 excel_file_path = "C:\\Users\\Administrator\\Desktop\\銷售系數數據同步.xlsx" sheet_name = "商品費用" start_row = 2 # 指定起始行 start_column = 47 # 指定起始列 num_columns = 7 # 指定要填充公式的列數 # 調用函數將公式向下填充到指定列和起始行之后 fill_down_formulas(excel_file_path, sheet_name, start_row, start_column, num_columns)
完整代碼
from openpyxl import load_workbook from openpyxl.formula.translate import Translator def fill_down_formulas(filepath, sheetname, start_row, start_column, num_columns): try: # 加載 Excel 文件 wb = load_workbook(filename=filepath) ws = wb[sheetname] # 循環處理每一列 for column_index in range(start_column, start_column + num_columns): # 獲取起始單元格的公式 formula = ws.cell(row=start_row, column=column_index).value print(f"原始公式 ({start_row}, {column_index}):", formula) # 從起始行開始填充公式 for row in range(start_row + 1, ws.max_row + 1): # 獲取起始單元格和當前單元格的坐標 start_coordinate = ws.cell(row=start_row, column=column_index).coordinate current_coordinate = ws.cell(row=row, column=column_index).coordinate print("起始坐標:", start_coordinate) print("當前坐標:", current_coordinate) # 使用 Translator 解析并更新公式 translated_formula = Translator(formula, origin=start_coordinate).translate_formula(current_coordinate) print("翻譯后的公式:", translated_formula) ws.cell(row=row, column=column_index).value = translated_formula # 保存修改后的 Excel 文件 wb.save(filepath) print(f"成功向下填充公式到第 {start_column} 列到第 {start_column + num_columns - 1} 列,起始行 {start_row}") except Exception as e: print(f"填充公式時出錯: {e}") if __name__ == "__main__": # 指定 Excel 文件路徑、工作表名、起始行、起始列和列數 excel_file_path = "C:\\Users\\Administrator\\Desktop\\銷售系數數據同步.xlsx" sheet_name = "商品費用" start_row = 2 # 指定起始行 start_column = 47 # 指定起始列 num_columns = 7 # 指定要填充公式的列數 # 調用函數將公式向下填充到指定列和起始行之后 fill_down_formulas(excel_file_path, sheet_name, start_row, start_column, num_columns)

浙公網安備 33010602011771號