鱼C论坛

 找回密码
 立即注册
查看: 1978|回复: 9

[已解决]openpyxl往Excel里写公式的问题

[复制链接]
发表于 2020-4-7 00:47:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求助各位大佬!

      我用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)”,无法运行计算过程。

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

最佳答案
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))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢!我明白你说的意思了。
但是接下来还有个问题,我按你的意见修改后,打开EXCEL会提示“发现XXX.xlsx中部分内容有问题,是否让我们偿付恢复”,我点击“是”进入Excel后,提示该单元格的公式被删除了。
麻烦你再看看这个怎么解决呢,之前没遇到过。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-7 06:54:41 From FishC Mobile | 显示全部楼层
如果点 否 进入Excel会如何?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-7 08:24:54 | 显示全部楼层
xiangjianshinan 发表于 2020-4-7 06:54
如果点 否 进入Excel会如何?

点击否无法进入该Excel呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-7 09:39:40 | 显示全部楼层
g5698191 发表于 2020-4-7 08:24
点击否无法进入该Excel呢

这是碰到了非法公式导致,你需要调试一下,看看写入的具体内容是什么。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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为通过关键词匹配找到的行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-7 12:04:11 | 显示全部楼层
txxcat 发表于 2020-4-7 09:39
这是碰到了非法公式导致,你需要调试一下,看看写入的具体内容是什么。

只是想做个简单的乘法,不知道哪有问题,麻烦你帮看看这个公式有错误吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-7 20:37:12 | 显示全部楼层
txxcat 发表于 2020-4-7 15:58
忘了需要把column和row转换成excel的表达方式,就是'B7'、'C10'一类的,通过get_column_letter可以把colu ...

可以了,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 04:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表