如何用xlsxwriter/xlrd复制Excel列绝对数值而非公式?
如何复制Excel公式计算后的绝对数值到新文件?
这个问题我之前也碰到过,核心原因是xlsxwriter写入的公式在文件里存储的是公式字符串,而非计算后的数值,直接复制自然会把公式带过去。下面给你两种可行的解决方案,亲测有效:
方法一:用openpyxl读取计算值 + xlsxwriter写入(推荐,跨平台)
openpyxl可以直接读取公式计算后的结果,不管文件有没有被Excel打开过,步骤如下:
- 先安装openpyxl(如果还没装):
pip install openpyxl
- 读取文件A的计算后数值:
from openpyxl import load_workbook # 加载文件A,这里不用data_only=True,因为如果文件是刚生成的,可能没存储计算值 wb_source = load_workbook("文件A.xlsx") ws_source = wb_source.active # 或者指定工作表名,比如ws_source = wb_source["Sheet1"] # 强制计算所有公式(关键!如果文件没被Excel打开过,必须这一步) wb_source.calculate() # 提取所有行的数值 data = [] for row in ws_source.iter_rows(values_only=True): data.append(row)
- 用xlsxwriter写入目标文件:
import xlsxwriter # 创建目标工作簿和工作表 wb_target = xlsxwriter.Workbook("目标文件.xlsx") ws_target = wb_target.add_worksheet() # 逐行写入数据 for row_idx, row_data in enumerate(data): ws_target.write_row(row_idx, 0, row_data) # 关闭工作簿,完成写入 wb_target.close()
如果你的文件A已经被Excel打开并保存过,里面已经存储了公式的计算结果,那可以把load_workbook的参数改成data_only=True,这样就不需要调用calculate(),直接读取存储的数值即可,效率更高。
方法二:Windows平台专属——用win32com调用Excel程序计算
如果你是在Windows环境下,也可以直接调用本地的Excel程序来计算公式并读取数值,这种方式最接近手动操作Excel的效果:
import win32com.client as win32 import xlsxwriter # 启动Excel程序(后台运行,不显示界面) excel = win32.gencache.EnsureDispatch('Excel.Application') excel.Visible = False # 打开文件A wb_source = excel.Workbooks.Open(r"C:\路径\文件A.xlsx") ws_source = wb_source.Worksheets("Sheet1") # 指定工作表 # 获取数据范围(假设数据从A1开始,到最后一行最后一列) used_range = ws_source.UsedRange data = [] for row in used_range.Rows: row_data = [cell.Value for cell in row] data.append(row_data) # 关闭文件,退出Excel wb_source.Close(SaveChanges=False) excel.Quit() # 写入目标文件(和方法一的写入步骤一致) wb_target = xlsxwriter.Workbook("目标文件.xlsx") ws_target = wb_target.add_worksheet() for row_idx, row_data in enumerate(data): ws_target.write_row(row_idx, 0, row_data) wb_target.close()
注意事项
- 用xlsxwriter生成的文件,默认不会存储公式的计算结果,所以如果直接用xlrd读取,拿到的只会是公式字符串,这也是你之前复制公式的原因——xlrd不支持计算公式,只能读取存储的内容。
- 如果必须用xlrd,那只能处理xls格式的文件,而且需要配合其他工具触发公式计算,不如openpyxl方便。
内容的提问来源于stack exchange,提问作者Nathaniel Ng Li Wen
相关产品推荐
相关产品推荐

