[Python] 自動(dòng)化辦公 根據(jù)查詢需求建立新表

轉(zhuǎn)載請(qǐng)注明:陳熹 chenx6542@foxmail.com (簡(jiǎn)書號(hào):半為花間酒)
若公眾號(hào)內(nèi)轉(zhuǎn)載請(qǐng)聯(lián)系公眾號(hào):早起Python

本例可以學(xué)到的知識(shí)點(diǎn): openpyxl模塊的綜合運(yùn)用
練習(xí)數(shù)據(jù):鏈接 https://pan.baidu.com/s/1o3xxsFO2KqozVbH68UwElg 提取碼 r3r2

一、需求描述:

有一份 檔案記錄總表的Excel工作簿, 每天會(huì)根據(jù) 當(dāng)天日期 建立新表蛋褥,每天的表格內(nèi)包含所有檔案信息膜廊,同時(shí)也有可能會(huì)添加新的檔案名。同個(gè)年度的總表在年末可能會(huì)有兩痘昌、三百個(gè)工作表,同時(shí)每個(gè)表中可能也存在千余份檔案信息。

(為了直觀呈現(xiàn)本例以7個(gè)工作表和十余份檔案的形式呈現(xiàn))

表格形式如下:

需要完成的操作:為了方便審查特定檔案信息,需要給出檔案名后生成一份新表先煎,該表包含指定檔案在所有日期(即所有工作表)中的記錄

最終結(jié)果如下(以 檔案x003 為例):

二谤绳、步驟分析

正式寫代碼前可以把需求分析清楚缩筛,將復(fù)雜問題簡(jiǎn)單化

說(shuō)白了瞎抛,這個(gè)需求要求把所有日期工作表中的特定行都提取出來(lái)整合成一個(gè)新表婿失。那么我們可以遍歷每一張表,然后遍歷第一列(名稱列懒浮,也可以看作A列)每一個(gè)有數(shù)據(jù)的單元格砚著,如果單元格中的文字為我們需要的檔案名稽穆,就把這一行提取出來(lái)放到新的表格中

進(jìn)一步梳理步驟為:

  1. 建立一個(gè)新的EXCEL工作簿
  2. 新表的表頭和檔案記錄Excel中的一樣舌镶,也是“名稱”餐胀、“配置”、“提交日期”等
  3. 遍歷檔案記錄Excel的每一張工作表sheet墨技,再遍歷第一列每一個(gè)有數(shù)據(jù)的單元格扣汪,對(duì)內(nèi)容進(jìn)行判斷
  4. 找到符合條件的單元格后獲取行號(hào)脐嫂,根據(jù)行號(hào)將當(dāng)前表中的特定行提取出來(lái),并將行追加新創(chuàng)建的表中

分析清楚就著手寫代碼

三暗膜、代碼實(shí)現(xiàn)

  • 導(dǎo)入需要的庫(kù)

本例中涉及舊表的打開和新表的創(chuàng)建娃善,因此需要從openpyxl導(dǎo)入load_workbookWorkbook
(如果是ppt和word用到的模塊就更智能了聚磺,一個(gè)方法就能搞定)

from openpyxl import load_workbook, Workbook
  • 導(dǎo)入舊表及創(chuàng)建新表
# 從桌面上獲取總表
filepath = r'C:\Users\chenx\Desktop\臺(tái)賬.xlsm' # 根據(jù)實(shí)際情況進(jìn)行修改
workbook = load_workbook(filepath)
# 創(chuàng)建新的Excel工作簿獲取到工作表
new_workbook = Workbook()
new_sheet = new_workbook.active

# 給新表寫入表頭
new_headers = ['名稱', '配置', '提交日期', '受限操作', '操作時(shí)間', '狀態(tài)', '存儲(chǔ)位置']
new_sheet.append(new_headers)
  • 核心步驟:多次遍歷
    可以用workbook.sheetnames獲取工作簿所有工作表名稱的列表,然后遍歷即可
