将参数传递到Excel范围值(RangeValueDataType)在win32com中

2024-03-29 10:45:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用win32com/python在Excel中获得一系列单元格的内部颜色。循环通过每个单元格不是一个选项,因为这需要3到5秒才能完成,而颜色每秒钟都在变化。在

使用Range.Value(11)似乎有帮助,但win32com不喜欢在传递任何参数时使用它范围值. 在

import win32com.client as win32
excel = win32.Dispatch('excel.application')

fileName = r"myFile.xlsm"
myBook = excel.Workbooks(fileName)
mySheet = myBook.Sheets('Sheet1')
myRange = mySheet.Range('I3:AL32')

myState = myRange.Value # is acceptable but useless
myState = myRange.Value(11) # TypeError: 'tuple' object is not callable

在Excel中执行VBA中的myRange(“I3:AL32”).Value(11)可以正常工作,但我不能创建自定义自定义自定义项并使用应用程序。运行在win32com中,或者因为已经有VBA代码在基Excel文件中运行(这是改变单元格颜色的第一个原因)。在

有没有其他方法可以将该参数传递到范围。值?在


Tags: isvalue颜色rangefilenameexcelwin32comwin32
2条回答

我自己也在玩这个,我找到了一个可以用win32com工作的答案

我使用myRange.\u print_details_u()来显示可以从com对象访问的内容,得到以下结果:

Methods:
     GetValue
     SetValue
Props:
Get Props:
    Value = 0x6 - <win32com.client.build.MapEntry object at 0x00000184975AA160>
Put Props:
    Value = 0x6 - <win32com.client.build.MapEntry object at 0x00000184975AA1D0>

所以我可以告诉你Value是一个属性,它允许你使用我的范围值在

但是还有一个GetValue和SetValue。。。在

所以不是我的范围值(11) 。。您要使用:

^{pr2}$

我不确定这是你想要的结果,不幸的是它没有使用win32com.客户端但是comtypes.客户端,但如果您尝试:

import comtypes.client # unfortunately not win32com
excel = comtypes.client.CreateObject('Excel.Application')

fileName = r"myFile.xlsx" # I used .xlsx but should work with .xlsm
myBook = excel.Workbooks.Open(fileName)
mySheet = myBook.Sheets('Sheet1')
myRange = mySheet.Range('I3:AL32')

myState = myRange.Value(11) #with comtypes.client you can use the parameter 11
print myState

您可以打印如下内容:

^{pr2}$

在这里你可以找到我在例子中使用的不同颜色的代码。 希望它对你有用,即使它不是用win32com。在

相关问题 更多 >