python建立简单的人事管理系统(六)上

 在主窗口添加一个  导入/导出  的按钮,在细分为导入 和导出 分别执行两个函数的操作,以及选取文件和文件保存位置

#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【第一次写完没保存,可能会遗漏细节】

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值