开发前置环境
安装Python(如Python 3.7)安装Office办公软件(或WPS Office)安装开发工具(如PyCharm,下载地址:https://www.jetbrains.com/pycharm/download)1 xlrd模块读取Excelxlrd为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:
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")
执行效果:
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")
执行效果:
建表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数据所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)