表格讲解python
表格格式
表格分为:工做簿,工做表,单元格web
如图:整个文件就是一个工做簿,下面的 zhengjiang_power 和sheet1为工做表。svg
由于电脑右键新建的表格都是xls 和xlsx格式。
因此讲解xls 和xlsx的操做。
csv python 里有专门的包。csv或者pandas函数
xlrd 读表格测试
参数大全
import xlrd
data = xlrd.open_workbook(filename)#文件名以及路径,若是路径或者文件名有中文给前面加一个r。
table = data.sheets()[0] #经过索引顺序获取
table = data.sheet_by_index(sheet_indx)) #经过索引顺序获取
table = data.sheet_by_name(sheet_name)#经过名称获取
以上三个函数都会返回一个xlrd.sheet.Sheet()对象
names = data.sheet_names() #返回book中全部工做表的名字
data.sheet_loaded(sheet_name or indx) # 检查某个sheet是否导入完毕
行的操做
nrows = table.nrows #获取该sheet中的有效行数
table.row(rowx) #返回由该行中全部的单元格对象组成的列表
table.row_slice(rowx) #返回由该列中全部的单元格对象组成的列表
table.row_types(rowx, start_colx=0, end_colx=None) #返回由该行中全部单元格的数据类型组成的列表
table.row_values(rowx, start_colx=0, end_colx=None) #返回由该行中全部单元格的数据组成的列表
table.row_len(rowx) #返回该列的有效单元格长度
列的操做
ncols = table.ncols #获取列表的有效列数
table.col(colx, start_rowx=0, end_rowx=None) #返回由该列中全部的单元格对象组成的列表
table.col_slice(colx, start_rowx=0, end_rowx=None) #返回由该列中全部的单元格对象组成的列表
table.col_types(colx, start_rowx=0, end_rowx=None) #返回由该列中全部单元格的数据类型组成的列表
table.col_values(colx, start_rowx=0, end_rowx=None) #返回由该列中全部单元格的数据组成的列表
单元格操做
table.cell(rowx,colx) #返回单元格对象
table.cell_type(rowx,colx) #返回单元格中的数据类型
table.cell_value(rowx,colx) #返回单元格中的数据
table.cell_xf_index(rowx, colx) # 暂时尚未搞懂字体
import xlrd #打开工做簿 xlsx=xlrd.open_workbook("zhenjiang_power.xlsx") #使用索引打开工做表 table=xlsx.sheet_by_index(0) #使用名称打开工做表 #table=xlsx.sheet_by_name('zhenjiang_power') #查看单元格值 print(table.cell_value(0,0))#第一个单元格值 print(table.cell(0,0).value) print(table.row(0)[0].value)
大文件读取有些慢。ui
遍历所有数据spa
#遍历所有数据 row =table.nrows#总行数 for i in range(row): rowdate =table.row_values(i)#i行的list for a,b in enumerate(rowdate): print(i,a,b)#第i行,a列,数据b
xlwt 写表格.net
import xlwt #新建一个工做薄 new_workbook=xlwt.Workbook() #新建一个工做表 worksheet=new_workbook.add_sheet('new_sheet') #写入内容 worksheet.write(0,0,'你好美') #保存 new_workbook.save(r"C:\Users\Shineion\Desktop\test.xls")
打开写的文件
首先下载xlutils
准备好一个Excel模板
模板必须为xls格式。xlsx不兼容
# -*- coding: utf-8 -*- from xlutils.copy import copy #把Excel中的模板复制过来 import xlrd import xlwt tem_excel=xlrd.open_workbook(r"C:\Users\Shineion\Desktop\样例.xls",formatting_info=True) #formatting_info=True保留格式打开文件,formatting_info读取xlsx报错,错误信息NotImplementedError: formatting_info=True not yet implemented tem_sheet=tem_excel.sheet_by_index(0) new_excel=copy(tem_excel)#复制表格 new_sheet=new_excel.get_sheet(0) new_sheet.write(2,1,12) new_sheet.write(3,1,13) new_sheet.write(4,1,14) new_excel.save(r'C:\Users\Shineion\Desktop\样例测试.xls')
绝对路径前面要加一个r
结果:
能够发现写入的12,13,14和原始表格样式同样。
接下来,咱们新建本身的样式
# -*- coding: utf-8 -*- from xlutils.copy import copy #把Excel中的模板复制过来 import xlrd import xlwt tem_excel=xlrd.open_workbook(r"C:\Users\Shineion\Desktop\样例.xls",formatting_info=True) #formatting_info=True保留格式打开文件,formatting_info读取xlsx报错,错误信息NotImplementedError: formatting_info=True not yet implemented tem_sheet=tem_excel.sheet_by_index(0) new_excel=copy(tem_excel)#复制表格 new_sheet=new_excel.get_sheet(0) #新建一个样式 style=xlwt.XFStyle()#初始化样式 #字体设置 font=xlwt.Font()#初始化字体 font.name="微软雅黑"#字体 font.bold=True# 加粗 font.height=360 #计算公式=几号字体*20 如18号字体的height=360 style.font=font #把font添加进样式 #边框设置 borders=xlwt.Borders()#初始化边框 borders.top=xlwt.Borders.THIN#上边框 THIN细线框,还有其余线框 borders.bottom=xlwt.Borders.THIN borders.left=xlwt.Borders.THIN borders.right=xlwt.Borders.THIN style.borders=borders#把边框添加进样式 #对齐 aligment=xlwt.Alignment()#对齐 aligment.horz=xlwt.Alignment.HORZ_CENTER#horz水平对齐方式 ,HORZ_CENTER 中心对齐经过改HORZ_CENTER中的center部分设置其余对齐方式 aligment.vert=xlwt.Alignment.VERT_CENTER#vert垂直对齐,VERT_CENTER垂直中心对齐,经过修改center部分设置其余对齐方式 style.alignment=aligment new_sheet.write(2,1,12,style)#style带格式写入 new_sheet.write(3,1,13,style) new_sheet.write(4,1,14,style) new_excel.save(r'C:\Users\Shineion\Desktop\样例测试.xls')
关于报表相关的,仍是学习用pandas 。比xlwt,xlrd好用
英文官网:pandas
我的资源:
pandas经常使用函数,我的经常使用的
我的资源连接介绍很全的。
新的写入方式xlsxwriter
# -*- coding: utf-8 -*- import xlwt workbook=xlwt.Workbook() sheet0=workbook.add_sheet('sheet0') for i in range(300): sheet0.write(0,i,i) workbook.save('测试.xls')
显示错误信息:
ValueError: column index (256) not an int in range(256)
xlwt不支持超过256列
为了不这个问题,使用xlsxwriter。
# -*- coding: utf-8 -*- import xlsxwriter as xw workbook=xw.Workbook(r'C:\Users\Shineion\Desktop\样例1.xls')#指定存的位置,新建工做薄 sheet0=workbook.add_worksheet('sheet0')#新建一个工做表 for i in range(300): sheet0.write(0,i,i) workbook.close()
运行成功
和xlwt仍是有些区别的。
一个打开工做薄是否须要指定路径,
一个add_worksheet,和add_sheet
一个最后须要保持,一个直接close
新的追加写入方式openpyxl
# -*- coding: utf-8 -*- import openpyxl workbook=openpyxl.load_workbook(r'C:\Users\Shineion\Desktop\测试.xlsx')#打开已有工做薄,openpyxl不支持旧版本的xls,会报错 sheet0=workbook['Sheet1'] #写入数据 sheet0['B4']='总裁余' #B列第4行 sheet0['B5']=6 workbook.save(r'C:\Users\Shineion\Desktop\测试1.xlsx')
结果:
openpyxl,xlsxwriter 和前面xlwt.xlrd区别不支持带格式写入。
# -*- coding: utf-8 -*- import os import xlwt file_dir="d:/"#查找d盘 workbook=xlwt.Workbook() sheet0=workbook.add_sheet('sheet0') n=0 for i in os.listdir(file_dir): sheet0.write(n,0,i) n+=1 workbook.save(r'C:\Users\Shineion\Desktop\测试1.xlsx')
excel篇 介绍完啦。
pandas 和xlwt,xlrd 要联合使用。
word篇连接: 值得一看
python自动化办公:word篇。职场高手不是梦。
邮件篇连接:
python自动化办公:邮件篇 (定时邮件问候女票so easy)
电气专业的计算机萌新,写博文不容易。若是你以为本文对你有用,请点个赞再走。谢谢。