PyWin32 Excel集成 - 获取非连续单元格的值

时间:2013-08-28 07:26:41

标签: python pywin32

我认为我在这里做了一些根本错误的事情。我想在不使用循环的情况下获取给定单元格区域中的值(使用循环获取/设置大量数据的值似乎非常慢,所以我想我一次尝试抓取大块数据)。

作为一个小例子,假设我有一个Excel电子表格,其单元格为A1,A3和A5。我想将这些值拉入列表中。但不幸的是,当我执行下面的代码时,我只获得了A1的值。不是任何其他人。

import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = True

wb = excel.Workbooks.Add()
ws = wb.Worksheets("Sheet1")

val = wb.ActiveSheet.Range('A1,A3,A5').Value
print val

如果我要说,想要一个连续的值列表,下面这行就是这样:

val = wb.ActiveSheet.Range('A1:A5').Value

它给了我一个清单。但由于我想要的值可能不是连续的,因此这种方法不起作用。值始终来自同一列(在此示例中为“A”),但不一定是连续的行。

希望这是有道理的。如果没有,我可以澄清一下。谢谢你的帮助! :)

1 个答案:

答案 0 :(得分:0)

我不确定它是否应该有用......

如果您尝试类似

的话,请在VBA中
values = wkstest.Range("A3,A5,A7").Value

我仍然只得到A3返回的值。

虽然

values = wkstest.Range("A3,A5,A7").Select

选择3个细胞。

我认为这是Excel COM界面的限制,而不是语言。

是否无法提取连续范围,然后从列表中提取python中所需的位? 这仍然是通过一次读取每个单元格获得的巨大速度增益,即使我正在读“过多”并且之后对变量进行更多操作。

我假设在你的完整python代码中你组合了值来创建文本字符串“A1,A3,A5”而不是硬编码。如果你有一个行数列表,如rows = [1,3,5]那么你可以这样做:

rows=[1,3,5]
val = wb.ActiveSheet.Range('A1:A5').Value 
vals = {} #create a dictionary
for i in xrange(0,len(rows)):
    vals[rows[i]]=val[rows[i]-1]