1. python xlrd 2.0.1 不支持 xlsx 格式
常用的python处理excel表格文件的库是xlrd和xlwt,而xlrd库对office2007 xlsx格式的excel表格文件不支持,编译器会报 “xlrd.biffh.XLRDError: Excel xlsx file; not supported” 错误;
原因xlrd库的最新版本2.0.1只支持 .xls 文件。
解决方法是卸载已安装的xlrd,并把xlrd退回到1.2.0版本。
pip uninstall xlrd
pip install xlrd=1.2.0
2. python 向已有的xls里写入数据
python常用xlwt写入数据,但xlwt的缺点是会覆盖原有的信息,并且写入的方法是首先需新建一个sheet,写入数据,然后保存xls文件,如下所示:
'''
Excel文件的写入
1. 导入xlwt模块
2. 创建一个Excel对象
3. 在创建的Excel对象中添加一个sheet表格
4. 往sheet表格里写入数据
5. 保存数据到Excel中
'''
import xlwt
workbook = xlwt.Workbook() # 创建一个新的Excel对象
wsheet = workbook.add_sheet('sheet1') # 添加一个新的sheet对象
wsheet.write(0, 0, label='test string') # 往第1行第1列写数据(行 列 从0开始)
wsheet.write(0, 1, label='123456') # 往第1行第2列写数据(行 列 从0开始)
workbook.save('test_write_excel.xls') # 保存写入的数据
但是很多场景需要在原有的xls上写入数据,此时可以借助xlutils库,实例如下:
import xlrd
from xlutils import copy
excelworkbook = xlrd.open_workbook("test.xls", formatting_info=True) # 打开Excel文件对象,并保留原有的格式信息
workbook = copy.copy(excelworkbook) # 复制文件并保留格式
wSheet = workbook.get_sheet(0) # 索引sheet表
wSheet.write(1, 5, "aaaa") # 往表格写入数据
wSheet.write(2, 5, "bbbb") # 往表格写入数据
workbook.save("test.xls") # 保存文件
3. python 读写xlsx文件(openpyxl)
由于上面提到的库 xlrd , xlwt , xlutils 对excel格式兼容性不好;
所以对xlsx格式的文件采用 openpyxl 库来进行读写。
openpyxl特点:
1.专门处理Excel2007及以上版本产生的xlsx文件
2.读写单元格时,单元格的坐标位置起始值是(1,1),即下标最小值为1,否则报错!
3.支持直接横纵坐标访问,如A1,B2...
4.支持动态的插入行和列
使用实例如下:
from openpyxl import load_workbook
workbook = load_workbook(filename="test.xlsx") # 打开已有xlsx文件
print(workbook.sheetnames) # 获取所有的sheet名称
sheet = workbook['flashmap'] # 根据sheet名称获取已有的sheet对象
nrownumber = sheet.max_row # 获取总行数
ncolume = sheet.max_column # 获取总列数
cellvalue = sheet.cell(row=2, column=3).value # 获取第2行第3列cell的值
sheet.insert_cols(idx=7) # 在第7列的前面插入一列
sheet.insert_rows(idx=2) # 在第2行的前面插入一行
sheet.cell(row=2, column=7, value="aaaaaaa") # 往第2行第7列cell写入数据
sheet.delete_cols(6, 2) # 删除从第6列开始算的2列数据
workbook.save(filename="test.xlsx") # 保存