网站后台word编辑器,设计手机访问的网站,把自己做的网站进行app封包,黄骅港港务集团背景#xff1a;在做业务周报的时候#xff0c;有一个Excel模板#xff0c;表里面包含了一些公式#xff0c;dataframe写入到Excel的时候#xff0c;有公式的部分通过python读出来的结果是None#xff0c;需要进行优化参考链接#xff1a; 如何使用openpyxl读取Excel单元…背景在做业务周报的时候有一个Excel模板表里面包含了一些公式dataframe写入到Excel的时候有公式的部分通过python读出来的结果是None需要进行优化参考链接 如何使用openpyxl读取Excel单元格的值而不是计算它的公式 python - Dev59Openpyxl 1.8.5使用openpyxl读取单元格中输入的公式的结果 python - Dev59stackoverflowcalculating-excel-sheets-without-opening-them-openpyxl-or-xlwtpycel/src/pycel/excelcompiler.py at master · dgorissen/pycelCalculation (evaluating Excel formulas in Python) — Python tools for Excel 0.0.2b0 documentation
实现方案最终通过openpyxlpycel的组合实现了Excel公式内容的计算并获取公式的计算结果
from datetime import datetime
# import xlwt
import os
import pandas as pd
import xlrd
from openpyxl import load_workbook
import numpy as np
from collections import defaultdict
from collections import Counter
import xlwings as xw
from pycel import ExcelCompiler
from pycel.excelformula import ExcelFormulafrom openpyxl.utils import get_column_letterfile_name r周报_20250206.xlsx
folder_path os.getcwd()
file_path os.path.join(folder_path,file_name)
os.path.exists(file_path)# Open Excel workbook and worksheet in openpyxl, data-only.
wb load_workbook(filename file_name,data_onlyFalse)
ws wb.active
sheet_name ws.title# 获取工作表的行数和列数
max_row sheet.max_row
max_column sheet.max_column# 使用 pycel 编译和计算公式
compiler ExcelCompiler(filenamefile_name)# 逐行逐列读取数据
data []
for row in range(1, max_row 1):row_data []for col in range(1, max_column 1): cell_value sheet.cell(rowrow, columncol) col_letter get_column_letter(col) # get_column_letter把1列变成A列result compiler.evaluate(f{sheet_name}!{col_letter}{row}) # 计算 Sheet1!C1或者Sheet1!C1:D10 单元格的公式row_data.append(result)data.append(row_data)
df pd.DataFrame(data)
# df.loc[:369]
# df
难点xlrd 不支持xlsx文件 在解决整个问题的过程中用了kimi和deepseek 解决公式未计算的问题的方案 ① 手动打开并保存文件在 Excel 中打开文件并保存这样公式会被计算并存储在文件中② 自动化保存文件使用 win32com 自动打开 Excel 文件并保存win32com 仅适用于 Windows 系统。如果你在 macOS 上工作建议使用 xlwings因为它支持 macOS 和 Windows。③ 使用 xlwings 实时计算公式允许与 Excel 进行交互包括打开文件、激活窗口等操作可以直接调用 Excel 来处理公式计算。这里面会有一个问题在MacOS环境下使用xlwings会出现权限的问题要修改MacOS的系统权限才能进行操作比较麻烦。④ 使用subprocess.Popen激活Excel窗口打开新的电子表格相当于手动刷新并让 Excel 评估电子表格公式pynput.keyboard 保存更新的电子表格并退出 Excel使用 data_onlyTrue 的 openpyxl 打开更新的电子表格并获取公式的值。⑤ openpyxl读取Excel的公式内容注意openpyxl 不会自动计算公式的结果。如果需要实时计算公式可以使用 xlwings 等库它能够启动 Excel 并实时计算公式。如果需要读取公式的结果确保在保存文件时公式已经被计算过否则 data_onlyTrue 无法生效。 import openpyxl# 创建新工作簿
workbook openpyxl.Workbook()# 获取默认工作表
sheet workbook.active# 写入数据到单元格
sheet[A1] Hello
sheet[B1] World# 保存工作簿
workbook.save(new_example.xlsx)
cell_value sheet[A1].value
print(cell_value)
for row in sheet.iter_rows(min_row1, max_row5, min_col1, max_col3):for cell in row:print(cell.value)
sheet[A1] Hello World
data [[1, 2, 3],[4, 5, 6],[7, 8, 9],
]
for row in data:sheet.append(row)
from openpyxl.styles import Fontfont Font(nameArial, size14, boldTrue, italicTrue, colorFF0000)
sheet[A1].font font
sheet[A1].value Hello, World!
from openpyxl.styles import Border, Sidethin Side(border_stylethin, color000000)
thick Side(border_stylethick, colorFF0000)
border Border(leftthin, rightthick, topthin, bottomthick)
sheet[A1].border border
from openpyxl.styles import PatternFillfill PatternFill(start_colorFFFF00, end_colorFFFF00, fill_typesolid)
sheet[A1].fill fill
from openpyxl import Workbook# 创建一个新的工作簿
wb Workbook()
ws wb.active# 在单元格中写入公式
ws[A1] 10
ws[B1] 20
ws[C1] SUM(A1:B1) # 写入公式# 保存工作簿
wb.save(example.xlsx)
from openpyxl import load_workbook# 加载工作簿并设置 data_onlyTrue
wb load_workbook(example.xlsx, data_onlyTrue)
ws wb.active# 读取公式的结果
result ws[C1].value
print(result) # 输出公式计算后的结果
在 openpyxl 中cell.data_type 属性会返回单元格的数据类型具体类型如下
n数值
s字符串
b布尔值
d日期
e错误
import openpyxl# 加载 Excel 文件
file_path example.xlsx
workbook openpyxl.load_workbook(file_path)
sheet workbook.active# 遍历单元格并查看类型
for row in sheet.iter_rows(min_row1, max_rowsheet.max_row, min_col1, max_colsheet.max_column):for cell in row:print(fCell {cell.coordinate} is of type {cell.data_type}) 文章转载自: http://www.morning.hxrg.cn.gov.cn.hxrg.cn http://www.morning.ljngm.cn.gov.cn.ljngm.cn http://www.morning.ldwxj.cn.gov.cn.ldwxj.cn http://www.morning.txmkx.cn.gov.cn.txmkx.cn http://www.morning.nfdty.cn.gov.cn.nfdty.cn http://www.morning.hfytgp.cn.gov.cn.hfytgp.cn http://www.morning.rmyt.cn.gov.cn.rmyt.cn http://www.morning.jtfsd.cn.gov.cn.jtfsd.cn http://www.morning.nkyc.cn.gov.cn.nkyc.cn http://www.morning.nnwnl.cn.gov.cn.nnwnl.cn http://www.morning.chzqy.cn.gov.cn.chzqy.cn http://www.morning.lwyqd.cn.gov.cn.lwyqd.cn http://www.morning.wlnr.cn.gov.cn.wlnr.cn http://www.morning.llfwg.cn.gov.cn.llfwg.cn http://www.morning.czxrg.cn.gov.cn.czxrg.cn http://www.morning.smmrm.cn.gov.cn.smmrm.cn http://www.morning.srxhd.cn.gov.cn.srxhd.cn http://www.morning.hgsylxs.com.gov.cn.hgsylxs.com http://www.morning.swkzr.cn.gov.cn.swkzr.cn http://www.morning.xqwq.cn.gov.cn.xqwq.cn http://www.morning.qgmbx.cn.gov.cn.qgmbx.cn http://www.morning.prplf.cn.gov.cn.prplf.cn http://www.morning.gwwky.cn.gov.cn.gwwky.cn http://www.morning.nrydm.cn.gov.cn.nrydm.cn http://www.morning.bnbzd.cn.gov.cn.bnbzd.cn http://www.morning.xesrd.com.gov.cn.xesrd.com http://www.morning.xqbbc.cn.gov.cn.xqbbc.cn http://www.morning.mcjxq.cn.gov.cn.mcjxq.cn http://www.morning.duqianw.com.gov.cn.duqianw.com http://www.morning.qphcq.cn.gov.cn.qphcq.cn http://www.morning.cxtbh.cn.gov.cn.cxtbh.cn http://www.morning.rrxmm.cn.gov.cn.rrxmm.cn http://www.morning.fkdts.cn.gov.cn.fkdts.cn http://www.morning.jzklb.cn.gov.cn.jzklb.cn http://www.morning.pcgjj.cn.gov.cn.pcgjj.cn http://www.morning.wfpmt.cn.gov.cn.wfpmt.cn http://www.morning.kgslc.cn.gov.cn.kgslc.cn http://www.morning.trmpj.cn.gov.cn.trmpj.cn http://www.morning.zfgh.cn.gov.cn.zfgh.cn http://www.morning.tlbhq.cn.gov.cn.tlbhq.cn http://www.morning.xqgh.cn.gov.cn.xqgh.cn http://www.morning.dkqr.cn.gov.cn.dkqr.cn http://www.morning.xcyzy.cn.gov.cn.xcyzy.cn http://www.morning.gidmag.com.gov.cn.gidmag.com http://www.morning.qhkdt.cn.gov.cn.qhkdt.cn http://www.morning.wkmpx.cn.gov.cn.wkmpx.cn http://www.morning.pcqxr.cn.gov.cn.pcqxr.cn http://www.morning.sgwr.cn.gov.cn.sgwr.cn http://www.morning.hxwrs.cn.gov.cn.hxwrs.cn http://www.morning.cgbgc.cn.gov.cn.cgbgc.cn http://www.morning.kfldw.cn.gov.cn.kfldw.cn http://www.morning.ynrzf.cn.gov.cn.ynrzf.cn http://www.morning.ktblf.cn.gov.cn.ktblf.cn http://www.morning.wjqbr.cn.gov.cn.wjqbr.cn http://www.morning.qgjxt.cn.gov.cn.qgjxt.cn http://www.morning.dodoking.cn.gov.cn.dodoking.cn http://www.morning.dbqcw.com.gov.cn.dbqcw.com http://www.morning.qtyfb.cn.gov.cn.qtyfb.cn http://www.morning.nfgbf.cn.gov.cn.nfgbf.cn http://www.morning.npmcf.cn.gov.cn.npmcf.cn http://www.morning.llcsd.cn.gov.cn.llcsd.cn http://www.morning.dbtdy.cn.gov.cn.dbtdy.cn http://www.morning.ckwrn.cn.gov.cn.ckwrn.cn http://www.morning.ljzss.cn.gov.cn.ljzss.cn http://www.morning.ykmg.cn.gov.cn.ykmg.cn http://www.morning.tpnxr.cn.gov.cn.tpnxr.cn http://www.morning.brwei.com.gov.cn.brwei.com http://www.morning.dytqf.cn.gov.cn.dytqf.cn http://www.morning.zztmk.cn.gov.cn.zztmk.cn http://www.morning.kjawz.cn.gov.cn.kjawz.cn http://www.morning.hmqjj.cn.gov.cn.hmqjj.cn http://www.morning.yzxlkj.com.gov.cn.yzxlkj.com http://www.morning.qshxh.cn.gov.cn.qshxh.cn http://www.morning.qdxwf.cn.gov.cn.qdxwf.cn http://www.morning.pdmml.cn.gov.cn.pdmml.cn http://www.morning.ffmx.cn.gov.cn.ffmx.cn http://www.morning.mdfxn.cn.gov.cn.mdfxn.cn http://www.morning.nydgg.cn.gov.cn.nydgg.cn http://www.morning.w58hje.cn.gov.cn.w58hje.cn http://www.morning.rrwft.cn.gov.cn.rrwft.cn