在主窗口添加一个 导入/导出 的按钮,在细分为导入 和导出 分别执行两个函数的操作,以及选取文件和文件保存位置
#D:\A d盘下建立一个文件夹A,生成或要导入的excel表都会放在这个文件夹下
array1 = ['1', '许佳琪', '男', '19990824', "IS"]
array2 = ['2', 'c', '女', '19980615', 'CX']
array3 = ['3', '张鹏辉', '男', '19990621', 'II']
ayy = [array1, array2, array3]
数据还是ayy数据,然后了解一下各个执行excel的模块
【xlwt#写操作效率高 xlrd#读操作效率高 openpyxl#可进行读写 pandas #处理数据速度快 xlwings还未了解暂不写】【xlwt和xlrd搭配使用,受限高,且有些方法是不弹提示条的】
xlwt生成
【此模块是从0开始计入】
import xlwt
array1 = ['1', '许佳琪', '男', '19990824', "IS"]
array2 = ['2', 'c', '女', '19980615', 'CX']
array3 = ['3', '张鹏辉', '男', '19990621', 'II']
ayy = [array1, array2, array3]
path = 'D:\\A\\test-xlwt.xlsx'
xlsx=xlwt.Workbook()#建立工作簿
sheet=xlsx.add_sheet('test_sheet1')#设置sheet名字【新设置的sheet会在后面逐加】
sheet.write(0,0,'工号')
sheet.write(0,1,'姓名')
sheet.write(0,2,'性别')
sheet.write(0,3,'出生')
sheet.write(0,4,'职位')
for i in range(len(ayy)):#控制要传入的行数
for j in range(5):#xlxs表的列
sheet.write(i+1,j,ayy[i][j])
xlsx.save(path)#保存
print('创建|覆盖 成功')
【sheet.write(i+1,j,ayy[i][j])这里的i+1 是因为第0行放入了列标题,数据需要从第1行放入】
xlrd读取
【注意该模块不能访问自己创建的xlsx表,这里访问的是用xlwt建成的表】【cell是单元格】 【此模块是从0开始计入】
获取指定表名【将此表作为要操作的表】
sheetName=dr.sheets()[0]# print(dr.sheets(),'\n',type(dr.sheets()),'\n',sheetName,'\n',type(sheetName))
[Sheet 0:<test_sheet1>]
<class 'list'> Sheet
0:<test_sheet1>
<class 'xlrd.sheet.Sheet'>
获取表名
sheetName1=dr.sheet_names()#【返回所有一个列表,由str组成】
print(sheetName1,type(sheetName1),sheetName1[0],type(sheetName1))
['test_sheet1']
<class 'list'>
test_sheet1
<class 'list'>
print('已填写excel,现执行读取操作')
import xlrd
path = 'D:\\A\\test-xlwt.xlsx'#【该表是xlwt创建的】
#path = 'D:\\A\\test1.xlsx'【自己创建的xlsx表不能读取】
dr=xlrd.open_workbook(path)
sheetName=dr.sheets()[0]#获取指定表名【将此表作为要操作的表】
print(dr.sheets(),type(dr.sheets()),sheetName,type(sheetName))
rows=sheetName.nrows#获取总行数
cols=sheetName.ncols#获取总列数
print(sheetName.cell(0,0).value)#获取指定单元格内容
print(sheetName.row(1)[0].value)#第2行第一列
for i in range(rows):#控制行数
for j in range(cols):#控制列数
print(sheetName.cell_value(i,j),end='\t')
print()
print('读取完成')
读取行print(sheetName.row_values(0))
print(sheetName.cell(1,0).ctype)#返回excel的类型[0 empty【空值】,1 str ,2 num,3 date,4 boolean,5 error]
openpyxl生成
【注意这里我用的from的导入方式】【注意close】【单元格从1开始计算】
ws=wb.active【将第一张sheet设为要执行操作的表】
ws.title='new TiTle'【设置第一张表的sheet】
wb.creat_sheet('new')【是打开表后追加一张sheet】
value是转换xlsx类型与str类型的函数
from openpyxl import Workbook
array1 = ['1', '许佳琪', '男', '19990824', "IS"]
array2 = ['2', 'c', '女', '19980615', 'CX']
array3 = ['3', '张鹏辉', '男', '19990621', 'II']
ayy = [array1, array2, array3]
path = 'D:\\A\\test1.xlsx'
wb=Workbook()
ws=wb.active#将该表设置为要执行操作的表
ws.title='new TiTle'#设置sheet
titlecols=['工号','姓名','性别','出生','部门']
for i in range(len(titlecols)):
ws.cell(1,i+1).value=titlecols[i]
for i in range(len(ayy)):
for j in range(len(array1)):
ws.cell(i+2,j+1).value=ayy[i][j]#赋值
wb.save(path)
wb.close()
print('创建|覆盖 成功')
#打开该文件在执行该程序会 报错PermissionError: [Errno 13] Permission denied
#zipfile.BadZipFile: File is not a zip file没有写close【删除已经创建的xlsx,加上close】
openpyxl读取
- 读取有两种方式,一个open,还有一个load_workbook
- wb.workssheets【返回由str组成的list,并且选中那张表为要执行操作的表】
import openpyxl#读取
path = 'D:\\A\\test1.xlsx'
wb=openpyxl.load_workbook(path)
c=wb.worksheets[0]#获取第一张表的标题
row=c.max_row
col=c.max_column
print('总行数{},总列数{}'.format(row,col))#行与列
for i in range(row):
for j in range(col):
print(c.cell(i+1,j+1).value,end="\t")#.value是将带类型的值转化为可利用的值
print()
wb.close()
print('读取成功')
获取的数据很乱,可以利用字符串的对齐方式让其对齐
v=c.cell(i+1,j+1).value#.value是将带类型的值转化为可利用的值
print(v.ljust(10,' '),end='')
对出来的是这样子的
能看出来,第二行对齐的不理想,因为汉字字符比字母占的多
中篇说pandas【第一次写完没保存,可能会遗漏细节】