Python:迭代excel列并使用win32com获取值

时间:2018-05-18 08:28:17

标签: python excel win32com

我使用Python 3.5和win32com迭代excel文档行(仅来自第一列)并从中获取所有值,最好的是在一个简单的列表中。我尝试了以下实现,但它有一些问题:

excel_app = win32com.client.Dispatch('Excel.Application')
workbook = excel_app.Workbooks.Open(myfile2)
worksheet = workbook.Sheets('Sheet1')
data = excel_app.Range("A1:A60")
print(data)

for i in data:
    if i is not None:
        print(i)

问题主要在于:" data = excel_app.Range(" A1:A60")"

  1. 这需要前60行,我想获得与excel文件中的数据一样多的行,否则要么我没有获得足够的数据,要么我得到太多而且我最终得到一堆“无”'

  2. 它会返回一个元组,因此我无法对其进行修改以删除“无”'如果我获得的数据超出电子表格的数据,则会显示值。

2 个答案:

答案 0 :(得分:2)

您可以使用以下方式获取行计数:

worksheet.UsedRange.Rows.Count

其中UsedRange表示任何时候都包含值的所有单元格。

在元组中包含数据后,您可以将其复制到列表中进行处理 - 例如new_list = data [:]。

如果要复制到新列表并同时删除无值:

new_list = [ item for item in data if item is not None]

答案 1 :(得分:1)

如果您不介意使用xlrd,我认为会更容易。 这会像......

import xlrd

xlf = xlrd.open_workbook('/wherever/file/may/roam/asdf.xlsx')
xls = xlf.sheet_by_name('Sheet1')
data = xls.col_values(0)