美文网首页
openpyxl:帮妹子造个轮子,减少重复劳动

openpyxl:帮妹子造个轮子,减少重复劳动

作者: 佛系恐贪 | 来源:发表于2017-10-08 20:25 被阅读0次

写在前面

有个妹子有一项简单又重复的工作,将客户提供的问卷调查资料,整理成其他部门要求的模板,都是xlsx格式。

这完全可以交给电脑处理的啊,所以帮她用openpyxl造个"轮子",减少重复劳动吧。

openpyxl基础

  1. 三个概念
    在学习这个库的时候,主要参考了博客园的"_小苹果",他写得非常清晰,容易理解,非常感谢"_小苹果,(=^ ^=),原文链接:http://www.cnblogs.com/anpengapple/p/6399304.htm

在openpyxl中,主要用到三个概念:Workbooks,Sheets,Cells。
Workbook就是一个excel工作表;Sheet是工作表中的一张表页;Cell就是简单的一个格。
openpyxl就是围绕着这三个概念进行的,不管读写都是“三板斧”:打开Workbook,定位Sheet,操作Cell。

  1. xlsx写入
    from openpyxl import Workbook #引入类
    wb = Workbook()
    ws = wb.active
    ws.title = 'Sheet1' # 设置表名
    ws['A1'] = 'Hello World # 向A1单元格赋值
    wb.save('test.xlsx') # 保存文件

  2. xlsx读取
    from openpyxl import load_workbook #引入类
    fname = "test.xlsx"
    wb = load_workbook(fname) # 加载xlsx文件
    first_sheet = sheetnames[0]
    print first_sheet # 打印第一个表的名称
    sheet = wb.get_sheet_by_name(first_sheet) # 读取第一个表
    print sheet["A1"].value # 打印A1的值
    print sheet.cell(row=1, column=1).value # 另一种写法,循环row、column可遍历表格内容

    运行结果:

Sheet1
Hello World
Hello World

源码

#!/usr/bin/env python
# -*- coding: utf-8 -*-

@file: excel2excel.py

@time: 2017/10/7 1:50

@desc:

from openpyxl import load_workbook  # 读取
from openpyxl import Workbook  # 写入
import sys
import traceback  # 捕获异常模块
import os

reload(sys)
sys.setdefaultencoding('utf-8')

# 解决控制台中文乱码,mystr.decode('utf-8').encode(turn_type),直接引用
turn_type = sys.getfilesystemencoding()


def ExcelToExcel(fname):
    # ....读取.... #
    print u'读取文件...',
    # fname = "问卷调查.xlsx"
    wb = load_workbook(fname)
    #  读取第一张表
    sheetnames = wb.get_sheet_names()
    ws = wb.get_sheet_by_name(sheetnames[0])
    # 获取行数和列数
    rows = ws.max_row  # 行数
    cols = ws.max_column  # 列数
    con_list = []
    print u'[完成]'
    # ........ #

    # ....写入.... #
    wb2 = Workbook()
    ws2 = wb2.active
    ws2.title = 'Sheet1'
    # ........ #

    # 先写入表头
    con2_list = [u'邮箱地址', u'手机号', u'日期', u'公司名', u'公司地址', u'公司电话']
    ws2.append(con2_list)  # 以列表的方式整行写入
    con2_list = []  # 清空列表

    print u'转换数据...',
    for i in range(2, rows + 1):  # 从第二行开始读取
        for j in range(1, cols + 1):
            row = ws.cell(row=i, column=j).value
            con_list.append(row)  # 读取整行,以列表的方式储存
        # 抽取需要的数据
        con2_list.extend([con_list[6], con_list[8], con_list[9], con_list[10], con_list[11], con_list[32]])
        ws2.append(con2_list)  # 写入新的xlsx
        con2_list = []  # 清空列表
        con_list = []  # 清空列表
    filename = str(fname).split('.')[0] + '_new' + '.xlsx'
    print u'[完成]'
    print u'保存文件...',
    wb2.save(filename)
    print u'[完成]'
    print u'请查看新文件:%s' % filename.decode('gbk')


def main():
    print u'注意仅支持xslx格式.'
    mystr = u'请输入需转换的文件名:'.decode('utf-8').encode(turn_type)
    fname = raw_input(mystr)
    try:
        ExcelToExcel(fname)
    except Exception:
        f = open("log.txt", 'a')
        traceback.print_exc(file=f)
        f.close()


if __name__ == '__main__':
    main()
    os.system("echo.")
    os.system('pause')

相关文章

网友评论

      本文标题:openpyxl:帮妹子造个轮子,减少重复劳动

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