2017-08-16 142 views
3

我正在使用python xlwings读取Excel 2013中的一列数据。列A中填充了数字。要将此列导入到Python列表py_list,我有以下代码;将Excel中的数据读入Python列表

import xlwings as xw 

wb = xw.Book('BookName.xlsm') 
sht = xw.Book('SheetName') 
py_list = sht.range('A2:A40').value 

上述代码适用于列数据填充在A2:A40处。但是,列数据可以保持增长。数据可以增长并延伸至A2:A46A2:A80。最后一行是空的。在编译时不知道该列中有多少行数据。

如何修改代码以检测最后一行中的空单元格,以便可以通过py_list读取数据范围?

我打算使用其他python库来读取xlwings以外的Excel数据。我正在使用python v3.6

回答

1

经过多次试验和错误,我会回答我自己的问题。

此问题的关键在于找出列A中的行数。

可以使用下面的xlwings在这一行中找到行数;

rownum = sht.range('A1').end('down').last_cell.row 

人们需要仔细阅读API文档来得到答案。

http://docs.xlwings.org/en/stable/api.html#xlwings.Range

一旦行的数量被发现,很容易弄清楚的休息。

2

我说这很多关于从csv或excel中读取文件,但我会使用​​。

import pandas as pd 

df = pd.read_excel('filename.xlsm', sheetname=0) # can also index sheet by name or fetch all sheets 
mylist = df['column name'].tolist() 

一种替代是使用使用soemthing像OFFSET在Excel代替'A2:A40',或者一个命名范围动态式?

+0

如果sheetname是'SheetName',我该如何修改你的代码?它是否正确? 'df = pd.read_excel('filename.xlsm',sheetname ='SheetName')' – user3848207

+1

对我来说看起来是正确的,关于函数的细节在这里:https://pandas.pydata.org/pandas-docs/stable/ generated/pandas.read_excel.html – Stael

+0

你的答案将适用于没有密码保护的excel文件。不幸的是,我的excel文件受密码保护。不过,我赞成你的答案。 – user3848207