当前位置:脚本大全 > > 正文

python解析excel例子(Python玩转Excel的读写改实例)

时间:2022-01-23 02:37:43类别:脚本大全

python解析excel例子

Python玩转Excel的读写改实例

摘要:

利用xlrd读取excel

先需要在命令行中pip install xlrd;读取xls文件的流程为:

加载文件->选中第几个表格->按先行后列的顺序读

通用demo

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • import xlrd
  • filename = "test.xls"        #文件路径
  • wb = xlrd.open_workbook(filename)  #加载这个xls文件
  • sh = wb.sheet_by_index(0)      #选中第1个表格
  • rows = sh.nrows           #rows为该表格的行数
  • for i in range(1,rows):       #从第二行开始按行读取
  •   title = sh.cell(i,0).value   #取第i+1行,第1列的数据
  • diy功能

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 根据列名获取内容的函数
  • def get_col_index(name,workbook,sheet):
  •   for i in range(sheet.ncols):
  •     name2 = sheet.cell(0,i).value
  •     print(name2)
  •     if name2 == name:
  •       return i
  •   return -1
  • sheet.cell(1,get_col_index("创建时间")).value
  • 再拓展一点:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • sh = wb.sheet_by_name(sheetname)  #通过表格名称选中表格
  • print(wb.sheet_names())       #打印该xls文件的所有表格名称
  • sh.row(i)              #获得第i+1行的所有数据组成的list
  • ncols = sh.ncols          #获得该表格的所有列数
  • sh.row_values(rowx, start_colx=0, end_colx=None)   #获取第rowx+1行的某几列的数据并组成的list
  • sh.col(colx, start_rowx=0, end_rowx=None) #获取第colx+1列的某几行的数据并组成的list
  • sh.cell(i,j).value         #获取第i+1行第j+1列的数据
  • sh.cell(i,j).ctype         #获取第i+1行第j+1列的数据类型
  • 注意date类型

    说起数据类型,补充一点,xlrd读取xls文件单元格的数据类型有五种,数字与类型的对应关系为:

    ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error

    当单元格某个值为date类型时,不加处理输出的是一个浮点数,此时需要判断ctype并进行一次转换:

  • ?
  • 1
  • 2
  • 3
  • 4
  • from xlrd import xldate_as_tuple
  • cell = sh.cell(i,10).ctype
  • if cell.ctype == 3:
  •   date = datetime(*xldate_as_tuple(cell.value, 0))
  • 利用xlwt写exce

    先需要在命令行中pip install xlwt;写xls文件的流程为:

    加载文件->选中第几个表格->按先行后列的顺序读

    通用demo

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • import xlwt
  • file = xlwt.Workbook()   #新建个文件
  • sheet = file.add_sheet('test_sheet0',cell_overwrite_ok=True) #新建个表格,指定表名以及是否可覆盖写
  • sheet.write(i,j,value)   #在第i+1行和第j+1列写value(i、j从0开始)
  • file.save("test_xls.xls"#保存成xls文件并指定文件名
  • 更多功能

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • #设置某列的宽度
  • sheet.col(0).width = 200
  • #写日期
  • style = xlwt.XFStyle()
  • style.num_format_str = 'D-MMM-YY'
  • worksheet.write(0, 0, datetime.datetime.now(), style)
  • #写公式
  • sheet.write(1, 1, xlwt.Formula('SUM(A1,B1)'))
  • #合并单元格的写
  • sheet.write_merge(0, 0, 0, 3, 'First Merge')
  • #ps:
  • #write_merge(x, x + h, y, w + y, value, sytle) x和y表示当前行列,h和w为要合并的行数和列数
  • 更炫酷一点

    既然是写,何不来点style:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • style = xlwt.XFStyle()
  • #修改字体:
  • font = xlwt.Font()       #为样式创建字体
  • font.name = 'Times New Roman'  #字体名称
  • font.bold = True        #黑体
  • font.colour_index = 2      #修改字的颜色
  • font.underline = True      #下划线
  • style.font = font        #使用到样式中
  • sheet.write(0,1,"编号",style)
  • #修改单元格背景色
  • pattern = xlwt.Pattern()
  • pattern.pattern = xlwt.Pattern.SOLID_PATTERN
  • pattern.pattern_fore_colour = 5 #色号,可以在源代码中看到色号和颜色的对应关系
  • style = xlwt.XFStyle()
  • style.pattern = pattern
  • sheet.write(0,2,"编号",style)
  • 利用xlutils修改excel

    修改excel文件的流程为:

    将xlrd加载的xls文件(xlrd对象)复制为xlwt对象,然后用xlwt对象操作excel

    demo

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • import xlrd
  • import pymysql
  • from xlrd import open_workbook
  • from xlutils.copy import copy
  • import xlwt
  • file_name = "test_update.xls"
  • workbook = xlrd.open_workbook(file_name)
  • sheet = wb.sheet_by_index(0)
  • workbook_update = copy(workbook)
  • sheet_update = workbook_update.get_sheet(0)
  • sheet_update.write(i,j,value)
  • workbook_update.save(file_name)
  • 总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对开心学习网的支持。如果你想了解更多相关内容请查看下面相关链接

    原文链接:https://blog.csdn.net/lk7688535/article/details/80986890

    标签:
    上一篇下一篇

    猜您喜欢

    热门推荐