使用openpyxl處理Excel表格文件+打包exe

一、環(huán)境準(zhǔn)備

openpyxl的安裝可以直接使用pip

pip install openpyxl

打包使用比較常用的pyinstaller客蹋, 這個先不著急安裝

pip install pyinstaller 

二塞蹭、按照表格內(nèi)容充填顏色

本文只是記錄一項簡單的功能,openpyxl更詳細的用法請查閱Docs:https://openpyxl.readthedocs.io/en/stable/

  1. 文件讀入
file_name = input("請輸入要處理的文件名:(例如:學(xué)生問卷.xlsx)\n")
try:
    file = load_workbook("./"+file_name)
except:
    print(f" {file_name} not found! Please put it alongside with this exe!(同一個文件夾內(nèi))")
    input("exiting...") #再按鍵一次后退出窗口
    exit()
print(f" {file_name} 已加載!")

2.確定條件規(guī)則

def satisfied(cell):
    """
    判斷當(dāng)前cell是否滿足條件讶坯,根據(jù)實際情況修改以下內(nèi)容
    本例cell數(shù)據(jù)格式為: cor:0.23 p:0.02
    """
    text = cell.value  # 獲取每個cell中的值番电,字符串格式
    if text[:3] != "cor":
        return False
    c = text[:text.find('p')]    # cor:0.23
    p = text[text.find('p'):]    # p:0.02
    try:
        c = float(c.split(':')[-1])
        p = float(p.split(":")[-1])
    except:
        print(c,p, "數(shù)據(jù)格式有誤")
    if  p < pthreshold and abs(c) > cthreshold:  # 這里pthreshold cthreshold直接用了外層變量,也可以通過參數(shù)傳入
        return True
    else:
        return False

3.處理工作表

sheet = file.worksheets[0]     # 好像創(chuàng)建excel文件默認(rèn)就有三個sheet辆琅,這里選擇第一個
fill = PatternFill(fill_type='solid',fgColor="BCEE68")  # 充填格式

for row in sheet.iter_rows(min_row=1, max_row=100, max_col=100): # 按行遍歷
    for cell in row:      # 判斷每行中的每個cell
        if cell.value is not None:   # cell中不是啥也沒有的話
            if satisfied(cell):
                cell.fill = fill
            else:
                cell.fill = PatternFill(fgColor="FFFFFF")  # 不滿足目標(biāo)條件漱办,充填顏色為白色


# 處理完后,保存為新的Excel文件
new_file = input("請輸入保存的文件名(不需要再加'.xlsx', eg:version1):\n")
file.save(f"{new_file}.xlsx")
print("Done with saving! closing!")

三婉烟、打包

pyinstaller 有個很弱智的地方就是不能只打包你Python腳本需要的庫娩井,因此在主環(huán)境下打包速度慢,得到的exe文件也很大似袁。 可以通過創(chuàng)建一個新的python環(huán)境洞辣,里面只安裝pyinstaller和腳本需要的庫解決,如果是conda的話conda create -n xxx python=3.7即可安裝叔营。安裝后激活新環(huán)境xxx屋彪, 再安裝需要的庫和pyinstaller。
conda activate xxx 激活绒尊, 激活成功后命令行前面會有 (xxx)Anaconda 默認(rèn)環(huán)境是 (base)

在當(dāng)前Python腳本所在文件夾打開cmd/terminal, (windows的話摁住shift鼠標(biāo)右鍵畜挥,如果是powershell的話,你的conda可能無法切換到新的python環(huán)境xxx婴谱,需要anaconda的一些安裝設(shè)置)

pyinstaller -F fill_color.py

打包完后蟹但,新創(chuàng)建的文件夾(忘了具體哪個了)里就會有打包好的exe了。
下面附整體框架:

import os,sys
from openpyxl import load_workbook
from openpyxl.styles import PatternFill, colors


if __name__ == "__main__":
    file_name = input("請輸入要處理的文件名:(例如:學(xué)生問卷.xlsx)\n")
    try:
        file = load_workbook("./"+file_name)
    except:
        print(f" {file_name} not found! Please put it alongside with this exe!(同一個文件夾內(nèi))")
        input("exiting...")
        exit()
    print(f" {file_name} 已加載!")
    sheet = file.worksheets[0]
    fill = PatternFill(fill_type='solid',fgColor="BCEE68")


    cthreshold = input("請輸入cor閾值(絕對值大于輸入數(shù)值的cell將被上色):\n")
    pthreshold = input("請輸入p閾值:\n")
    
    cthreshold, pthreshold = float(cthreshold), float(pthreshold)

    def satisfied(cell):

        text = cell.value
        if text[:3] != "cor":
            return False
        c = text[:text.find('p')]
        p = text[text.find('p'):]
        try:
            c = float(c.split(':')[-1])
            p = float(p.split(":")[-1])
        except:
            print(c,p)
        if  p < pthreshold and abs(c) > cthreshold:
            return True
        else:
            return False


    for row in sheet.iter_rows(min_row=1, max_row=100, max_col=100):
        for cell in row:
            if cell.value is not None:
                if satisfied(cell):
                    cell.fill = fill
                else:
                    cell.fill = PatternFill(fgColor="FFFFFF")

    new_file = input("請輸入保存的文件名(不需要再加'.xlsx', eg:version1):\n")
    file.save(f"{new_file}.xlsx")
    print("Done with saving! closing!")
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谭羔,一起剝皮案震驚了整個濱河市华糖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瘟裸,老刑警劉巖客叉,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡兼搏,警方通過查閱死者的電腦和手機卵慰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來佛呻,“玉大人裳朋,你說我怎么就攤上這事∠胖” “怎么了鲤嫡?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長绑莺。 經(jīng)常有香客問我暖眼,道長,這世上最難降的妖魔是什么紊撕? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任罢荡,我火速辦了婚禮,結(jié)果婚禮上对扶,老公的妹妹穿的比我還像新娘区赵。我一直安慰自己,他們只是感情好浪南,可當(dāng)我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布笼才。 她就那樣靜靜地躺著,像睡著了一般络凿。 火紅的嫁衣襯著肌膚如雪骡送。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天絮记,我揣著相機與錄音摔踱,去河邊找鬼。 笑死怨愤,一個胖子當(dāng)著我的面吹牛派敷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播撰洗,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼篮愉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了差导?” 一聲冷哼從身側(cè)響起试躏,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎设褐,沒想到半個月后颠蕴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泣刹,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年犀被,在試婚紗的時候發(fā)現(xiàn)自己被綠了项玛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡弱判,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锥惋,到底是詐尸還是另有隱情昌腰,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布膀跌,位于F島的核電站遭商,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏捅伤。R本人自食惡果不足惜劫流,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望丛忆。 院中可真熱鬧祠汇,春花似錦、人聲如沸熄诡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凰浮。三九已至我抠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間袜茧,已是汗流浹背菜拓。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留笛厦,地道東北人纳鼎。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像递递,于是被迫代替她去往敵國和親喷橙。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,554評論 2 349