python自动化办公:excel篇,从此做表不加班

发布时间:2024-01-21 17:30

表格讲解

表格格式

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:961562169

\"python自动化办公:excel篇,从此做表不加班_第1张图片\"


表格分为:工作簿,工作表,单元格

\"python自动化办公:excel篇,从此做表不加班_第2张图片\"

如图:整个文件就是一个工作簿,下面的 zhengjiang_power 和sheet1为工作表。

xlrd +xlwt读写表格

\"python自动化办公:excel篇,从此做表不加班_第3张图片\"

因为电脑右键新建的表格都是xls 和xlsx格式。
所以讲解xls 和xlsx的操作。
csv python 里有专门的包。csv或者pandas

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) # 暂时还没有搞懂

\"python自动化办公:excel篇,从此做表不加班_第4张图片\"

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)

大文件读取有些慢。

\"python自动化办公:excel篇,从此做表不加班_第5张图片\"

遍历全部数据

#遍历全部数据
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

\"python自动化办公:excel篇,从此做表不加班_第6张图片\"

xlwt 写表格

\"python自动化办公:excel篇,从此做表不加班_第7张图片\"

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\")

打开写的文件

\"python自动化办公:excel篇,从此做表不加班_第8张图片\"

用神奇的 xlutils 套用 Excel 格式

首先下载xlutils

准备好一个Excel模板

\"python自动化办公:excel篇,从此做表不加班_第9张图片\"


模板必须为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

结果:

\"python自动化办公:excel篇,从此做表不加班_第10张图片\"


可以发现写入的12,13,14和原始表格样式一样。
接下来,我们新建自己的样式

\"python自动化办公:excel篇,从此做表不加班_第11张图片\"

\"python自动化办公:excel篇,从此做表不加班_第12张图片\"

# -*- 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\')

\"python自动化办公:excel篇,从此做表不加班_第13张图片\"

报表生成

关于报表相关的,还是学习用pandas 。比xlwt,xlrd好用
英文官网:pandas
个人资源:
pandas常用函数,个人常用的

个人资源链接介绍很全的。

用 xlsxwriter ,openpyxl 更灵活操作 Excel

新的写入方式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()

运行成功

\"python自动化办公:excel篇,从此做表不加班_第14张图片\"

和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\')

结果:

\"python自动化办公:excel篇,从此做表不加班_第15张图片\"

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\')

\"python自动化办公:excel篇,从此做表不加班_第16张图片\"

excel篇 介绍完啦。
pandas 和xlwt,xlrd 要联合使用。

 

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号