+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2020-03(70)

2020-04(60)

2020-05(24)

2020-06(39)

2020-07(23)

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

发布于2019-10-28 15:40     阅读(304)     评论(0)     点赞(24)     收藏(2)


0

1

2

3

4

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()
  • 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
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

解析:

  • 设置表格样式
    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')
  • 1

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

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

拿此段距离。[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()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

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

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

对代码进行解释:

sheet = wb.sheet_by_index(0)
  • 1

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

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

按行顺序进行循环打印。

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

按列即:

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

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

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

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

首先是合并的单元格:

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

在这里插入图片描述
直接取它左上角的单元格,即 (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'))
  • 1
  • 2
  • 3
  • 4

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

0

1

2

3

4

5



所属网站分类: 技术文章 > 博客

作者:9384vfnv

链接: https://www.pythonheidong.com/blog/article/147054/28d112de17fc4a1d50ce/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

24 0
收藏该文
已收藏

评论内容:(最多支持255个字符)