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

Python 3使用xlrd+xlwt读取写入Excel数据,第1张

概述开发前置环境安装Python(如Python3.7)安装Office办公软件(或WPSOffice)安装开发工具(如PyCharm,下载地址:https://www.jetbrains.com/pycharm/download)1xlrd模块读取Excelxlrd为Python第三方模块,用来读取Excel表格数据(仅支持.xls格式)。1.1xlrd常用函数importxlrd#读取E

开发前置环境

安装Python(如Python 3.7)安装Office办公软件(或WPS Office)安装开发工具(如PyCharm,下载地址:https://www.jetbrains.com/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, "2019年货币兑换表")# 写入货币数据data = (("Date", "英镑", "人民币", "港币", "日元", "美元"),        ("01/01/2019", 8.722551, 1, 0.877885, 0.062722, 6.8759),        ("02/01/2019", 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("2021-07-01_172956.bmp", 0, 0)# 第四步:保存wb.save("2019-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, "2019年货币兑换表", TitleStyle) # 合并单元格,1~2行,1~6列# 写入货币数据data = (("Date", "英镑", "人民币", "港币", "日元", "美元"),        ("01/01/2019", 8.722551, 1, 0.877885, 0.062722, 6.8759),        ("02/01/2019", 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("2021-07-01_172956.bmp", 0, 0)# 第四步:保存wb.save("2019-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=host        self.port=port        self.user=user        self.passwd=passwd        self.db=db        self.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)            self.conn.commit()            self.closeconnection()        except Exception:            print(Exception)    #批量插入    def executemanydata(self,sql,vals):        try:            self.connection()            self.cur.executemany(sql,vals)            self.conn.commit()            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 # 选项A        obj.optionB = sheet.cell(i, 4).value # 选项B        obj.optionC = sheet.cell(i, 5).value # 选项C        obj.optionD = sheet.cell(i, 6).value # 选项D        obj.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)

执行效果:

总结

以上是内存溢出为你收集整理的Python 3使用xlrd+xlwt读取/写入Excel数据全部内容,希望文章能够帮你解决Python 3使用xlrd+xlwt读取/写入Excel数据所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1185759.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存