1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Python 3使用xlrd+xlwt读取/写入Excel数据

Python 3使用xlrd+xlwt读取/写入Excel数据

时间:2021-07-19 03:43:08

相关推荐

Python 3使用xlrd+xlwt读取/写入Excel数据

开发前置环境

安装Python(如Python 3.7)安装Office办公软件(或WPS Office)安装开发工具(如PyCharm,下载地址:/pycharm/download)

1 xlrd模块读取Excel

xlrd为Python第三方模块,用来读取Excel表格数据(仅支持.xls格式)。

1.1 xlrd常用函数

import xlrd# 读取Excel文件data = xlrd.open_workbook("data1.xls")# print(data.sheet_loaded(0)) # 加载索引为0的工作表 True# data.unload_sheet(0) # 卸载# print(data.sheet_loaded(0)) # 未被加载,False# print(data.sheet_loaded(1)) # Trueprint(data.sheets()) # 获取全部sheet [Sheet 0:<Sheet1>, Sheet 1:<Sheet2>, Sheet 2:<Sheet3>]print(data.sheets()[0]) # 获取指定索引的工作表对象 Sheet 0:<Sheet1>print(data.sheet_by_index(0)) # 根据索引获取工作表 Sheet 0:<Sheet1>print(data.sheet_by_name('Sheet1')) # 根据名字sheetname(区分大小写)获取工作表 Sheet 0:<Sheet1>print(data.sheet_names()) # 获取所有工作表的name ['Sheet1', 'Sheet2', 'Sheet3']# 查看共有多少个工作表print(len(data.sheet_names())) # 返回所有工作表的名称组成的list的长度 3print(data.nsheets) # 返回excel工作表的数量 3

data1.xls——Sheet1:

data1.xls——Sheet2:

1.2 xlrd操作Excel行

import xlrddata = xlrd.open_workbook("data1.xls")# 操作excel行sheet1 = data.sheet_by_index(0) # 获取第一个工作表print(sheet1.nrows) # 获取sheet下的有效行数 11sheet2 = data.sheet_by_index(1) # 获取第2个工作表print(sheet2.nrows) # 获取sheet下的有效行数 10print(sheet1.row(0)) # 输出第一行数据# [text:'1月份销售额明细表', empty:'', empty:'', empty:'', empty:'', empty:'', empty:'']print(sheet1.row(1)) # 输出第2行数据,返回该行单元格对象组成的列表# [text:'日期', text:'货号', text:'颜色', text:'尺码', text:'原价', text:'折扣', text:'备注']print(sheet1.row_types(1)) # 获取单元格的数据类型,返回指定行数据的数据类型# (xlrd单元格数据类型表示:0:empty,1:string,2:number,3:date,4:boolean,5:error)# array('B', [1, 1, 1, 1, 1, 1, 1])print(sheet1.row(1)[2]) # 获取单元格的数据类型 text:'颜色'print(sheet1.row(1)[2].value) # 获取单元格value 颜色print(sheet1.row_values(1)) # 得到指定行单元格的值 ['日期', '货号', '颜色', '尺码', '原价', '折扣', '备注']print(sheet1.row_len(1)) # 得到单元格的长度 7

1.3 xlrd操作Excel列

import xlrddata = xlrd.open_workbook("data1.xls")# 操作excel列sheet1 = data.sheet_by_index(0) # 获取第一个工作表print(sheet1.ncols) # 获取工作表有效列数print(sheet1.col(1)) # 该列单元格对象组成的列表# [empty:'', text:'货号', text:'X0001', text:'X0002', text:'X0003', text:'X0004', text:'X0005', text:'X0006', text:'X0007', text:'X0008', text:'X0009']print(sheet1.col(1)[2]) # text:'X0001'print(sheet1.col(1)[2].value) # X0001print(sheet1.col_values(1)) # 返回该列所有单元格的value组成的列表# ['', '货号', 'X0001', 'X0002', 'X0003', 'X0004', 'X0005', 'X0006', 'X0007', 'X0008', 'X0009']print(sheet1.col_types(1)) # 获取该列单元格的数据类型 [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

1.4 xlrd操作Excel单元格

import xlrddata = xlrd.open_workbook("data1.xls")# 操作excel单元格sheet1 = data.sheet_by_index(0) # 获取第一个工作表print(sheet1.cell(1,2)) # text:'颜色'# 获取单元格数据类型print(sheet1.cell_type(1,2)) # 1print(sheet1.cell(1,2).ctype) # 1# 获取单元格的值print(sheet1.cell(1,2).value) # 获取第二行,第三列单元格的值 颜色print(sheet1.cell_value(1,2)) # 颜色

2 xlwt写入Excel

xlwt为Python第三方模块,用来写入Excel表格数据(仅支持.xls格式)。

2.1 xlwt写入Excel步骤

创建工作簿创建工作表填充工作表内容保存文件

import xlwt# 第一步:创建工作簿wb = xlwt.Workbook()# 第二步:创建工作表ws = wb.add_sheet("CNY")# 第三步:填充数据ws.write_merge(0, 1, 0, 5, "货币兑换表")# 写入货币数据data = (("Date", "英镑", "人民币", "港币", "日元", "美元"),("01/01/", 8.722551, 1, 0.877885, 0.062722, 6.8759),("02/01/", 8.634922, 1, 0.875731, 0.062773, 6.8601))for i,item in enumerate(data):for j,val in enumerate(item):ws.write(i+2, j, val)# 创建第二个工作表wsImage = wb.add_sheet("image")# 写入图片wsImage.insert_bitmap("-07-01_172956.bmp", 0, 0)# 第四步:保存wb.save("-CNY.xls")

