Python:迭代excel列并使用Win32 COM获取值
我正在使用Python3.5和win32com迭代excel文档行(仅从第一列开始),并从中获取所有值,最好是在一个简单的列表中。我尝试了以下实现,但存在一些问题:Python:迭代excel列并使用Win32 COM获取值,python,excel,win32com,Python,Excel,Win32com,我正在使用Python3.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
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)
问题主要在于:“数据=excel应用程序范围(“A1:A60”)”
如果您不介意使用xlrd,我想这会容易得多。 这就像
import xlrd
xlf = xlrd.open_workbook('/wherever/file/may/roam/asdf.xlsx')
xls = xlf.sheet_by_name('Sheet1')
data = xls.col_values(0)
如果您不介意使用xlrd,我想这会容易得多。 这就像
import xlrd
xlf = xlrd.open_workbook('/wherever/file/may/roam/asdf.xlsx')
xls = xlf.sheet_by_name('Sheet1')
data = xls.col_values(0)
您可以使用以下命令获取行数:
worksheet.UsedRange.Rows.Count
其中表示任何时候包含值的所有单元格
一旦元组中有了数据,就可以将其复制到列表中进行处理-例如,new_list=data[:]
如果要复制到新列表中,同时不删除任何值,请执行以下操作:
new_list = [ item for item in data if item is not None]
您可以使用以下命令获取行数:
worksheet.UsedRange.Rows.Count
其中表示任何时候包含值的所有单元格
一旦元组中有了数据,就可以将其复制到列表中进行处理-例如,new_list=data[:]
如果要复制到新列表中,同时不删除任何值,请执行以下操作:
new_list = [ item for item in data if item is not None]
您使用win32com的具体原因是什么?是的,我需要win32com,因为它是我所知道的唯一一个库,如果我的条件为真(如果我不是无),它允许我将对象嵌入excel,代码如下:Embedded_object.Add(ClassType=None,Filename=file_location,Link=False,DisplayAsIcon=true,Left=3,Top=0,Width=50,Height=50)好的,明白了。。。但是,如果阅读是如此的不方便,而嵌入只有在win32com中才有可能,为什么不混合使用呢?使用win32com处理一切可行且没有其他选择的事情,简单的阅读问题可以通过XLRD解决。您使用win32com的具体原因是什么?是的,我需要win32com,因为它是我所知道的唯一一个库,如果我的条件为真(如果我不是无),它允许我将对象嵌入excel,代码如下:Embedded_object.Add(ClassType=None,Filename=file_location,Link=False,DisplayAsIcon=true,Left=3,Top=0,Width=50,Height=50)好的,明白了。。。但是,如果阅读是如此的不方便,而嵌入只有在win32com中才有可能,为什么不混合使用呢?使用win32com处理一切工作正常且没有其他选择的事务,简单的读取问题可以通过XLRDX解决。出于某种原因,这会在更复杂的工作表中产生意外的高计数,可能是因为后面的行用于包含数据。是否有可能确定某列中当前数据存在的
UsedRange
,例如,a
?@Mast这是一个众所周知的现象-请参阅以获得相当全面的讨论。虽然是VBA,但同样的原则也适用。我建议您将您的具体需求作为一个问题发布—例如,您是否必须像这张原始海报一样使用win32com—然后您应该得到一个答案。由于某些原因,这会在更复杂的工作表中提供意外的高计数,可能是因为后面的行用于包含数据。是否有可能确定某列中当前数据存在的UsedRange
,例如,a
?@Mast这是一个众所周知的现象-请参阅以获得相当全面的讨论。虽然是VBA,但同样的原则也适用。我建议您将您的具体需求作为一个问题发布—例如,您是否必须像这张原始海报一样使用win32com—然后您应该得到一个答案