zoukankan      html  css  js  c++  java
  • 利用python中的xlrd和xlwt操作excel

    微信公众号:数据运营人
    本系列为博主的读书学习笔记,如需转载请注明出处。

    当提起数据处理,一般情况下我们都可以用python中的pandas完成,但是当我们发现一些不规则的excel数据,所谓不规则如单元格存在合并等情况,像公司的财务报表数据等,我们可以利用python中的xlrd和xlwt模块对该类数据进行处理。即xlrd是读excel,而xlwt是写excel。

    xlrd打开文件获取sheet根据sheet索引或者名称获取sheet内容获取sheet名称、行数、列数获取指定单元格的内容获取特定单元格的数据内容xlwt

    xlrd

    打开文件
    workbook = xlrd.open_workbook(r'C:/Users/Admin/Desktop/students.xlsx')
    获取sheet
    print(workbook.sheet_names())
    print(workbook.nsheets)

    ['Sheet1', 'Sheet2', 'Sheet3']
    3

    根据sheet索引或者名称获取sheet内容
    sheet2 = workbook.sheet_by_index(0)
    sheet3 = workbook.sheet_by_name('Sheet1')


    获取sheet名称、行数、列数
    print(sheet2.name)
    print(sheet2.nrows)
    print(sheet2.ncols)
    print(sheet3.name)
    print(sheet3.nrows)
    print(sheet3.ncols)

    Sheet1
    28
    22
    Sheet1
    28
    22

    获取指定单元格的内容
    print(sheet3.row_values(0)) # 获取第一行
    print(sheet3.col_values(0)) # 获取第一列
    print(sheet3.cell(21).value)
    print(sheet3.cell_value(11))
    print(sheet3.row(1)[0].value)

    ['竞赛学生及指导教师奖励明细', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
    ['竞赛学生及指导教师奖励明细', '序号', '', 0.0, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '注:在校未毕业学生请提供一卡通账号,离校学生提供建设银行卡号及开户行 在职教师请提供工号,兼职教师若有工号请提供工号及银行卡号和开户行;离职教师请提供银行卡号及开户行', '', '']
    分院
    序号

    获取特定单元格的数据内容
    print(sheet3.cell(20).ctype)
    print(sheet3.cell(11).ctype)
    # 说明 ctype:0 empty, 1 string, 2 number, 3 date, 4 boolean, 5 error

    0
    1

    xlwt

    实现该格式excel的数据的设计

    def set_style(name, height, bold=False):
    style = xlwt.XFStyle() # 初始化样式
    font = xlwt.Font() # 为样式创建字体
    font.name = name # 'Times New Roman'
    font.bold = bold
    font.color_index = 4
    font.height = height
    style.font = font
    return style

    # 写excel
    def write_excel():
    f = xlwt.Workbook() # 创建工作簿
    '''
    创建第一个sheet:
    sheet1
    '''

    sheet1 = f.add_sheet(u'sheet1', cell_overwrite_ok=True# 创建sheet
    row0 = [u'业务'u'状态'u'北京'u'上海'u'广州'u'深圳'u'状态小计'u'合计']
    column0 = [u'机票'u'船票'u'火车票'u'汽车票'u'其它']
    status = [u'预订'u'出票'u'退票'u'业务小计']
    # 生成第一行
    for i in range(0, len(row0)):
    sheet1.write(0, i, row0[i], set_style('Times New Roman'220True))

    # 生成第一列和最后一列(合并4行)
    i, j = 10
    while i < 4 * len(column0) and j < len(column0):
    sheet1.write_merge(i, i + 300, column0[j], set_style('Arial'220True)) # 第一列
    sheet1.write_merge(i, i + 377# 最后一列"合计"
    i += 4
    j += 1

    sheet1.write_merge(212101u'合计', set_style('Times New Roman'220True))
    # 生成第二列
    i = 0
    while i < 4 * len(column0):
    for j in range(0, len(status)):
    sheet1.write(j + i + 11, status[j])
    i += 4

    f.save(r'C:/Users/Admin/Desktop/demo1.csv'# 保存文件

    if __name__ == '__main__':
    write_excel()
  • 相关阅读:
    FPGA中latency与delay概念的区别
    @transactional注解在什么情况下会失效,为什么。
    一个ArrayList在循环过程中删除,会不会出问题,为什么?
    HashMap在高并发下如果没有处理线程安全会有怎样的安全隐患,具体表现是什么
    JVM调优
    正确截取List指定位置的内容
    ArrayList源码解析
    接口和抽象类的区别(JDK1.8)
    Hashtable源码解析
    Kotlin实践记录
  • 原文地址:https://www.cnblogs.com/ly803744/p/10426548.html
Copyright © 2011-2022 走看看