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

写在前面

有个妹子有一项简单又重复的工作,将客户提供的问卷调查资料,整理成其他部门要求的模板,都是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')
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 161,192评论 4 369
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,186评论 1 303
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,844评论 0 252
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,471评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,876评论 3 294
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,891评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,068评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,791评论 0 205
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,539评论 1 249
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,772评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,250评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,577评论 3 260
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,244评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,146评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,949评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,995评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,812评论 2 276

推荐阅读更多精彩内容

  • 最近在网上爬取奥运项目资料,并写入Excel中。在写到Excel中是用到了OpenPyXL,翻译了一部分自己用到的...
    LeeLom阅读 190,697评论 7 78
  • openpyxl中的三个概念: workbooks:excel工作表 sheets:工作表中的一张表页 cells...
    henYee阅读 6,467评论 2 0
  • 使用首先需要了解他的工作原理 1.POI结构与常用类 (1)创建Workbook和Sheet (2)创建单元格 (...
    长城ol阅读 8,262评论 2 25
  • 用openpyxl操作excel表格 openpyxl 是一个用来操作excel 2010 的xlsx/xlsm的...
    stone46阅读 7,280评论 0 17
  • Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Ja...
    玩味Orz阅读 2,522评论 0 0