Excel工作表与Python列表之间的数据读写

Excel数据与Python列表之间的读写包括读取Excel数据到Python列表和将Python列表数据写入到Excel工作表。[大谦Excel,dqexcel点com]

读取Excel数据到Python列表

对于图6-1中工作表内的行数据,将它们读取到Python列表中。

Document Image

图6-1 Excel数据

实现如下:

code.python
>>> import win32com.client as win32
>>> app=win32.gencache.EnsureDispatch("excel.application")
>>> app.Visible=True
>>> bk=app.Workbooks.Add()
>>> sht=bk.Worksheets(1)
>>> lst=sht.Range("A1:E1";).Value  #从工作表读取数据
>>> lst
((1.0, 2.0, 3.0, 4.0, 5.0),)
>>> list(lst[0])
[(1.0, 2.0, 3.0, 4.0, 5.0)]

得到的首先是元组,用list函数转换成列表。

code.python
>>> lst=sht.Range("A1:A5").Value
>>> lst
((1.0,), (3.0,), (5.0,), (7.0,), (9.0,))
>>> lst2=[]
>>> for i in range(len(lst)):
		lst2.append(list(lst[i]))
>>> lst2
[[1.0], [3.0], [5.0], [7.0], [9.0]]
>>> lst=sht.Range('A1:A5').Value
>>> lst
((1.0,), (3.0,), (5.0,), (7.0,), (9.0,))
>>> lst2=[]
>>> for i in range(len(lst)):
	    lst2.append(lst[i][0])
>>> lst2
[1.0, 3.0, 5.0, 7.0, 9.0]

将Python列表数据写入到Excel工作表

把列表数据写入到Excel工作表,指定区域的第1个单元格写入即可,使用其他两种方式,需要指定整个区域。下面把一维列表行数据写入到Excel工作表sht中。

code.python
>>> import win32com.client as win32
>>> app=win32.gencache.EnsureDispatch("excel.application")
>>> app.Visible=True
>>> bk=app.Workbooks.Add()
>>> sht=bk.Worksheets(1)
>>> lst=[1,2,3,4,5]
>>> sht.Range("A3:E3").Value=lst  #将Python数据写入Excel工作表

结果如图6-2所示。

Document Image

图6-2 Python列表数据写入到Excel工作表

如果希望Python列表数据写入到Excel工作表中的某列,分两种情况,一种是列表数据是二维列数据,可直接写入;第二种是列表数据为一维行数据,写入的时候进行转置。

code.python
>>> import win32com.client as win32
>>> app=win32.gencache.EnsureDispatch("excel.application")
>>> app.Visible=True
>>> bk=app.Workbooks.Add()
>>> sht=bk.Worksheets(1)
>>> lst=[[1],[2],[3],[4],[5]]
>>> sht.Range("C1:C5").Value=lst  #直接写入

code.python
>>> import win32com.client as win32
>>> app=win32.gencache.EnsureDispatch("excel.application")
>>> app.Visible=True
>>> bk=app.Workbooks.Add()
>>> sht=bk.Worksheets(1)
>>> lst=[1,2,3,4,5]
>>> sht.Range("E1:E5").Value=app.WorksheetFunction.Transpose(lst)  #转置

结果如图6-3所示。

Document Image

图6-3 列数据写入到Excel工作表

需要指定满足大小要求的单元格区域。

code.python
>>> sht.Range("A5:B6").Value=[[1,2],[3,4]]