美文网首页
Python操作Excel

Python操作Excel

作者: 炸鸡翅_ | 来源:发表于2017-04-24 21:49 被阅读0次

    前言

    因为工作上的需要,最近经常用Python对报表做Excel导入导出,特此做个笔记,方便日后查看。

    首先我选择了Python-Excel下的xlrd和xlwt。需要注意的是,xlwt只支持生成xls,暂时还不支持xlsx。


    安装

    pip install xlrd
    pip install xlwt
    

    官方文档

    https://github.com/python-excel/tutorial/raw/master/python-excel.pdf


    读取Excel - xlrd

    打开表格,获取总行数
    xlrd.Book.encoding = "utf8" #设置编码
    data = xlrd.open_workbook(file_path)
    table = data.sheet_by_index(0) #取第一张工作簿
    rows_count = table.nrows #取总行数
    
    方法一
    row_data = table.row_values(0)
    cell_data = row_data[0]  #取第0行第0列的值
    
    方法二
    table.cell(1, 1).value  #取第1行第1列的值
    

    读取主要是用到这两个方法,我想到就继续补充,更多用法请查阅官方文档


    生成Excel - xlwt

    新建文档和工作簿对象
    workbook = xlwt.Workbook()
    sheet = workbook.add_sheet('sheet1', cell_overwrite_ok=True)
    
    写入数据
    sheet.row(row_index).write(col_index, u'这是一个测试')
    sheet.write(row_index, col_index, u'这也是一个测试')
    
    合并单元格
    sheet.write_merge(row_1, row_2, col_1, col2, u'我是一个合并的单元格'))  
    #这个参数一开始我弄错了,要注意
    
    表格样式

    表格样式设置有XFStyle和easyxf两种方式

    #XFStyle方式
    borders = Borders()
    borders.left = Borders.THICK
    borders.right = Borders.THICK
    borders.top = Borders.THICK
    borders.bottom = Borders.THICK
    
    pattern = Pattern()
    pattern.pattern = Pattern.SOLID_PATTERN
    pattern.pattern_fore_colour = 0x0A
    
    style = XFStyle()
    style.num_format_str='YYYY-MM-DD'
    style.font = fnt
    style.borders = borders
    style.pattern = pattern
    sheet.write_merge(row_1, row_2, col_1, col2, u'我是一个单元格', style)
    
    #easyxf方式,可设置属性、键和值可以查看官方文档
    #个人感觉写起来代码更少,更舒服
    sheet.write_merge(row_1, row_2, col_1, col2, u'我是一个单元格', xlwt.easyxf(
            u'alignment: horizontal center, vertical center,wrap True;'
            u'font: name 宋体,height 440, bold True;'
    ))
    
    设置行高和列宽

    列宽在Excel里面用字符宽带来表示。xlwt以字符'0'的1/256宽为一个单位,默认表格宽度为2962,大致相当于11个字符宽度。设置Excel的列宽就大致等于,字符宽度 * 256 + 182 (有待继续考证,精度目前还行)

    sheet.col(0).width = 字符宽度 * 256 + 182
    

    行高再Excel里面一般用磅来表示,磅 * 20 即是xlwt的数值。字体的大小也是用磅来设置。

    sheet.row(i).height_mismatch = True  #必须设置高度才能生效
    sheet.row(i).height = 磅 * 20
    
    保存文件
    workbook.save(file_name)
    
    冷门

    设置页面方向

    sheet.set_portrait(False)  #设置页面为横向
    

    使用num_format_str来设置单元格类型。
    特别是遇到时间的时候,Excel会自动转为May-2017这种格式,这时候就要设置为文本类型,防止自动转换

    #将单元格设置为文本类型
    sheet.row(row).write(col, u'这是一个单元格', xlwt.easyxf(
            u'borders: left 1,right 1,top 1,bottom 1;'
            u'alignment: horizontal left, vertical center,wrap True;'
            u'font: name 宋体,height 220;',
            num_format_str='@' #这个是关键
    ))
    
    #这么多类型请自行体会
    [
        'general',
        '0',
        '0.00',
        '#,##0',
        '#,##0.00',
        '"$"#,##0_);("$"#,##',
        '"$"#,##0_);[Red]("$"#,##',
        '"$"#,##0.00_);("$"#,##',
        '"$"#,##0.00_);[Red]("$"#,##',
        '0%',
        '0.00%',
        '0.00E+00',
        '# ?/?',
        '# ??/??',
        'M/D/YY',
        'D-MMM-YY',
        'D-MMM',
        'MMM-YY',
        'h:mm AM/PM',
        'h:mm:ss AM/PM',
        'h:mm',
        'h:mm:ss',
        'M/D/YY h:mm',
        '_(#,##0_);(#,##0)',
        '_(#,##0_);[Red](#,##0)',
        '_(#,##0.00_);(#,##0.00)',
        '_(#,##0.00_);[Red](#,##0.00)',
        '_("$"* #,##0_);_("$"* (#,##0);_("$"* "-"_);_(@_)',
        '_(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)',
        '_("$"* #,##0.00_);_("$"* (#,##0.00);_("$"* "-"??_);_(@_)',
        '_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)',
        'mm:ss',
        '[h]:mm:ss',
        'mm:ss.0',
        '##0.0E+0',
        '@'
    ]
    

    只是把我这几天用到的记录一下,还有很多没写到,到时候用到了再慢慢补充!

    相关文章

      网友评论

          本文标题:Python操作Excel

          本文链接:https://www.haomeiwen.com/subject/qmqmzttx.html