读取我一般用xlrd(仅支持读),修改用openpyxl(支持读写改),写用xlsxwriter(仅支持写 )
xlrd安装命令 pip install xlrd
openpyxl安装命令 pip install openpyxl
xlsxwriter安装命令 pip install xlsxwriter
(不多介绍,新手可以参考Ipython的安装过程)
Win10中如何装IPython?(其他Windows版本也通用)
https://blog.csdn.net/COCO56/article/details/81058483
下面是我经常用到的一些功能:
基础功能:
xlrd
导入库,打开test.xlsx,获取该文件的所有sheet名(调用的是函数,返回的是一个列表 )
import xlrd
workbook = xlrd.open_workbook('test.xlsx')
sheetnames = workbook.sheet_names()
通过名字遍历每一个sheet,打印总行数和总列数以及第一行第一列的单元格的值(从0开始)
for sheetN in sheetnames:
sheet = workbook.sheet_by_name(sheetN)
print(sheet.nrows)
print(sheet.ncols)
print(sheet.cell(0,0).value)
openpyxl
加载一个已存在的文件的例子(如果是需要新建的可以使用openpyxl.Workbook(‘hello.xlxs‘),不过单纯新建的话建议用xlsxwriter)并打印Sheet_names
import openpyxl
wb = openpyxl.load_workbook('test.xlsx')
print(wb.get_sheet_names())
接着上面的代码,访问第一个worksheet,获取该sheet的最大行数和最大列数(此外还有:min_row:表格的最小,min_column:表格的最小列,rows:按行获取单元格(Cell对象) - 生成器,columns:按列获取单元格(Cell对象) - 生成器,values:按行获取表格的内容(数据) - 生成器)
ws = wb[wb.sheetnames[0]]
print(ws.max_row)
print(ws.max_column)
打印第一行第一列的单元格的值(注意是从1开始,不是从0开始,另外 row=和column=可缺省)
print(ws.cell(row=1, column=1).value)
print(ws.cell(1, 1).value) #row=和column=可缺省
修改第一行第一列的单元格的值为1并保存(可以等全部修改完之后再保存,不需要每次修改都保存一下)
ws.cell(1, 1).value = 1
wb.save('test.xlsx')
xlsxwriter
打开一个xlsx文件(如果打开的文件存在 ,则清空该文件,如果文件不存在,则新建)
新建一个Sheet(名字缺省的话,默认从Sheet1开始,可以添加自己的sheet名字workbook.add_worksheet(‘TestSheet’))
修改该Sheet的第一行的第一列的元素为1(行号和列号默认从0开始)
最后关闭文件
import xlsxwriter
workbook = xlsxwriter.Workbook('test2.xlsx')
worksheet = workbook.add_worksheet()
worksheet.write(0,0,1)
workbook.close()
进阶功能:
openpyxl
https://blog.csdn.net/COCO56/article/details/84590544
xlsxwriter
官方文档:https://xlsxwriter.readthedocs.io/
1.设置自动换行、水平居中和垂直居中
import xlsxwriter
wb = xlsxwriter.Workbook('test.xlsx')
cell_format_wrap = wb.add_format({'text_wrap':True})
cell_format_vcenter = wb.add_format({'valign':'vcenter'})
cell_format_center = wb.add_format({'align':'center'})
cell_format_vcenter_and_center = wb.add_format({'align':'center', 'valign':'vcenter'})
ws = wb.add_worksheet()
ws.write(0, 0, 'data', cell_format_wrap)