将单元格中的Excel公式转换为Python脚本中的函数

omvjsjqw  于 2023-05-30  发布在  Python
关注(0)|答案(1)|浏览(198)

我一直在尝试将Excel工作簿中的公式转换为Python脚本中的等效Python函数或语句。
在我的工作场所,我们有较旧的Excel工作簿,用于工程过程中的计算(如设计混凝土结构)。这些计算涉及许多公式和公式之间的引用。我想将这些工作簿中的公式转换为“等效”的Python函数,结果是这些Excel工作簿随后被Python脚本替换(出于这些技术文档的可维护性和工作流验证的原因)。
用一个基本的例子来说明这个原理。
如果存在包含一个工作表的Excel工作簿(名称= Sheet1)

value in cell A1 = 2
value in cell A2 = 3
value in cell A3 = '=A1+A2' = 5

我想把它转换成下面的Python函数:

def A3(A1,A2):
    return A1+A2

或者使用全局变量

A3 = 0

def A3(A1,A3):
   A3 = A1 + A3

另一个涉及条件语句的更复杂的示例:
包含两个工作表(“Sheet1”和“Sheet2”)的Excel工作簿

Sheet1!A1 = 2   
Sheet1!A2 = 3    
Sheet1!A3 = False

Sheet2!A1 = '=IF(Sheet1!A3 == True; Sheet1!A1+Sheet1!A2; Sheet1!A1*Sheet1!2)' = 6

在Python中将变成(或类似的东西):

def Sheet2!A1(Sheet1!A1,Sheet1!A2):

   if Sheet!A3 == True:
   return Sheet1!A1+Sheet1!A2

   else:
   return Sheet1!A1 * Sheet1!A2

我试过使用openpyxl(用于阅读工作簿)结合公式(模块)和pycel,但我不知道如何获得这样的转换。
如果我理解正确的话,formulas包和pycel包可以识别并转换Excel函数(到Python对吗?)。或者它们只是在运行时这样做?
具体来说,我想知道如何从本质上将Excel公式编译为Python函数。
一般问题:有没有一种方法可以自动将Excel工作簿转换为等效的Python脚本?

7fyelxc5

7fyelxc51#

Pycel可用于将xlsx文件编译为Python代码,但可能不是以您希望的方式。
使用您的示例作为example.xlsx,执行以下代码:

from pycel import ExcelCompiler

excel_compiler = ExcelCompiler('example.xlsx')
excel_compiler.to_file(file_types='yaml')

将导致生成此yaml文件:

cycles: false
excel_hash: b99b0d1174e4bfaceddeeb70bde09c9f
cell_map:
  Sheet1!A1: 2
  Sheet1!A2: 3
  Sheet1!A3: false
  Sheet2!A1: =if_(_C_("Sheet1!A3") == True, _C_("Sheet1!A1") + _C_("Sheet1!A2"), _C_("Sheet1!A1") * _C_("Sheet1!A2"))
filename: example.xlsx

cell_map的字典值是Python代码,实际上在计算单元格时由pycel执行。然而,由于Excel代码的执行模型与Python略有不同,因此在执行过程中会发生一些小的变化。
免责声明:我是pycel的维护者

相关问题