如何用XLSXWriter将公式批量应用至整列(从第2行开始)
XLSXWriter批量应用公式至整列(动态行引用)
你需要把固定行的公式改成动态行引用,同时循环应用到指定范围的行。以下是修改后的代码,直接适配你的需求:
from xlsxwriter.utility import row_col_to_cell with xlsxwriter.Workbook('workbook.xlsx') as workbook: worksheet = workbook.add_worksheet() # 先写入所有用户输入数据 for row_num, data in enumerate(user_input): worksheet.write_row(row_num, 0, data) # 设定公式应用范围:从Excel第2行(对应代码row=1)开始,最多到第100行 start_row = 1 max_target_rows = 100 # 取输入数据的最后一行和100行的较小值,避免超出数据范围 end_row = min(len(user_input) - 1, max_target_rows - 1) # 循环每行写入动态公式 for row in range(start_row, end_row + 1): # 用row+1转换为Excel的行号(代码是0索引,Excel是1索引) excel_row = row + 1 # X列:=W{行号}/G{行号} worksheet.write_formula(row, 23, f'=W{excel_row}/G{excel_row}') # Y列:=(X{行号}-K{行号})/K{行号} worksheet.write_formula(row, 24, f'=(X{excel_row}-K{excel_row})/K{excel_row}') # Z列:=(X{行号}-R{行号})/R{行号} worksheet.write_formula(row, 25, f'=(X{excel_row}-R{excel_row})/R{excel_row}') # AA列:=X{行号}/N{行号} worksheet.write_formula(row, 26, f'=X{excel_row}/N{excel_row}') # AB列:=(P{行号}/Q{行号}-1) worksheet.write_formula(row, 27, f'=(P{excel_row}/Q{excel_row}-1)') # AC列:=O{行号}/N{行号} worksheet.write_formula(row, 28, f'=O{excel_row}/N{excel_row}') # AD列:=(R{行号}-K{行号})/K{行号} worksheet.write_formula(row, 29, f'=(R{excel_row}-K{excel_row})/K{excel_row}') # AE列:=(X{行号}/P{行号}-M{行号}/1000)/(X{行号}/P{行号}) worksheet.write_formula(row, 30, f'=(X{excel_row}/P{excel_row}-M{excel_row}/1000)/(X{excel_row}/P{excel_row})') # AF列:=(AA{行号}-0.1)/0.1 worksheet.write_formula(row, 31, f'=(AA{excel_row}-0.1)/0.1') # AG列:=M{行号}*N{行号}/1000 worksheet.write_formula(row, 32, f'=M{excel_row}*N{excel_row}/1000') # AH列:=(R{行号}-AG{行号})/AG{行号} worksheet.write_formula(row, 33, f'=(R{excel_row}-AG{excel_row})/AG{excel_row}')
关键修改点:
- 分离数据与公式写入:先一次性写完所有输入数据,避免重复写入公式,提升运行效率。
- 动态行号适配:用
excel_row = row + 1将代码的0索引行号转换为Excel的1索引行号,自动匹配每行的单元格引用。 - 范围灵活控制:通过
end_row限制公式最多写到第100行,同时不会超出输入数据的实际行数。 - 可选更直观的单元格写法:如果不想记列号数字,可以用
row_col_to_cell函数生成单元格名称,示例:# 替换X列的公式写法,效果完全一致 w_cell = row_col_to_cell(row, 22) # W列是第22列 g_cell = row_col_to_cell(row, 6) # G列是第6列 worksheet.write_formula(row, 23, f'={w_cell}/{g_cell}')
如果不需要限制100行,直接把end_row改成len(user_input) - 1即可,公式会自动应用到所有有数据的行。
内容的提问来源于stack exchange,提问作者ijoubert21
相关产品推荐
相关产品推荐

