python 读写excel

-
-
2021-10-23

前言

在 python 中有许多中操作 excel 的方式,pandas 无疑是最好用的,但是在平时写一些小工具时用其他小型包也够了。本篇介绍一下 xlutis、xlrd、xlwt 的一些基本操作。

正文

xlrd

单元格中的数据类型

empty、string、number、date、boolean、error、blank

常用函数

import xlrd
import datetime

data = xlrd.open_workbook('excel.xlsx')
#读取路径,指向该路径上 excel 表格

#sheet 的操作
table=data.sheets()[0]                               
#通过索引获取
table=data.sheet_by_index(0)                    
#通过索引获取
table=data.sheet_by_name('sheet1')          
#通过名字获取
#以上三个函数返回一个 xlrd.sheet.Sheet()对象

names=data.sheet_names()                        
#返回 book 中所有工作表的名字
data.sheet_loaded(name or index)              
#检查工作簿是否已经导入,已导入返回 true,未导入报错 xlrd.biffh.XLRDError

#对行、列的操作
table.nrows  
#返回工作簿的有效行数(有数据的行就会被计入)
table.row(rowx)  
#返回由该行中所有的单元格对象组成的列表 列表每个值的内容为: 单元类型:单元数据
table.row_slice(rowx,start_colx,end_colx) 
#返回该列中从第[start_colx]到[end_colx]的单元格对象组成的列表
table.row_len(rows) 
#返回该行的有效单元格长度(包括 empty)
table.row_types(rows,start_colx,end_colx)
#返回该行单元类型组成的列表 0:empty 1:string 2:number 3:data 4:boolean 5:error
table.row_values(rows,start_colx,end_colx)
#返回该行的数据所组成的列表

#对单元格的操作
table.cell(rowx, colx) 
#返回 [rowx,colx]的单元对象
table.cell_value(rowx, colx) 
#返回 [rowx,colx]的值
table.cell_type(rowx, colx)
#返回[rowx,colx]的类型

#读取单元格内容为日期/时间的方式
date_tuple=xlrd.xldate_as_tuple(cell_value,data.datemode)
#若 cell_value 为时间,则将其转化为适用于 datetime 的元组
date_value=datetime.date(*date_tuple[:3])
#转化为 2019-02-07
date_value.strftime('%Y%m%d') 
#转化为 2019/02/07 格式

#对合并单元格的操作
table.merged_cells 
#列出合并单元格和的信息,返回值为元组(包含坐标信息)的列表,无合并单元格返回空列表
table.cell_value(rowx_start,col_start)
#读取合并单元格的数据

xlutis

xlutis 是为了解决 xlwt 不能向已有数据的 excel 表格写入数据的局限性。主要使用的是 xlutis.copy.copy 方法,但是也有弊端,比如表格内的图片等内容不能复制。

file_path = os.path.dirname(os.path.realpath(sys.executable))+'\\'+book
book = xlrd.open_workbook(file_path,formatting_info=True)    # 读取 Excel
# 复制表
copy_book = xlutils.copy.copy(book) #复制为 xlwt 可用的表
copy_sheet = copy_book.get_sheet(sheetname)

xlwt

xlwt 是一个比较简便的操作 Excel 表格的工具包,处理一些日常表格需求完全足够了。

创建新表格

import xlwt

workbook=xlwt.Workbook()
sheet = workbook.add_sheet('sheet', cell_overwrite_ok=True)
#cell_overwrite_ok 默认为 false,改为 true 将支持多次重写
sheet.col(0).width = 256 * 15  
# 设置第一列的宽度为 15,宽度的基本单位为 256.所以设置的时候一般用 256 × 需要的列宽。sheet.row(0).height_mismatch = True
sheet.row(0).height = 20 * 40 
# 设置行高为可以修改,并修改为 40,行高的基本单位为 20,设置同行高。workbook.save('Excel.xls')

设置字体样式

style=xlwt.XFStyle()
#初始化一个样式对象

font=xlwt.Font()
#创建字体样式
font.name="Simsun"
#使用什么字体
font.height=20*11
#Excel 中字体大小对应的是 11
font.bold=False
#字体是否加粗
font.underline=True
#是否有下划线
font.italic = True
#是否倾斜字体
font.colour_index = 0x01
#设置字体颜色

style.font=font
#设定为 style 中的样式

设置单元格样式

  1. 设置对齐方式
#设置单元格居中
al1=xlwt.Alignment()
al1.horz=0x02
al1.vert=0x01
style.alignment=al1
sheet.write(0,0,'al1 居中方式',style)

#也可直接赋值
style.alignment.vert=0x01
style.alignment.horz=0x02

 #单元格对齐方式
VERT_TOP = 0x00 上端对齐
VERT_CENTER = 0x01 居中对齐(垂直方向上)
VERT_BOTTOM = 0x02 低端对齐

HORZ_LEFT = 0x01 左端对齐
HORZ_CENTER = 0x02 居中对齐(水平方向上)
HORZ_RIGHT = 0x03 右端对齐

在单元格设置超链接或公式等内容

#在(0,0)中插入谷歌的超链接,并且在单元格内显示「Google」
sheet.write(0, 0, xlwt.Formula('HYPERLINK("http://www.google.com";"Google")'))

#添加其他表格的超链接
sheet.write(0, 0, xlwt.Formula('HYPERLINK("./test.xls";"test")'))

#添加公式
sheet.write(2, 0, xlwt.Formula('SUM(A1,A2)'))

写入日期

#写入日期
style.num_format_str='M/D/YY'
sheet.write(2, 0, datetime.datetime.now(),style)

设置单元格背景颜色

#设置单元格背景颜色
pattern.pattern = xlwt.Pattern()
pattern.pattern=SOLID_PATTERN
pattern.pattern_fore_colour=1
#颜色映射表见上
style.pattern=pattern

设置单元格边框

borders=xlwt.Borders()
borders.left=xlwt.Borders.DASHED
#DASHED 虚线
#NO_LINE 没有
#THIN 实线
#left 左 right 右 top 上 bottom 下

#设置边框颜色
borders.left_colour

合并单元格

#write_merge(row,row+m,col,col+m,'lable',style)

隐藏某列某行

sheet.row(i).hidden
=0  显示
=1  隐藏

设置页面布局

copy_sheet.portrait = False
false 横向
true 纵向

去除页眉页脚

    copy_sheet.show_headers = False
    copy_sheet.header_str = b''
    copy_sheet.footer_str = b''

“您的支持是我持续分享的动力”

微信收款码
微信
支付宝收款码
支付宝

目录