【Python】【实战】用 Python 对 Excel 进行读写操作

Python x Excel

前言

本文代码来源:

Python读写Excel表格,就是这么简单粗暴又好用

在原代码的基础上,我会做一些应用上的修改,并力争理清楚代码的功能。

1. 写文件 xlwt

先贴 因为偷懒 修改后的源码:

import xlwt

#设置表格样式
def set_style(name, height, bold = False):
	style = xlwt.XFStyle()
	font = xlwt.Font()
	font.name = name
	font.bold = bold
	font.color_index = 4
	font.height = height
	style.font = font
	return style

#写
def write_excel():
	f = xlwt.Workbook()
	sheet1 = f.add_sheet('学生', cell_overwrite_ok = True)
	row0 = ["name", "age", "birth", "hobby"]
	colum0 = ["A", "B", "C", "D"]

	#第一行
	for i in range(0, len(row0)):
		sheet1.write(0, i, row0[i], set_style('Times New Roman', 220, True))

	#第一列
	for i in range(0, len(colum0)):
		sheet1.write(i+1, 0, colum0[i], set_style('Times New Roman', 220, True))

	sheet1.write(1, 3, '2019/12/25')
	sheet1.write_merge(6, 6, 1, 3, 'Unknown')#合并单元格
	sheet1.write_merge(1, 2, 3, 3, 'Play')#合并列
	sheet1.write_merge(4, 5, 3, 3,'Basketball')

	f.save('test.xls')

if __name__ == '__main__':
	write_excel()

解析:

  • 设置表格样式
    set_style() 函数,有3个变量:name 传入字体,height 传入字体高度,220 在 excel 中显示为11,bold 设置字体加粗。

  • 创建工作表

sheet1 = f.add_sheet('学生', cell_overwrite_ok = True)

这里新建一张“学生”表,cell_overwrite_ok 设置是否可以修改表。

row0 设置首行,colum0 设置首列。值得注意的是,这里是先写入首行,然后在首列中从第二格开始:
执行row0 = ["name", "age", "birth", "hobby"]后:
首行
执行 colum0 = ["A", "B", "C", "D"]
在这里插入图片描述
这个设定和代码的执行顺序无关,即使修改了 rowcolum 的顺序依然如此。

两个 for 循环分别设置首行和首列的字体。

  • 写数据
sheet1.write(3, 4, '2019/12/25')

sheet1 的 3-4 写入 ‘2019/12/25’。
插入数据
可以看出,这里的行、列序号是从 0 开始的。

  • 合并单元格
sheet1.write_merge(6, 6, 1, 3, 'Unknown')

拿此段距离。[6, 6, 1, 3] 表示 “行:6-6, 列:1-3” 合并。不要忘了,序号是从 0 开始的。

2. 读文件 xlrd

读文件我们按功能模块来讲。

首先建好如图所示的表:

读取表
给出完整读取表内容的代码:


import xlrd
file = 'test.xls'

def read_excel():

    wb = xlrd.open_workbook(filename=file)#打开文件
    print(wb.sheet_names())#获取所有表格名字

    sheet = wb.sheet_by_index(0)
    for i in range(sheet.nrows):
        print(sheet.row_values(i))

if __name__ == '__main__':
    read_excel()

效果如下:
读取效果
这里需要注意的有两点,先按下不表:

  • 合并单元格显示效果会和空格一样
  • 日期显示的格式不正确

对代码进行解释:

sheet = wb.sheet_by_index(0)

通过索引获取表格,这里索引序号从 0 开始。

    for i in range(sheet.nrows):
        print(sheet.row_values(i))

按行顺序进行循环打印。

每个循环内sheet.row_values(i)代表取出第 i 行的数据。

按列即:

    for i in range(sheet.nrows):
        print(sheet.col_values(i))

要取出单个单元格数据,有三种方式:

    print(sheet1.cell(1,0).value)#获取表格里的内容,三种方式
    print(sheet1.cell_value(1,0))
    print(sheet1.row(1)[0].value)

在这里插入图片描述
可以取单元格之后,我们来解决上面的两个问题。

首先是合并的单元格:

要取出合并后的单元格的内容,只需将横纵序号都按最小来取,比如图中的打游戏:

在这里插入图片描述
直接取它左上角的单元格,即 (1,3)

然后是日期:

这里涉及到 Python 读取 Excel 中单元格的内容时,返回的 5 种类型:

ctype :
0 empty
1 string
2 number
3 date
4 boolean
5 error

date 的类型为 3 ,可以验证:

date类型
要取出日期的内容,有以下几种方式:

date_value = xlrd.xldate_as_tuple(sheet.cell_value(1,1),wb.datemode)
print(date_value)
print(date(*date_value[:3]))
print(date(*date_value[:3]).strftime('%Y/%m/%d'))

效果如下:
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值