zoukankan      html  css  js  c++  java
  • Python3 读、写Excel文件

    首先,简单介绍一下EXECL中工作簿和工作表的区别:

    工作簿的英文是BOOK(WORKBOOK),工作表的英文是SHEET(WORKSHEET)。

    • 一个工作簿就是一个独立的文件
    • 一个工作簿里面可以有1个或者多个工作表
    • 工作簿是工作表的集合

    1:使用python实现对Excel文件的读写,首先需要安装专用的模块(可以自己编写)xlrd,xlwt模块

    2:读取excel数据(注意事项:sheet编号,行号,列号都是从索引0开始)

     1 import xlrd
     2 
     3 # 设置路径
     4 path = 'E:/input.xlsx'
     5 # 打开execl
     6 workbook = xlrd.open_workbook(path)
     7 
     8 # 输出Excel文件中所有sheet的名字
     9 print(workbook.sheet_names())
    10 
    11 # 根据sheet索引或者名称获取sheet内容
    12 Data_sheet = workbook.sheets()[0]  # 通过索引获取
    13 # Data_sheet = workbook.sheet_by_index(0)  # 通过索引获取
    14 # Data_sheet = workbook.sheet_by_name(u'名称')  # 通过名称获取
    15 
    16 
    17 print(Data_sheet.name)  # 获取sheet名称
    18 rowNum = Data_sheet.nrows  # sheet行数
    19 colNum = Data_sheet.ncols  # sheet列数
    20 
    21 # 获取所有单元格的内容
    22 list = []
    23 for i in range(rowNum):
    24     rowlist = []
    25     for j in range(colNum):
    26         rowlist.append(Data_sheet.cell_value(i, j))
    27     list.append(rowlist)
    28 # 输出所有单元格的内容
    29 for i in range(rowNum):
    30     for j in range(colNum):
    31         print(list[i][j], '		', end="")
    32     print()
    33 
    34 # 获取整行和整列的值(列表)
    35 rows = Data_sheet.row_values(0)  # 获取第一行内容
    36 cols = Data_sheet.col_values(1)  # 获取第二列内容
    37 # print (rows)
    38 # print (cols)
    39 
    40 # 获取单元格内容
    41 cell_A1 = Data_sheet.cell(0, 0).value
    42 cell_B1 = Data_sheet.row(0)[1].value  # 使用行索引
    43 cell_C1 = Data_sheet.cell(0, 2).value
    44 cell_D2 = Data_sheet.col(3)[1].value  # 使用列索引
    45 print(cell_A1, cell_B1, cell_C1, cell_D2)
    46 
    47 # 获取单元格内容的数据类型
    48 # ctype:0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
    49 print('cell(0,0)数据类型:', Data_sheet.cell(0, 0).ctype)
    50 print('cell(1,0)数据类型:', Data_sheet.cell(1, 0).ctype)
    51 print('cell(1,1)数据类型:', Data_sheet.cell(1, 1).ctype)
    52 print('cell(1,2)数据类型:', Data_sheet.cell(1, 2).ctype)
    53 
    54 # 获取单元格内容为日期的数据
    55 date_value = xlrd.xldate_as_tuple(Data_sheet.cell_value(1,0),workbook.datemode)
    56 print(type(date_value), date_value)
    57 print('%d:%d:%d' % (date_value[0:3]))

     3:创建excel并写入数据

    import xlwt
    
    
    def set_style(name, height, bold=False):
        style = xlwt.XFStyle()   # 初始化样式
        font = xlwt.Font()       # 为样式创建字体
        font.name = name
        font.bold = bold
        font.color_index = 4
        font.height = height
    
        style.font = font
        return style
    
    
    def write_excel(path):
        # 创建工作簿
        workbook = xlwt.Workbook(encoding='utf-8')
        # 创建sheet
        data_sheet = workbook.add_sheet('demo')
        row0 = [u'字段名称', u'大致时段', 'CRNTI', 'CELL-ID']
        row1 = [u'测试', '15:50:33-15:52:14', 22706, 4190202]
        # 生成第一行和第二行
        for i in range(len(row0)):
            data_sheet.write(0, i, row0[i], set_style('Times New Roman', 220, True))
            data_sheet.write(1, i, row1[i], set_style('Times New Roman', 220, True))
    
        # 保存文件
        # workbook.save('demo.xls')
        workbook.save(path)
    
    
    if __name__ == '__main__':
        # 设置路径
        path = 'E:/demo.xls'
        write_excel(path)
        print(u'创建demo.xls文件成功')

     

    再看一个例子:

    转载:Ryan in C++

    基本的write函数接口很简单:

    • 新建一个excel文件:                                                 file = xlwt.Workbook() (注意这里的Workbook首字母是大写)
    • 新建一个sheet:                                                        table = file.add_sheet('sheet_name')
    • 写入数据table.write(行,列,value):                            table.write(0,0,'test')
    • 如果是写入中文,则要用u'汉字'的形式。比如:       table.write(0,0, u'汉字')
    • 合并单元格:                                                             table.write_merge(x, x + m, y, y + n, string, style)
    • x表示行,y表示列,m表示跨行个数,n表示跨列个数,string表示要写入的单元格内容,style表示单元格样式
     1 """
     2 设置单元格样式
     3 """
     4 import xlwt
     5 
     6 
     7 def set_style(font_name, font_height, bold=False):
     8     style = xlwt.XFStyle()  # 初始化样式
     9 
    10     font = xlwt.Font()  # 为样式创建字体
    11     font.name = font_name  # 'Times New Roman'
    12     font.bold = bold
    13     font.color_index = 4
    14     font.height = font_height
    15 
    16     borders = xlwt.Borders()
    17     borders.left = 6
    18     borders.right = 6
    19     borders.top = 6
    20     borders.bottom = 6
    21 
    22     style.font = font
    23     style.borders = borders
    24 
    25     return style
    26 
    27 
    28 # 写excel
    29 def write_excel(output_path):
    30     f = xlwt.Workbook() # 创建工作簿
    31     '''
    32     创建第一个sheet:
    33         sheet1
    34     '''
    35     sheet1 = f.add_sheet(u'sheet1',cell_overwrite_ok=True)  # 创建sheet
    36     row0 = [u'业务',u'状态',u'北京',u'上海',u'广州',u'深圳',u'状态小计',u'合计']
    37     column0 = [u'机票',u'船票',u'火车票',u'汽车票',u'其它']
    38     status = [u'预订',u'出票',u'退票',u'业务小计']
    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(output_path)
    61 
    62 
    63 if __name__ == '__main__':
    64     write_excel('E:/demo.xls')  # 保存文件.这里如果是.xlsx的话会打不开。

    注意:如果对一个单元格重复操作,会引发error。所以在打开时加cell_overwrite_ok=True解决

    table = file.add_sheet('sheet name',cell_overwrite_ok=True)

    生成的demo.xls效果如下:

  • 相关阅读:
    java中构造器的使用
    Java包装类
    Linux TOP命令 按内存占用排序和按CPU占用排序 分类: 测试 ubuntu 虚拟机 2013-11-06 14:38 396人阅读 评论(0) 收藏
    多态 分发 分类: python 小练习 divide into python 2013-11-05 19:11 394人阅读 评论(0) 收藏
    #小练习 输出模块中方法及其docstring 分类: python 小练习 divide into python 2013-11-05 18:17 451人阅读 评论(0) 收藏
    #小练习 重定向与sys.stdout对象 分类: python 小练习 2013-11-05 16:10 437人阅读 评论(0) 收藏
    #小练习 类与文件对象 分类: python 小练习 2013-11-05 15:39 343人阅读 评论(0) 收藏
    #小练习类与文件对象 分类: python 小练习 2013-11-05 12:09 341人阅读 评论(0) 收藏
    if ...__name__使用技巧总结 分类: python基础学习 python Module python 2013-11-01 14:51 262人阅读 评论(0) 收藏
    使用urllib2解析html内容,并正常显示中文的方法 分类: python Module 2013-10-31 17:30 294人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/fuqia/p/8989712.html
Copyright © 2011-2022 走看看