openpyxl:幫妹子造個(gè)輪子,減少重復(fù)勞動(dòng)

寫(xiě)在前面

有個(gè)妹子有一項(xiàng)簡(jiǎn)單又重復(fù)的工作涣狗,將客戶(hù)提供的問(wèn)卷調(diào)查資料谍婉,整理成其他部門(mén)要求的模板,都是xlsx格式镀钓。

這完全可以交給電腦處理的啊穗熬,所以幫她用openpyxl造個(gè)"輪子",減少重復(fù)勞動(dòng)吧丁溅。

openpyxl基礎(chǔ)

  1. 三個(gè)概念
    在學(xué)習(xí)這個(gè)庫(kù)的時(shí)候唤蔗,主要參考了博客園的"_小蘋(píng)果",他寫(xiě)得非常清晰窟赏,容易理解妓柜,非常感謝"_小蘋(píng)果,(=^ ^=)涯穷,原文鏈接:http://www.cnblogs.com/anpengapple/p/6399304.htm

在openpyxl中棍掐,主要用到三個(gè)概念:Workbooks,Sheets拷况,Cells作煌。
Workbook就是一個(gè)excel工作表;Sheet是工作表中的一張表頁(yè)蝠嘉;Cell就是簡(jiǎn)單的一個(gè)格最疆。
openpyxl就是圍繞著這三個(gè)概念進(jìn)行的,不管讀寫(xiě)都是“三板斧”:打開(kāi)Workbook蚤告,定位Sheet努酸,操作Cell。

  1. xlsx寫(xiě)入
    from openpyxl import Workbook #引入類(lèi)
    wb = Workbook()
    ws = wb.active
    ws.title = 'Sheet1' # 設(shè)置表名
    ws['A1'] = 'Hello World # 向A1單元格賦值
    wb.save('test.xlsx') # 保存文件

  2. xlsx讀取
    from openpyxl import load_workbook #引入類(lèi)
    fname = "test.xlsx"
    wb = load_workbook(fname) # 加載xlsx文件
    first_sheet = sheetnames[0]
    print first_sheet # 打印第一個(gè)表的名稱(chēng)
    sheet = wb.get_sheet_by_name(first_sheet) # 讀取第一個(gè)表
    print sheet["A1"].value # 打印A1的值
    print sheet.cell(row=1, column=1).value # 另一種寫(xiě)法杜恰,循環(huán)row获诈、column可遍歷表格內(nèi)容

    運(yùn)行結(jié)果:

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  # 寫(xiě)入
import sys
import traceback  # 捕獲異常模塊
import os

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

# 解決控制臺(tái)中文亂碼,mystr.decode('utf-8').encode(turn_type),直接引用
turn_type = sys.getfilesystemencoding()


def ExcelToExcel(fname):
    # ....讀取.... #
    print u'讀取文件...',
    # fname = "問(wèn)卷調(diào)查.xlsx"
    wb = load_workbook(fname)
    #  讀取第一張表
    sheetnames = wb.get_sheet_names()
    ws = wb.get_sheet_by_name(sheetnames[0])
    # 獲取行數(shù)和列數(shù)
    rows = ws.max_row  # 行數(shù)
    cols = ws.max_column  # 列數(shù)
    con_list = []
    print u'[完成]'
    # ........ #

    # ....寫(xiě)入.... #
    wb2 = Workbook()
    ws2 = wb2.active
    ws2.title = 'Sheet1'
    # ........ #

    # 先寫(xiě)入表頭
    con2_list = [u'郵箱地址', u'手機(jī)號(hào)', u'日期', u'公司名', u'公司地址', u'公司電話(huà)']
    ws2.append(con2_list)  # 以列表的方式整行寫(xiě)入
    con2_list = []  # 清空列表

    print u'轉(zhuǎn)換數(shù)據(jù)...',
    for i in range(2, rows + 1):  # 從第二行開(kāi)始讀取
        for j in range(1, cols + 1):
            row = ws.cell(row=i, column=j).value
            con_list.append(row)  # 讀取整行心褐,以列表的方式儲(chǔ)存
        # 抽取需要的數(shù)據(jù)
        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)  # 寫(xiě)入新的xlsx
        con2_list = []  # 清空列表
        con_list = []  # 清空列表
    filename = str(fname).split('.')[0] + '_new' + '.xlsx'
    print u'[完成]'
    print u'保存文件...',
    wb2.save(filename)
    print u'[完成]'
    print u'請(qǐng)查看新文件:%s' % filename.decode('gbk')


def main():
    print u'注意僅支持xslx格式.'
    mystr = u'請(qǐng)輸入需轉(zhuǎn)換的文件名:'.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')
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末舔涎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子逗爹,更是在濱河造成了極大的恐慌亡嫌,老刑警劉巖嚎于,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異挟冠,居然都是意外死亡于购,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)知染,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)肋僧,“玉大人,你說(shuō)我怎么就攤上這事控淡∠臃停” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵掺炭,是天一觀的道長(zhǎng)辫诅。 經(jīng)常有香客問(wèn)我,道長(zhǎng)涧狮,這世上最難降的妖魔是什么泥栖? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮勋篓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘魏割。我一直安慰自己譬嚣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布钞它。 她就那樣靜靜地躺著拜银,像睡著了一般翩迈。 火紅的嫁衣襯著肌膚如雪页响。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天搀庶,我揣著相機(jī)與錄音锯仪,去河邊找鬼泵督。 笑死,一個(gè)胖子當(dāng)著我的面吹牛庶喜,可吹牛的內(nèi)容都是我干的小腊。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼久窟,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼秩冈!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起斥扛,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤入问,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體芬失,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡楣黍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了麸折。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锡凝。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖垢啼,靈堂內(nèi)的尸體忽然破棺而出窜锯,到底是詐尸還是另有隱情,我是刑警寧澤芭析,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布锚扎,位于F島的核電站,受9級(jí)特大地震影響馁启,放射性物質(zhì)發(fā)生泄漏驾孔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一惯疙、第九天 我趴在偏房一處隱蔽的房頂上張望翠勉。 院中可真熱鬧,春花似錦霉颠、人聲如沸对碌。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)朽们。三九已至,卻和暖如春诉位,著一層夾襖步出監(jiān)牢的瞬間骑脱,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工苍糠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留叁丧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓椿息,卻偏偏與公主長(zhǎng)得像歹袁,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子寝优,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 最近在網(wǎng)上爬取奧運(yùn)項(xiàng)目資料条舔,并寫(xiě)入Excel中。在寫(xiě)到Excel中是用到了OpenPyXL乏矾,翻譯了一部分自己用到的...
    LeeLom閱讀 198,039評(píng)論 7 78
  • openpyxl中的三個(gè)概念: workbooks:excel工作表 sheets:工作表中的一張表頁(yè) cells...
    henYee閱讀 6,523評(píng)論 2 0
  • 使用首先需要了解他的工作原理 1.POI結(jié)構(gòu)與常用類(lèi) (1)創(chuàng)建Workbook和Sheet (2)創(chuàng)建單元格 (...
    長(zhǎng)城ol閱讀 8,402評(píng)論 2 25
  • 用openpyxl操作excel表格 openpyxl 是一個(gè)用來(lái)操作excel 2010 的xlsx/xlsm的...
    stone46閱讀 7,382評(píng)論 0 17
  • Apache POI 是用Java編寫(xiě)的免費(fèi)開(kāi)源的跨平臺(tái)的 Java API孟抗,Apache POI提供API給Ja...
    玩味Orz閱讀 2,604評(píng)論 0 0