我想使用python构建一个函数,将excel中的公式字符串从绝对引用转换为相对引用
比如,;假设公式“=SUM(A1:A15)”位于excel的A16单元格中,我希望函数接收公式字符串和公式编写位置(在本例中为A16单元格),并以R1C1引用样式输出公式,因此它将给出字符串“=SUM(R[-15]C:R[-1]C)”
我取得了以下进展:
我已将excel公式读入numpy数组,并将它们全部转换为字符串
wb = load_workbook(filename = r"C:\Form1.xlsx")
sheet_ranges = wb["Sheet1"]
df1 = pd.DataFrame(sheet_ranges.values)
df1 = df1.astype(str)
excelsheetdata_asNPA1= df1.to_numpy()
使用openpyxl.formula,我导入了标记器并定义了一个函数,该函数接受excel公式字符串并将公式字符串分解为其组成标记
from openpyxl.formula import Tokenizer
def tok2 (c):
this = Tokenizer(c)
return this.items
我已经在包含excel公式的numpy数组中运行了该函数,并生成了一个列表的numpy数组(array2),每个列表都包含来自Tokeniser函数的项,即:值、类型和子类型
String_Of_Formula = np.vectorize(tok2)
array2 = String_Of_Formula (excelsheetdata_asNPA1)
我现在认为下一步是生成另一个与“array2”形状相同的数组,它包含相同的数据,但子类型=RANGE除外
excel中A16单元格中的公式“=SUM(A1:A15)”表示(15,0)处的数组2读取“[FUNC OPEN SUM(:,操作数范围A1:A17:,FUNC CLOSE:]”,我认为这是一个列表,但我不确定
我的困难是根据列表的内容访问该部分。因此,我想选择列表中包含单词“RANGE”的部分,在本例中,它将返回“操作数范围A1:A17”,然后我计划编辑它,使A1变成R[-15]C,A17变成R[-1]C。要进行此编辑,我还需要使用位置或索引??(15,0).
我认为array2包含列表,如上所述,array2(15,0)返回“[FUNC开和(:,操作数范围A1:A17:,FUNC闭]”
pull = [FUNC OPEN SUM(:, OPERAND RANGE A1:A17:, FUNC CLOSE ):]
pull [1]
Out[219]: OPERAND RANGE A1:A17:
pul2 = pull [1]
pul2 [1]
Traceback (most recent call last):
File "<ipython-input-221-e68f9727e90f>", line 1, in <module>
pul2 [1]
TypeError: 'Token' object is not subscriptable
我的array2中的最低级别是[Token],我需要关于如何搜索Token的内容并在将其放入新数组之前编辑该Token的帮助
非常欢迎您的帮助,谢谢
目前没有回答
相关问题 更多 >
编程相关推荐