Python 将参数传递到Excel';win32com中的s Range.Value(RangeValueDataType)
我正在尝试使用win32com/python在Excel中获取一系列单元格的内部颜色。循环通过每个单元格不是一个选项,因为需要3到5秒才能完成,而颜色每秒钟都会改变 使用似乎有帮助,但win32com不喜欢将任何参数传递给Range.ValuePython 将参数传递到Excel';win32com中的s Range.Value(RangeValueDataType),python,excel,win32com,vba,Python,Excel,Win32com,Vba,我正在尝试使用win32com/python在Excel中获取一系列单元格的内部颜色。循环通过每个单元格不是一个选项,因为需要3到5秒才能完成,而颜色每秒钟都会改变 使用似乎有帮助,但win32com不喜欢将任何参数传递给Range.Value import win32com.client as win32 excel = win32.Dispatch('excel.application') fileName = r"myFile.xlsm" myBook = excel.Workbooks
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)效果很好,但我无法创建自定义UDF并使用应用程序。也无法从Win32 COM中运行,因为基本Excel文件中已运行VBA代码(这是更改单元格颜色的第一步)
是否有其他方法将该参数传递到Range.Value?我不确定这是否是您想要的结果,不幸的是,它使用的不是win32com.client,而是comtypes.client,但是如果您尝试:
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
您可以打印如下内容:
<?xml version="1.0"?>
......
<Styles>
<Style ss:ID="Default" ss:Name="Normal">
<Alignment ss:Vertical="Bottom"/>
<Borders/>
<Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="11" ss:Color="#000000"/>
<Interior/>
<NumberFormat/>
<Protection/>
</Style>
<Style ss:ID="s21">
<Interior ss:Color="#00B0F0" ss:Pattern="Solid"/>
</Style>
<Style ss:ID="s23">
<Interior ss:Color="#E26B0A" ss:Pattern="Solid"/>
</Style>
<Style ss:ID="s25">
<Interior ss:Color="#00FF00" ss:Pattern="Solid"/>
</Style>
<Style ss:ID="s26">
<Interior ss:Color="#C0504D" ss:Pattern="Solid"/>
</Style>
<Style ss:ID="s27">
<Interior ss:Color="#60497A" ss:Pattern="Solid"/>
</Style>
</Styles>
<Worksheet ss:Name="Sheet1">
......
......
......
在这里,您可以找到我在示例中使用的不同颜色的代码。
希望它对您有用,即使它不使用win32com。我不确定它是否是您想要的结果,不幸的是,它不是使用win32com.client,而是使用comtypes.client,但是如果您尝试:
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
您可以打印如下内容:
<?xml version="1.0"?>
......
<Styles>
<Style ss:ID="Default" ss:Name="Normal">
<Alignment ss:Vertical="Bottom"/>
<Borders/>
<Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="11" ss:Color="#000000"/>
<Interior/>
<NumberFormat/>
<Protection/>
</Style>
<Style ss:ID="s21">
<Interior ss:Color="#00B0F0" ss:Pattern="Solid"/>
</Style>
<Style ss:ID="s23">
<Interior ss:Color="#E26B0A" ss:Pattern="Solid"/>
</Style>
<Style ss:ID="s25">
<Interior ss:Color="#00FF00" ss:Pattern="Solid"/>
</Style>
<Style ss:ID="s26">
<Interior ss:Color="#C0504D" ss:Pattern="Solid"/>
</Style>
<Style ss:ID="s27">
<Interior ss:Color="#60497A" ss:Pattern="Solid"/>
</Style>
</Styles>
<Worksheet ss:Name="Sheet1">
......
......
......
在这里,您可以找到我在示例中使用的不同颜色的代码。
希望它对您有用,即使它不适用于win32com。我自己也在玩这个,我找到了一个适用于win32com的答案 我使用myRange.\u print\u details\uz()来显示可从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>
我自己也在玩这个游戏,我找到了一个答案,这个答案将适用于win32com 我使用myRange.\u print\u details\uz()来显示可从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>
如果您在执行VBA的同时尝试此操作,则不确定单线程Excel UI进程将如何使用此操作。VBA循环中有一个DoEvents,用于为单元格着色。现在,我只是在DoEvents之后加入一个Sheets(“AnotherSheet”).Range(“A1”)=myRange.Value(11),然后让win32com从临时助手单元格中获取输出。这是工作,但我不想添加VBA行。哦,好吧。如果您在VBA执行的同时尝试使用单线程Excel UI进程,则不确定该进程将如何工作。VBA循环中有一个DoEvents,用于为单元格着色。现在,我只是在DoEvents之后加入一个Sheets(“AnotherSheet”).Range(“A1”)=myRange.Value(11),然后让win32com从临时助手单元格中获取输出。这是工作,但我不想添加VBA行。哦,好吧。