能否插入 Excel 公式值而不是公式?

4

我正在尝试使用Excel公式插入一个值,它成功地发生了,但我想保存的是值而不是公式,这是我目前尝试的代码片段。

print("Adding formula to " + filename)         


for i,cellObj in enumerate(sheet_formula['P'],1):
        cellObj.value='=IF(AND(OR(A{0}="g_m",A{0}="s_m"),ISNUMBER(SEARCH("A", E{0}))), "A", VLOOKUP(A{0},\'i ma\'!A:B, 2, FALSE))'.format(i)
        sheet_formula.cell(row=1, column=16).value = 'C'

这段代码能够插入公式,但我想保存的是值而非公式。

1
不确定这个方法在Python中是否可行,但在VBA中,当您想将公式转换为值时,我们会使用 cell.value=cell.value。您尝试在插入公式后添加 cellObj.value=cellObj.value 吗? - Foxfire And Burns And Burns
谢谢你的帮助,但它还没有起作用。 - user12659741
除了 win32com 之外,您是否使用了其他的库?我遇到了 '_Worksheet' object is not subscriptable 的问题。或者 sheet_formula 不是工作表吗? - Zev Spitz
此外,属性名称似乎是区分大小写的,例如 Value 而不是 value - Zev Spitz
@FoxfireAndBurnsAndBurns,如果使用正确的库,它就可以像那样正常工作 =) - JvdV
1个回答

2
"放弃使用openpyxl的基本原因是:(1)不支持XLS文件处理;(2)当前版本样式保留测试的缺陷未被解决。如果你遇到了以上两个问题,那就放弃openpyxl,改用xlwings吧。没有其他出路。" 引自这里
“可以使用 `xlwings`,它使用 pywin32 对象与 Excel 进行交互,而不仅仅像 openpyxl 和 pandas 那样读取/写入 xlsx 或 csv 文档。这种方式,Excel 实际上执行公式,而 xlwings 获取结果。” 摘自此处
因此,尽管使用仅支持xlsx文件处理的Python库(如Openpyxl)似乎不可能,但使用xlwings库是可能的。我在下面添加了一个简单示例。我只是打开了一个新的工作簿,添加了一个公式并将公式转换为其计算值。
import xlwings as xw
app = xw.App(visible=False, add_book=False)
wb = app.books.add()
ws = wb.sheets.active
ws['A1'].value = '=3+5'
ws['A1'].value = ws['A1'].value
wb.save(r'C:\Users\...\test.xlsx')
wb.close()
app.quit()
exit()

希望以上内容有所帮助。请记住,我是一名Python初学者!
对于那些感兴趣的人,关于OpenpyxlxlWings之间区别的一些好的解释可以在这里找到。而一个类似的问题和一些答案可以在这里找到。

2
ws['A1'].value = ws['A1'].value 是的,我确定有类似的东西!哈哈 - Foxfire And Burns And Burns

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接