使用Openpyxl和Xlwings评估索引匹配;公式返回而不是值

时间:2019-10-12 22:43:58

标签: python excel openpyxl win32com xlwings

我已经参考了以下链接,但仍然无法使我的代码正常工作
Python openpyxl data_only=True returning None
  Refresh Excel External Data with Python
  Using Python's Openpyxl for an index match
由于我是python和编码的新手,所以我将小规模地处理我的项目。最终,我希望用一个随机数填充一个单元格,然后使用索引匹配来评估文本列表和数字以标识与该随机数相对应的文本字符串。因此,如果电子表格中的项目4为“ Hello World!”如果随机数为4,则程序将返回“ Hello World!”。

从概念上讲,我认为我可以使用Data_only = True,但问题是该公式从未得到评估,因为所有计算都是在Python中完成的,而不是Excel。因此,它将不断返回公式而不是值。

我尝试重新排列以下代码块。当它起作用时,文件仅显示“ = index(B4:B72,match(B1,A4:A72,0))”,我开始尝试使用win32com库打开和关闭文件,但到目前为止仍无法正常工作。 但是,当我尝试和操作代码以获得预期的结果时,也会收到很多错误。有时,如果我立即重新运行代码,则会收到一条错误消息,提示拒绝文件许可或只读。我还注意到,即使实际上没有打开文件,在任务管理器中也会启动大量Excel进程。

我能够很好地了解Openpyxl文档,但是我发现xlwings文档确实很难掌握,因此我想发表以寻求帮助。

path= "C:\\Users\\Me\\Documents\\Python\\File.xlsx"

xlapp = win32com.client.DispatchEx("Excel.Application")
wb = xlapp.workbooks.open(path)
wb.RefreshAll()
wb.save(path)
xlapp.Quit()


myworkbook=load_workbook(path , data_only=True)
worksheet=myworkbook['Sheet1']
#print(myworkbook.sheetnames)
mycell=worksheet['B2']
mycell.value="=index(B4:B72,match(B1,A4:A72,0))"
myworkbook.save(path)


print(mycell.value)

这给出了错误pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, 'Microsoft Excel', "We can't save 'File.xlsx' because the file is read-only.\n\nTo keep your changes, you'll need to save the workbook with a new name or in a different location.", 'xlmain11.chm', 0, -2146827284), None)

0 个答案:

没有答案