zoukankan      html  css  js  c++  java
  • Python中xlrd和xlwt模块读写Excel的方法

    本文主要介绍可操作excel文件的xlrd、xlwt模块。其中xlrd模块实现对excel文件内容读取,xlwt模块实现对excel文件的写入。

    着重掌握读取操作,因为实际工作中读取excel用得比较多,写操作几乎不怎么用。

    python读excel—xlrd

    测试使用excel文档名称为result.xls,内容如下:

     

    1、  打开excel文件并获取所有sheet的名称,以及根据下标获取sheet名称

    1     #打开excel文件
    2     workbook = xlrd.open_workbook(r'C:UsersAdministrator.USER-20170604INDesktop
    esult.xls')
    3     #获取excel中所有的sheet页
    4     sheet_names = workbook.sheet_names()
    5     print(sheet_names)
    6     #获取第一个sheet的名称
    7     print(sheet_names[0])

    2、  根据sheet索引或者名称获取sheet内容,并获取sheet名称、行数、列数

    1     #根据sheet索引或者名称获取sheet内容
    2     sheet1 = workbook.sheet_by_index(0)  #sheet索引从0开始
    3     sheet1 = workbook.sheet_by_name('Sheet1')
    4     
    5     #打印sheet1的名称,行数,列数
    6     print(sheet1.name, sheet1.nrows, sheet1.ncols)

    3、根据sheet名称获取整行和整列的值

    1     #获取整行和整列的值(数组)
    2     rows = sheet1.row_values(3)  #获取第四行的内容
    3     cols = sheet1.col_values(2)  #获取第三列的内容
    4     print(rows)
    5     print(cols)

    4、获取指定单元格的内容

    1     #获取单元格内容
    2     print(sheet1.cell(1,0).value)
    3     print(sheet1.cell_value(1,0))
    4     print(sheet1.row(1)[0].value)

    5、获取单元格内容的数据类型

    1     #获取单元格内容的数据类型
    2     print(sheet1.cell(7,4).ctype)

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

    6、获取单元内容为日期类型的方式

    使用xlrd的xldate_as_tuple处理date格式,先判断表格的ctype=3时xlrd才能执行操作,如下:

    1 if (sheet.cell(row,col).ctype == 3):
    2   date_value = xlrd.xldate_as_tuple(sheet.cell_value(1,2),workbook.datemode)
    3   date_tmp = date(*date_value[:3]).strftime('%Y/%m/%d')

    7、获取合并单元格的内容

    读取合并单元格时,只有合并单元格的第一个cell是有值的,其他cell都是空的。如果希望知道哪些是合并单元格,需要在读取文件的时候需要将formatting_info参数设置为True,默认是False。

     1     workbook = xlrd.open_workbook(r'C:UsersAdministrator.USER-20170604INDesktop
    esult.xls', formatting_info = True)
     2     sheet1 = workbook.sheet_by_name('Sheet1')
     3     print(sheet1.merged_cells)
     4     
     5     merge = []
     6     for rlow, rhigh, clow, chigh in sheet1.merged_cells:
     7         merge.append([rlow, clow])
     8     print(merge)
     9     for index in merge:
    10         print(sheet1.cell_value(index[0], index[1]))

     运行结果如下:

    merged_cell返回的四个参数的含义是:(row,row_range,col,col_range),其中[row,row_range)包括row,不包括row_range,col也是一样,即(1,3,4,5)的含义是:在第5列,第2行到第3行合并,(7,8,2,5)的含义是:在第8行,第3列到第5列合并。注意这些数字都是下标,换成实际excel行数列数时要加1。

     python写excel——xlwt

    下面的sheet1是即将要用xlwt实现的东西:

    代码如下:

     1 '''
     2 设置单元格样式
     3 '''
     4  
     5 def set_style(name,height,bold=False):
     6   style = xlwt.XFStyle() # 初始化样式
     7  
     8   font = xlwt.Font() # 为样式创建字体
     9   font.name = name # 'Times New Roman'
    10   font.bold = bold
    11   font.color_index = 4
    12   font.height = height
    13  
    14   # borders= xlwt.Borders()
    15   # borders.left= 6
    16   # borders.right= 6
    17   # borders.top= 6
    18   # borders.bottom= 6
    19  
    20   style.font = font
    21   # style.borders = borders
    22  
    23   return style
    24  
    25  
    26 #写excel
    27 def write_excel():
    28   f = xlwt.Workbook() #创建工作簿
    29  
    30   '''
    31   创建第一个sheet:
    32     sheet1
    33   '''
    34   sheet1 = f.add_sheet(u'sheet1',cell_overwrite_ok=True) #创建sheet
    35   row0 = [u'业务',u'状态',u'北京',u'上海',u'广州',u'深圳',u'状态小计',u'合计']
    36   column0 = [u'机票',u'船票',u'火车票',u'汽车票',u'其它']
    37   status = [u'预订',u'出票',u'退票',u'业务小计']
    38  
    39   #生成第一行
    40   for i in range(0,len(row0)):
    41     sheet1.write(0,i,row0[i],set_style('Times New Roman',220,True))
    42  
    43   #生成第一列和最后一列(合并4行)
    44   i, j = 1, 0
    45   while i < 4*len(column0) and j < len(column0):
    46     sheet1.write_merge(i,i+3,0,0,column0[j],set_style('Arial',220,True)) #第一列
    47     sheet1.write_merge(i,i+3,7,7) #最后一列"合计"
    48     i += 4
    49     j += 1
    50  
    51   sheet1.write_merge(21,21,0,1,u'合计',set_style('Times New Roman',220,True))
    52  
    53   #生成第二列
    54   i = 0
    55   while i < 4*len(column0):
    56     for j in range(0,len(status)):
    57       sheet1.write(j+i+1,1,status[j])
    58     i += 4
    59  
    60   f.save('demo1.xlsx') #保存文件
    61  
    62 if __name__ == '__main__':
    63   #generate_workbook()
    64   #read_excel()
    65   write_excel()

    解释一下write_merge方法:

    write_merge(x, x + m, y, w + n, string, sytle)

    x表示行,y表示列,m表示跨行个数,n表示跨列个数,string表示要写入的单元格内容,style表示单元格样式。其中,x,y,w,h,都是以0开始计算的。

    这个和xlrd中的读合并单元格的不太一样。

    如上述:sheet1.write_merge(21,21,0,1,u'合计',set_style('Times New Roman',220,True))

    即在22行合并第1,2列,合并后的单元格内容为"合计",并设置了style。

    如果需要创建多个sheet,则只要f.add_sheet即可。

    如在上述write_excel函数里f.save('demo1.xlsx') 这句之前再创建一个sheet2,效果如下:

    代码如下:

     1 '''
     2   创建第二个sheet:
     3     sheet2
     4   '''
     5   sheet2 = f.add_sheet(u'sheet2',cell_overwrite_ok=True) #创建sheet2
     6   row0 = [u'姓名',u'年龄',u'出生日期',u'爱好',u'关系']
     7   column0 = [u'小杰',u'小胖',u'小明',u'大神',u'大仙',u'小敏',u'无名']
     8  
     9   #生成第一行
    10   for i in range(0,len(row0)):
    11     sheet2.write(0,i,row0[i],set_style('Times New Roman',220,True))
    12  
    13   #生成第一列
    14   for i in range(0,len(column0)):
    15     sheet2.write(i+1,0,column0[i],set_style('Times New Roman',220))
    16  
    17   sheet2.write(1,2,'1991/11/11')
    18   sheet2.write_merge(7,7,2,4,u'暂无') #合并列单元格
    19   sheet2.write_merge(1,2,4,4,u'好朋友') #合并行单元格
    20    
    21   f.save('demo1.xlsx') #保存文件

    参考资料:python中使用xlrd、xlwd操作excel表格详解

  • 相关阅读:
    webpack学习笔记--配置总结
    webpack学习笔记--多种配置类型
    webpack学习笔记--整体配置结构
    webpack学习笔记--其它配置项
    webpack学习笔记--配置devServer
    webpack学习笔记--配置plugins
    webpack学习笔记--配置resolve
    webpack学习笔记--配置module
    webpack学习笔记--配置output
    webpack学习笔记--配置entry
  • 原文地址:https://www.cnblogs.com/mgzc-1508873480/p/8976989.html
Copyright © 2011-2022 走看看