0%

使用 python 处理 excel

本文旨在记录对excel 常用操作方式

依赖

功能
xlrd 读取
xlwt 写入
xlutils 配合xlrd做编辑

创建excel

最简单的例子就是创建一个sheet页的文档

1
2
3
4
5
import xlwt

wb = xlwt.Workbook(encoding='utf-8')
sheet = wb.add_sheet("sheet1")
wb.save("excel.xls")

cell 操作

每个sheet 都是一个二维表,通过 (x,y) 这样的索引对单元格(cell)进行操作

1
2
3
4
5
6
7
8
9
10
11
# 字符
sheet.write(0, 1, "string")
# 数值
sheet.write(0, 2, 1024)
# 布尔
sheet.write(0, 3, True)

# 时间/日期
selfFormat = xlwt.XFStyle()
selfFormat.num_format_str = 'yyyy-mm-dd hh:mm:ss'
sheet.write(0, 4, datetime.datetime.now(), selfFormat)

在excel中日期、时间是以浮点数存储的,1 = 1900/1/1 0:00:00 ,并且每一天+1,时间折算到小数

设置单元格样式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 创建字体
font = xlwt.Font()
font.name = "Arial"
font.bold = True
font.color_index = 4
# font.height =

# 创建对齐方式
align = xlwt.Alignment()
align.horz = xlwt.Alignment.HORZ_CENTER
align.vert = xlwt.Alignment.VERT_CENTER

style = xlwt.XFStyle()
style.font = font
style.alignment = align

# 设置合并
# 参数:起始行,结束行,起始列,结束列
sheet.write_merge(0, 3, 0, 0, "合并单元格", style)

读取excel

读取需要使用 xlrd ,不能对内容进行修改

1
2
3
4
5
6
7
8
9
import xlrd

# 打开xls文件
wb = xlrd.open_workbook("excel.xls")

# 获取sheet 可以通过index 或者name 进行索引
sheet_names = wb.sheet_names()
sheet = wb.sheet_by_index(0)
sheet = wb.sheet_by_name(u'Sheet1')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 要是处理全部表格的化可以直接遍历
sheets = wb.sheets()
for sheet in sheets:
# 获取总行列数
print("Sheet: %8s Rows: %2s Cols: %2s" % (sheet.name, sheet.nrows, sheet.ncols))
# 获取第0行的前10列
sheet.row_values(0)[:10]
# 获取一列
sheet.col_values(0)

# 获取单元格
for i in range(sheet.nrows):
for j in range(sheet.ncols):
# 判断单元格类型
if sheet.cell_type(i, j) == xlrd.XL_CELL_TEXT:
print("Type: TEXT Value: %s" % sheet.cell(i, j).value)
if sheet.cell_type(i, j) == xlrd.XL_CELL_BOOLEAN:
print("Type: BOOLEAN Value: %r" % sheet.cell(i, j).value)
if sheet.cell_type(i, j) == xlrd.XL_CELL_NUMBER:
print("Type: NUMBER Value: %f" % sheet.cell(i, j).value)
if sheet.cell_type(i, j) == xlrd.XL_CELL_DATE:
# 时间类型处理需要确定excel 起始时间,在这里是 1900
# xldate_as_datetime : 0: 1900-based, 1: 1904-based.
print("Type: DATE Value: %r" % xlrd.xldate.xldate_as_datetime(sheet.cell(i, j).value, 0))

编辑excel

需要再加 xlutils 包

1
2
3
4
5
6
7
import xlrd
from xlutils.copy import copy
wb = copy(xlrd.open_workbook("excel.xls"))
sheet = wb.get_sheet(0)
sheet.set_name("copyed_%s" % sheet.get_name())
wb.add_sheet("sheet2")
wb.save('new_excel.xls')

copy 方法只会拷贝数据,所有样式都会丢失