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效果如下:

  • 相关阅读:
    learnyou 相关网站
    hdu 3038 How Many Answers Are Wrong
    hdu 3047 Zjnu Stadium 并查集高级应用
    poj 1703 Find them, Catch them
    poj 1182 食物链 (带关系的并查集)
    hdu 1233 还是畅通工程
    hdu 1325 Is It A Tree?
    hdu 1856 More is better
    hdu 1272 小希的迷宫
    POJ – 2524 Ubiquitous Religions
  • 原文地址:https://www.cnblogs.com/fuqia/p/8989712.html
Copyright © 2011-2022 走看看