Bootstrap

python操作excel中遇到的错误

一、

PermissionError: [Errno 13] Permission denied: 'F:\\lp_test\\besttest\\auto_test\\homework\\syz_automatic_code\\day7\\writing\\d_product.xls'

原因:文件被打开所以不能操作

解决方法:关闭打开的文件



二、IndexError

1.IndexError: list index out of range

原因:

创建sheet页为写成了get_sheet(0),

解决方法:创建sheet页应该使用addd_sheet(),即new_sheet = new_workbook.add_sheet('sheetname')

2.  sheet.cell(0,0)

  File "D:\installed\python3.6.4\lib\site-packages\xlrd\sheet.py", line 408, in cell
    self._cell_types[rowx][colx],
IndexError: list index out of range

原因:打开的sheet页为空,因为cell()函数中引用了rowx及colx的下标,所以导致下标越界


3.    

sheetname = sheetname.decode(self.encoding)

AttributeError: 'int' object has no attribute 'decode'

原因:add_sheet()方法中写的是0,

解决方法:add_sheet()中应该是一个字符串,即sheet页的名字如:new_sheet = new_workbook.add_sheet('sheet1')


4.调用del_unrecongnizable_characters_row只存储了最后一行的数据
原因:初始化存放所有行的列表rows_list=[]放在了for循环里面,每循环一次都会将list清空,所以导致rows_list中保存了最后一行的数据

解决方法:将rows_list=[]放在for循环的外面

5.Exception: Attempt to overwrite cell: sheetname='sheet1' rowx=0 colx=0
原因:以下代码写在了j(j代表列)循环当中导致单元格重写
                    for k in old_sheet.row_values(i):
                        print(k)

                        new_sheet.write(i,j,k)

解决方法:删除for k in 的循环,将new_sheet.write(i,j,k)改为  new_sheet.write(i,j,old_sheet.row_values(i)[j])作为for j in range(old_sheet.ncols+1) 列循环的体

6.

    sheet = book.sheet_by_name('sheet2') #根据名字获取sheet页数据
  File "D:\installed\python3.6.4\lib\site-packages\xlrd\book.py", line 472, in sheet_by_name
    raise XLRDError('No sheet named <%r>' % sheet_name)

xlrd.biffh.XLRDError: No sheet named <'sheet2'>

原因:自动添加的sheet页的名字首字母是大写的S,book.sheet_by_name()方法区分大小写

解决方法:将名字与sheet页的名字完全一致可以了

7.


;