2011-03-15 37 views
3
import glob 
import xlrd 

from xlwt import Workbook 

wb = Workbook() 

for file_name in glob.glob("foo*.xls"): 
    wb_orig = xlrd.open_workbook(file_name) 
    for ws_orig in wb_orig.sheets(): 
     ws = wb.add_sheet('{0} {1}'.format(file_name, ws_orig.name)) 
     for rx in range(ws_orig.nrows): 
      for cx in range(ws_orig.ncols): 
       ws.write(rx, cx, ws_orig.cell_value(rx,cx)) 

wb.save("mefoo.xls") 

我试图以多种方式上面的代码合并多个Excel表为一个工作簿........ 此代码给误差作为列表索引超出范围

Traceback (most recent call last): 
    File "E:\my python\Internship\mergestackoverflow.py", line 16, in <module> 
    wb.save("mefoo.xls") 
    File "C:\Python27\lib\site-packages\xlwt\Workbook.py", line 634, in save 
    doc.save(filename, self.get_biff_data()) 
    File "C:\Python27\lib\site-packages\xlwt\Workbook.py", line 615, in get_biff_data 
    self.__worksheets[self.__active_sheet].selected = True 
IndexError: list index out of range 

请帮我解决错误..

回答

6

您可以得到该IndexError的唯一方法是如果输出工作簿中没有工作表。

您需要检查您的glob.glob("foo*.xls");它看起来像没有返回文件。

+0

感谢您的帮助...... – 2011-03-16 10:36:52

+0

@冷血:请考虑“接受”答案(左边的大勾) – 2011-03-16 10:59:47

1

我发现的解决方案是不使用glob中的绝对路径。

for file_name in glob.glob("C://your//full//path//here//foo*.xls"): 
    #population/merging code here 

wb.save("mefoo.xls") 

至于为什么这解决了这个问题,我不知道。但我希望这有助于某人。