使用Python使用Range函数创建数组并写入excel列

时间:2015-01-30 03:23:58

标签: python excel range win32com

我想在我的python脚本中动态创建一个数据容器(基于计算),然后使用win32com客户端和range()函数将其写入excel中的。我可以成功地执行此操作,但不能为列执行此操作。我基本上想要做的硬编码代码如下:

import win32com.client as win32
from win32com.client import Dispatch

Excel=Dispatch('Excel.Application')
wb = Excel.ActiveWorkbook
ws = wb.ActiveSheet
data_container = [5],[6],[7],[8],[9]
ws.Range(ws.Cells(11,9),ws.Cells(15,9)).Value = (data_container)

对我来说,棘手的部分是创建一个我可以动态创建的data_container。我知道关于元组,数据字典和列表的stackoverflow有很多,但我无法解决它并且感到困惑(如果我看到警告"元组是不可变的"再一次!!!!!! )。每当我创建类似下面的内容时,它只输出所有单元格中的第一个项目(即下面用5填充所有单元格)。

data_container = []
data_container.append(5)
data_container.append(6)
data_container.append(7)
data_container.append(8)
data_container.append(9)
ws.Range(ws.Cells(11,9),ws.Cells(15,9)).Value = (data_container)

我可以遍历并写入每个单元格,但是由于时间限制,我们不想这样做。我知道你可以使用其他python插件,但我希望这可以在许多计算机上使用,这些计算机不一定有所有这些插件可以阻止人们使用我的脚本.........我喜欢简单使用win32com设置并使大多数项目工作除此之外。 理想情况下,我希望将一些列存储在1个字典/列表/矩阵/数组......中,并且能够写入引用数据容器某个部分的一个范围。例如:

ws.Range(ws.Cells(11,9),ws.Cells(15,9)).Value = (data_container[0])

data_container [0]包含[5],[6],[7],[8],[9] ......

我想要做的最终目的是将多个列(不一定按顺序)读入数据容器,进行修改,然后写回多个列(同样不一定按顺序)。

我很感激所有的构建块目前可能是堆栈溢出,我只是已经能够在几天内把它们拉到一起我一直试图解决这个问题。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

我很幸运能让某人下班来花一些时间帮助我,但可能对其他人有用,可作为参考。下面似乎工作。问题是创建数组/列表结构。我认为从根本上下面我创建了一个3D数组/列表?下面的代码用5创建这个结构,然后只修改两个单元格并写回两个单独的列。这对其他人来说可能是显而易见的,但对我来说并非如此。

import win32api
import os
import sys
import win32com.client as win32
from win32com.client import Dispatch


if __name__ == "__main__":
Excel=Dispatch('Excel.Application')
wb = Excel.ActiveWorkbook
ws = wb.ActiveSheet

data_work = [[[5] for i in range(10)] for j in range(10)]
data_work[0][2] = [500]
data_work[1][4] = [45]
ws.Range(ws.Cells(1,9),ws.Cells(9,9)).Value = (data_work[0])
ws.Range(ws.Cells(1,12),ws.Cells(9,12)).Value = (data_work[1])