如何使用pywin32在excel文件中有效地将值填充到一个列?

时间:2012-02-17 03:20:25

标签: python excel pywin32

我知道我可以使用类似

的Pywin32使用数组中的源来填充行
import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = True
wb = excel.Workbooks.Add()
ws = wb.Worksheets('Sheet1')
ws.Range("A4:D4").Value = [i for i in range(1,5)]

但在单列情况下,当我尝试这样的时候

ws.Range("A1:A4").Value = [i for i in range(1,5)]

我在“A”栏中得到4分1,但我想要的是“A”栏中的1,2,3,4

有没有类似处理专栏的方法?

如果不是,一次填充多个细胞的最有效方法是什么?

2 个答案:

答案 0 :(得分:1)

您需要做的是

import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = True
wb = excel.Workbooks.Add()
ws = wb.Worksheets('Sheet1')
ws.Range("A1:A4").Value = [[i] for i in range(1,5)]

之前您尝试将[1,2,3,4]放入一列中。但是,当它转换为excel格式时,数组始终会转换为行。因此,当您创建2D数组时,您将创建一个行数组,这是excel查看列的方式。所以你想要的是[[1],[2],[3],[4]]。这就是上面代码生成的内容。

编辑:我意识到这可能不是世界上最好的措辞。如果你不理解,我会尝试提出更好的解释。

答案 1 :(得分:0)

你可以这样做:

for col_idx, i in enumerate(xrange(1,5)):
    ws.Cells(1, col_idx+1).Value = i