Excel文件处理之xlrd、xlwt、xlutils、openpyxl
1读excel要用到xlrd模块(支持xls、xlsx)
import xlrd
filename="C:/Users/11/Desktop/2.xlsx"
book = xlrd.open_workbook(filename) #打开Excel文件读取数据
sheet =book.sheets()[0] #指定工作表
print book.nsheets #获取sheet总数
print sheet.nrows #获取行数
print sheet.ncols #获取列数
print(sheet.cell(1,2)) #获取单元格2行3列的值
print(sheet.row_values(0)) #获取第1行的值(返回数组)
print(sheet.col_values(0)) #获取第1列的值(返回数组)
指定工作表的三种方式:
sheet = book.sheets()[0]
sheet = book.sheet_by_index(0)
sheet = book.sheet_by_name('Sheet1') #有的资料显示(u'Sheet1'),测试两种均可
2写excel要用到xlwt模块(支持xls)
import xlwt
book = xlwt.Workbook(encoding = 'ascii') #创建workbook
sheet = book.add_sheet('sheet1') #创建表
sheet.write(1, 2, label = 'hello') #往单元格2行3列写入内容
book.save("C:/Users/11/Desktop/temp/3/3.xls") #保存
encoding和label要对应:
比如encoding = 'utf8' 对应 label = '你好',encoding = 'ascii' 对应 label = 'hello'。
如果encoding = 'ascii' 对应 label = '你好' 则会报错: 'ascii' codec can't decode byte 0xe5 in position ......
文件保存路径:
可以是相对路径,也可以是绝对路径。
如果路径中的文件夹不存在则报错: No such file or directory......
如果文件不存在会自动创建,已存在会覆盖处理(覆盖整个文件,不仅仅是sheet或者单元格)。
3修改excel可以用xlutils、openpyxl模块
3.1xlutils(支持xls)
import xlrd
from xlutils.copy import copy
workbook=xlrd.open_workbook('3.xls')
workbooknew=copy(workbook) #copy:将xlrd.Book转为xlwt.Workbook。
ws=workbooknew.get_sheet(0) #注意此处用的是get_sheet,不同于xlrd模块指定工作表的三种方式。
ws.write(0,1,"changed12345")
workbooknew.save("3copy.xls")
xlutils是一个工具模块,一般只用到copy模块,用于修改另存Excel文件。具体实现步骤是:将需要更改的excel文件打开,用xlutils包的copy将excel文件拷贝一份,然后进行修改操作,最后保存。实际是在xlrd.Book和xlwt.Workbook之间建立了一个管道而已。
所以,xlutils修改当前文件的方法就是,最后保存的时候文件名同原名,即替换原文件:workbooknew.save("3.xls")。
xlutils也可以对xlsx格式进行操作,但是最后保存只支持xls格式。
3.2openpyxl(支持xlsx)
from openpyxl import load_workbook
book = load_workbook('333.xlsx')
sheet=book.get_sheet_by_name('Sheet2')
sheet['A1']='hello'
sheet['A5']=123
book.save('333.xlsx')
同xlutils相比好像只是少了copy环节,语法稍有不同,最后也是保存为同名文件才达到修改当前文件的目的。
如果load_workbook('3.xls')程序报错:InvalidFileException: openpyxl does not support the old .xls file format, please use xlrd to read this file, or convert it to the more recent .xlsx file format.
注意
现在已经Office2019了,如果还只支持2003版的xls格式就会被人抛弃。后面还有更便利的库推出。
在Excel中内容尾部存在若干个空格时,可能是人为产生,VBA会自动去重尾部空格,Python不会,需要strip()处理。
https://cloud.tencent.com/developer/article/1191080 **