for i in workbook.sheetnames:
    sheet = workbook[i]
    # 獲取檔案名稱所在列
    names = sheet['A']

按照前面的分析,需要遍歷名稱列暮屡,判斷每一個(gè)單元格的值是不是需要的檔案名褒纲。這里應(yīng)注意冕象,如果已經(jīng)循環(huán)到需要的單元格渐扮,就可以停止循環(huán)了墓律,但一定要把符合單元格的行號(hào)傳遞給一個(gè)變量做記錄帕棉,不然一旦break出循環(huán)就沒有記憶了

flag = 0
for cell in names:
if cell.value == keyword: # 這里的keyword就是檔案名香伴,可以以 檔案x003 為例
    flag = cell.row
    break

獲得到符合條件的行號(hào)后用sheet[flag]就可以拿到符合行了。openpyxl不支持舊表的一整行寫入新表膊畴,因此應(yīng)對(duì)策略就是將這一行的所有單元格具體值組裝成一個(gè)列表,用sheet.append(列表)的方法寫入新表

遍歷部分的完整代碼如下:

    for i in workbook.sheetnames:
        sheet = workbook[i]
        names = sheet['A']
        flag = 0
        for cell in names:
            if cell.value == keyword:
                flag = cell.row
                break
        if flag:   # 如果flag沒有被修改則不需要順序進(jìn)行下列代碼
            data_lst = []
            for cell in sheet[flag]:
                # 這里加上一個(gè)對(duì)內(nèi)容的判斷政勃,是讓無(wú)內(nèi)容的行直接放空,而不是寫入一個(gè) none
                if cell.value:  
                    data_lst.append(str(cell.value))
                else:
                    data_lst.append(' ')
            new_sheet.append(data_lst)

最后記得保存

new_workbook.save(r'C:\Users\chenx\Desktop\臺(tái)賬查詢.xlsx')

寫在最后

這是經(jīng)過(guò)一定改編的真實(shí)案例,可見python自動(dòng)化辦公確實(shí)能夠幫助我們解放自己的雙手
如果你有正在煩惱的辦公需求诅迷,歡迎在 早起Python 公眾號(hào)后臺(tái)留言

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末滩租,一起剝皮案震驚了整個(gè)濱河市猎莲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖埃难,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件考抄,死亡現(xiàn)場(chǎng)離奇詭異然遏,居然都是意外死亡姨裸,警方通過(guò)查閱死者的電腦和手機(jī)中狂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門勋又,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)惯驼,“玉大人,你說(shuō)我怎么就攤上這事“烈耍” “怎么了县习?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵躁愿,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng)梆砸,這世上最難降的妖魔是什么帖世? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮翔怎,結(jié)果婚禮上飘痛,老公的妹妹穿的比我還像新娘敦冬。我一直安慰自己脖旱,他們只是感情好介蛉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布币旧。 她就那樣靜靜地躺著,像睡著了一般巍虫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上占遥,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天瓦胎,我揣著相機(jī)與錄音,去河邊找鬼柬祠。 笑死负芋,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的示罗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼轧房,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼绍绘!你這毒婦竟也來(lái)了陪拘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤捺信,失蹤者是張志新(化名)和其女友劉穎欠痴,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喇辽,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡菩咨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了特占。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡罢低,死狀恐怖胖笛,靈堂內(nèi)的尸體忽然破棺而出宜岛,到底是詐尸還是另有隱情,我是刑警寧澤萍倡,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布列敲,位于F島的核電站,受9級(jí)特大地震影響戴而,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜淮逊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一泄鹏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧备籽,春花似錦分井、人聲如沸车猬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)诈唬。三九已至,卻和暖如春缩麸,著一層夾襖步出監(jiān)牢的瞬間铸磅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留阅仔,地道東北人吹散。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像八酒,于是被迫代替她去往敵國(guó)和親空民。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354