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

使用Python的Range函数创建数组并写入excel列,python,excel,range,win32com,Python,Excel,Range,Win32com,我想在python脚本中动态创建一个数据容器(基于计算),然后使用Win32 COM客户端和range()函数将其写入excel中的列。我可以成功地对一行执行此操作,但不能对一列执行此操作。我基本上想做的硬编码代码如下: import win32com.client as win32 from win32com.client import Dispatch Excel=Dispatch('Excel.Application') wb = Excel.ActiveWorkbook ws = wb

我想在python脚本中动态创建一个数据容器(基于计算),然后使用Win32 COM客户端和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)
对我来说,棘手的部分是创建一个我可以动态创建的数据容器。我知道关于元组、数据字典和列表有很多关于stackoverflow的内容,但我无法理解并且感到困惑(如果我再次看到“元组是不可变的”警告!!!!!)。每当我创建如下内容时,它只输出所有单元格中的第一项(即下面用5填充所有单元格)

我可以循环并写入每个单元格,但由于时间限制,我不想这样做。我知道您可能还可以使用其他python插件,但我希望它可以在许多计算机上使用,这些计算机不一定都有这些插件,可以阻止人们使用我的脚本………我喜欢使用win32com设置的简单性,并且除此之外,大多数项目都可以工作。 理想情况下,我希望在1个dictionary/list/matrix/array中存储多个列……并能够写入引用数据容器某个部分的一个范围。例如:

ws.Range(ws.Cells(11,9),ws.Cells(15,9)).Value = (data_container[0])
其中数据容器[0]包含[5]、[6]、[7]、[8]、[9]

我想做的最终工作是将大量列(不一定按顺序)读入数据容器,进行修改,然后写回大量列(同样也不一定按顺序)


我很感激目前所有的构建模块都可能是堆栈溢出,我只是在这几天里一直试图解决这个问题,但一直没能把它们放在一起。非常感谢您的帮助。

我很幸运有人从工作中抽出时间来帮助我,但可能对其他任何人都有用。下面的方法似乎有效。问题是创建数组/列表结构。我认为我已经创建了一个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])
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])