g5698191 发表于 2020-4-7 00:47:16

openpyxl往Excel里写公式的问题

求助各位大佬!

      我用openpyxl的FORMULAE模块往exce里写入函数lsumproduct()时,如果在Python中指定sumproduct()的参数为确定的单元格,如sumproduct(A6,B6),可以在Excel中正常运行并计算出结果。

      但我目前想不给出精确的单元格位置如A6,而用关键字匹配找到行坐标,如我找到的单元格为 ws.cell(find_row,8),代码写成 ws1.cell(find_row,8).value='=ws1.cell(find_row,7) * ws1.cell(find_row,5)' ,在Excel中无法识别find_row为哪行,只能在单元格ws1.cell(find_row,8)中显示“=ws1.cell(find_row,7) * ws1.cell(find_row,5)”,无法运行计算过程。

      请问上述问题该如何解决?

txxcat 发表于 2020-4-7 01:05:47

你把python中的变量名直接写到写入公式中去,excel当然不会知道这个变量是什么,你试试这样写:
ws1.cell(find_row,8).value='=%s*%s' % (ws1.cell(find_row,7), ws1.cell(find_row,5))

g5698191 发表于 2020-4-7 01:21:10

txxcat 发表于 2020-4-7 01:05
你把python中的变量名直接写到写入公式中去,excel当然不会知道这个变量是什么,你试试这样写:

谢谢!我明白你说的意思了。
但是接下来还有个问题,我按你的意见修改后,打开EXCEL会提示“发现XXX.xlsx中部分内容有问题,是否让我们偿付恢复”,我点击“是”进入Excel后,提示该单元格的公式被删除了。
麻烦你再看看这个怎么解决呢,之前没遇到过。

xiangjianshinan 发表于 2020-4-7 06:54:41

如果点 否 进入Excel会如何?

g5698191 发表于 2020-4-7 08:24:54

xiangjianshinan 发表于 2020-4-7 06:54
如果点 否 进入Excel会如何?

点击否无法进入该Excel呢

txxcat 发表于 2020-4-7 09:39:40

g5698191 发表于 2020-4-7 08:24
点击否无法进入该Excel呢

这是碰到了非法公式导致,你需要调试一下,看看写入的具体内容是什么。

g5698191 发表于 2020-4-7 12:02:35

txxcat 发表于 2020-4-7 09:39
这是碰到了非法公式导致,你需要调试一下,看看写入的具体内容是什么。

具体写入内容为
ws1.cell(find_row,8).value='=%s*%s' % (ws1.cell(find_row,7), ws1.cell(find_row,5))
#find_row为通过关键词匹配找到的行

g5698191 发表于 2020-4-7 12:04:11

txxcat 发表于 2020-4-7 09:39
这是碰到了非法公式导致,你需要调试一下,看看写入的具体内容是什么。

只是想做个简单的乘法,不知道哪有问题,麻烦你帮看看这个公式有错误吗

txxcat 发表于 2020-4-7 15:58:05

本帖最后由 txxcat 于 2020-4-7 16:01 编辑

g5698191 发表于 2020-4-7 12:04
只是想做个简单的乘法,不知道哪有问题,麻烦你帮看看这个公式有错误吗
忘了需要把column和row转换成excel的表达方式,就是'B7'、'C10'一类的,通过get_column_letter可以把column值转成对于的字母,然后把row值转换成字符拼接起来就可以了,参考下面代码:
from openpyxl.utils import get_column_letter

ws1.cell(find_row,8).value='=%s*%s' %(get_column_letter(7)+str(find_row),get_column_letter(5)+str(find_row))

g5698191 发表于 2020-4-7 20:37:12

txxcat 发表于 2020-4-7 15:58
忘了需要把column和row转换成excel的表达方式,就是'B7'、'C10'一类的,通过get_column_letter可以把colu ...

可以了,谢谢!
页: [1]
查看完整版本: openpyxl往Excel里写公式的问题