执行效果:

2.2 写入格式化(添加样式)

import xlwttitleStyle = xlwt.XFStyle() # 初始化样式titleFont = xlwt.Font()titleFont.name = "宋体"titleFont.bold = True # 加粗titleFont.height = 11*20 # 字号titleFont.colour_index = 0x08 # 字体颜色titleStyle.font = titleFont# 单元格对齐方式cellAlign = xlwt.Alignment()cellAlign.horz = 0x02 # 水平居中cellAlign.vert = 0x01 # 垂直居中titleStyle.alignment = cellAlign# 边框borders = xlwt.Borders()borders.right = xlwt.Borders.DASHEDborders.bottom = xlwt.Borders.DOTTEDtitleStyle.borders = borders# 背景颜色dataStyle = xlwt.XFStyle()bgColor = xlwt.Pattern()bgColor.pattern = xlwt.Pattern.SOLID_PATTERNbgColor.pattern_fore_colour = 22 # 背景颜色dataStyle.pattern = bgColor# 第一步:创建工作簿wb = xlwt.Workbook()# 第二步:创建工作表ws = wb.add_sheet("CNY")# 第三步:填充数据ws.write_merge(0, 1, 0, 5, "货币兑换表", titleStyle) # 合并单元格,1~2行,1~6列# 写入货币数据data = (("Date", "英镑", "人民币", "港币", "日元", "美元"),("01/01/", 8.722551, 1, 0.877885, 0.062722, 6.8759),("02/01/", 8.634922, 1, 0.875731, 0.062773, 6.8601))for i,item in enumerate(data):for j,val in enumerate(item):if j==0:ws.write(i+2, j, val, dataStyle)else:ws.write(i+2, j, val)# 创建第二个工作表wsImage = wb.add_sheet("image")# 写入图片wsImage.insert_bitmap("-07-01_172956.bmp", 0, 0)# 第四步:保存wb.save("-CNY.xls")

执行效果:

3. 实战:基于xlrd模块实现考试系统题库管理

3.1 Excel导入试题到数据库的操作步骤

通过xlrd模块读取Excel数据通过pymysql模块连接数据库组装数据、执行插入操作关闭数据库连接

建表sql:

DROP TABLE IF EXISTS `question`;CREATE TABLE `question` (`id` int(11) NOT NULL AUTO_INCREMENT,`subject` varchar(255) DEFAULT NULL COMMENT '题目',`questionType` varchar(255) DEFAULT NULL COMMENT '题型',`optionA` varchar(255) DEFAULT NULL COMMENT '选项A',`optionB` varchar(255) DEFAULT NULL COMMENT '选项B',`optionC` varchar(255) DEFAULT NULL COMMENT '选项C',`optionD` varchar(255) DEFAULT NULL COMMENT '选项D',`score` int(11) DEFAULT NULL COMMENT '分值',`answer` varchar(255) DEFAULT NULL COMMENT '正确答案',PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8;

mysqlhelper.py:

import pymysqlclass dbhelper():def __init__(self,host,port,user,passwd,db,charset="utf8"):self.host=hostself.port=portself.user=userself.passwd=passwdself.db=dbself.charset=charset#创建一个链接def connection(self):#1. 创建连接self.conn = pymysql.connect(host=self.host, port=self.port, user=self.user, passwd=self.passwd, db=self.db,charset=self.charset)#2. 创建游标self.cur = self.conn.cursor()#关闭链接def closeconnection(self):self.cur.close()self.conn.close()#查询一条数据def getonedata(self,sql):try:self.connection()self.cur.execute(sql)result=self.cur.fetchone()self.closeconnection()except Exception:print(Exception)return result#查询多条数据def getalldata(self,sql):try:self.connection()self.cur.execute(sql)result=self.cur.fetchall()self.closeconnection()except Exception:print(Exception)return result#添加/修改/删除def executedata(self,sql):try:self.connection()self.cur.execute(sql)mit()self.closeconnection()except Exception:print(Exception)#批量插入def executemanydata(self,sql,vals):try:self.connection()self.cur.executemany(sql,vals)mit()self.closeconnection()except Exception as e:print(e)

data2.xls:

excelproject.py:

import xlrddata = xlrd.open_workbook("data2.xls")sheet = data.sheet_by_index(0) # 获取到工作表questionList = [] # 构建试题列表# 试题类class Question:passfor i in range(sheet.nrows):if i>1:obj = Question() # 构建试题对象obj.subject = sheet.cell(i, 1).value # 题目obj.questionType = sheet.cell(i, 2).value # 题型obj.optionA = sheet.cell(i, 3).value # 选项Aobj.optionB = sheet.cell(i, 4).value # 选项Bobj.optionC = sheet.cell(i, 5).value # 选项Cobj.optionD = sheet.cell(i, 6).value # 选项Dobj.score = sheet.cell(i, 7).value # 分值obj.answer = sheet.cell(i, 8).value # 正确答案questionList.append(obj)print(questionList)# 导入操作 pymysql pip installfrom mysqlhelper import *# 1.连接到数据库db = dbhelper('127.0.0.1', 3306, "root", "123456", "test")# 插入语句sql = "insert into question(subject, questionType, optionA, optionB, optionC, optionD, score, answer) values (%s, %s, %s, %s, %s, %s, %s, %s)"val = [] # 空列表来存储元组for item in questionList:val.append((item.subject, item.questionType, item.optionA, item.optionB, item.optionC, item.optionD, item.score, item.answer))#print(val)db.executemanydata(sql, val)

执行效果:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。