優雅地將課表導入日曆

2021-02-13 湫谷

本文同步發布在個人博客,電腦端從博客頁面查看可以獲得更好的體驗。
連結:https://blog.rneko.com/archives/49/

點擊閱讀原文查看!!

項目地址:

https://github.com/Xm798/ClasstableToIcalforNUAA
其實是微信公眾號排版真的太麻煩了(((以及超連結可能都是不允許添加的,麻煩各位看官通過閱讀原文跳轉吧!
本文排版使用Md2All自動渲染生成。

為什麼要把課表導入日曆呢?

當然是為了優雅

可以方便地自定義和修改課程;

可以將課表作為小部件放到桌面上,方便而實用;

可以準確地管理上課時間,並將課程和其他日程安排統一管理;

可以很容易地處理調課等突發情況;

可以設置上課前N分鐘提醒,避免忘記上課;

脫離臃腫的充斥著廣告的大學生課表應用;

可以藉助Google Calendar或Outlook Calendar做到平臺融合,在電腦、手機、PAD甚至Web網頁都可以管理課程;

可以藉助滴答清單等To-Do-List應用安排日程,iOS用戶還有好用而漂亮的Sorted3可以使用。

那麼,何樂而不為呢?

效果展示手機系統日曆課程詳情日曆應用Windows任務欄p.s. 手頭暫時沒有Apple家的設備,無法展示iOS和MAC設備的效果,自行嘗試叭。
如何將課表導入日曆

在@Triple-Z、@MiaoTony等同學的努力下,我校本科生已經可以很方便地從教務系統,獲取課表並生成 iCal 日曆文件,以導入Google Calendar、Outlook或系統日曆。

具體項目參見NUAA_ClassSchedul,該項目還有一個漂亮又易用的在線版本。

而遺憾的是截至目前,研究生信息管理系統還尚未對接成功,所以無法一鍵導出=_=。但得益於@陳某豪和@SunsetYe66的貢獻,我們依然可以較為優雅地將課錶轉換為ics日曆文件。

生成ics文件 部署項目

從 GitHub 拉取程序

git clone https://github.com/Xm798/ClasstableToIcalforNUAA.git

確保本機已安裝Python 3環境,然後安裝依賴

pip install uuid xlrd

準備Excel課表文件

登錄南京航空航天大學研究生信息管理系統,進入到「課程學習」-「選課結果查詢」模塊之中,點擊「導出數據」,獲得一份選課結果的Excel文件。

導出課表

在交給 ClasstableToIcal 處理之前,我們需要先對該課表文件做一些預先處理。

拆分課表

首先,針對「時間」中存在多個上課時間的,例如星期二 下午5-下午6,星期五 下午5-下午6,需要先拆分為單條記錄,確保每行記錄為一節課。

藉助Power Query,可以很輕鬆的實現這項工作。

Power Query 在Microsoft Office 2016及以上版本中為內置組件,Office 2010或2013版本需要手動下載安裝,不支持2010以下版本和WPS。

若無PQ組件或不想使用PQ操作,由於數據量非常小,手動拆分完全可行,只要將每行拆分為單獨的一節課即可。

打開下載的課表文件,在Excel中選擇「數據-獲取數據-來自文件-從工作簿」,選擇下載的課表文件並打開,選中sheet1,點擊「加載」。

雙擊右側「查詢&連接」中的sheet1,打開Power Query編輯器。

刪除無用的「學分、階段、選課人數」三列,然後選中「時間」一列,點擊「轉換-拆分列-按分隔符」,分隔符選擇「逗號」。

拆分列

按住Ctrl鍵多選除了時間之外的其他列,點擊「轉換-逆透視列-逆透視其他列」。

逆透視列

刪除多出的「屬性」列 ,點擊「主頁-關閉並上載」,得到拆分後的表格。

預處理課表文件

按照模板文件 temp_classInfo.xlsx 的要求,需要將待導入的文件處理成模板文件的樣子。

時間設置 conf_classTime.json 文件我已按照我校教學日曆調整完畢,無需再做修改,這部分主要針對 classInfo.xlsx 的製作進行預處理。

在拆分完成的表格中繼續操作,選中時間一列,點擊「數據-分列」,依次選擇「分隔符號、空格、完成」,將星期和節次拆分。

拆分星期

而後,在節次右側的兩個單元格分別使用以下兩個公式,並下拉填充,將星期和節次轉換為對應的數字。

=IF(RIGHT(H2,1)="","",MATCH(RIGHT(H2,1),{"一";"二";"三";"四";"五";"六";"日"},))

=IF(I2="","",MATCH(I2,{"上午1-上午2";"上午1-上午3";"上午1-上午4";"上午2-上午3";"上午2-上午4";"上午3-上午4";"下午5-下午6";"下午5-下午7";"下午5-下午8";"下午6-下午7";"下午6-下午8";"下午7-下午8";"晚上9-晚上10";"晚上9-晚上11"},))

轉換星期和節次

到這裡,對classInfo.xlsx的預處理已經完成,可以將對應欄位粘貼到classInfo.xlsx之中了。

製作Classinfo.xlsx

根據作者介紹,classInfo.xlsx中的欄位含義為:

className - 課程名稱
startWeek - 開始周數
endWeek - 結束周數
weekday - 課程日期(周幾)
classTime - conf_classTime.json 中定義的時間段代號
classroom - 教室
weekStatus - 是否單雙周排課:正常排課 = 0,單周排課 = 1,雙周排課 = 2
classSerial - 可選,課程序號
classTeacher - 可選,教師名

最後兩個可選欄位如果不需要可以關閉,只需在 excel_reader.py 中的 27 和 28 行將:
self.config["isClassSerialEnabled"] = [1, 7]
self.config["isClassTeacherEnabled"] = [1, 8]
後方的方框中,要關閉的功能的 1 改成 0 即可(即 [0, 7] 或 [0, 8])。

注意:若課程有不同排課方式或一周有多節課,需要分多條記錄錄入。

將之前表格中的對應欄位,粘貼至 classInfo.xlsx 。weekStatus填寫0,並補充線上課的classroom為線上即可。

製作完成的classinfo.xlsx生成文件

該部分直接引用腳本作者教程。

我校2020-2021學年第一學期第一周的日期輸入20200831。

打開命令提示符或終端,定位到該項目根目錄下。

然後執行 main.py:

python main.py

python3 main.py

首先選 2 進入課程信息讀取工具:若未修改過 Excel 文件結構,直接回車即可;若提示成功,文件夾中將多出一個新的 JSON 文件。

此時,再輸入 3 進入 iCal 生成工具,按提示輸入必需信息後即可生成最終文件。請注意此處輸入的日期必須嚴格按照提示輸入開學第一周周一的日期,且該日期的格式是 YYYYMMDD,即 年年年年月月日日,中間不加符號。

我校本學期第一周時間為8月31日,輸入20200831。

導入設備

注意:導入任何日曆之前,都建議新建一個新的日曆用於導入操作,便於出錯時批量修改,以及不同顏色更容易區分。

iOS設備

直接將生成的文件傳輸到手機後點擊打開,選擇「導入日曆」即可。

Android與Windows設備

部分Android設備的原生日曆並不支持ics文件的導入功能,其實更加推薦的方法是藉助於Google Calendar或者Outlook來完成日程管理,因為無論是谷歌日曆還是微軟的Outlook,都可以很方便的完成手機、PAD與Windows設備之間的日曆同步。

如果有科學手段,可以選用Google Calendar,如果沒有,Outlook也是一個極為不錯的選擇,全憑個人喜好。

Google Calendar導入

電腦端打開Google Calendar,選擇添加其他日曆-導入,記得選擇一個單獨的日曆,如果沒有,可以新建一個。點擊導入,即可完成。

電腦端導入Google Calendar

也可以在手機端完成導入,在安裝好谷歌日曆的情況下,直接點擊接收到的ics文件,選擇使用「日曆」打開,即可。

手機端導入Google CalendarOutlook導入

電腦端訪問Outlook,使用微軟帳號登錄。

點擊左側的「日曆」,添加日曆-創建空白日曆,新建一個課表日曆。

創建日曆

然後選擇「從文件上傳」,選擇生成的ics文件,導入到創建的課表日曆中即可。

Outlook導入日曆

或者,Windows10系統可以直接在本地右鍵ics文件,選擇使用系統日曆打開。

使用日曆打開

然後導入到日曆即可。首次使用可能需要登錄帳號,此處登錄微軟帳號或Gmail或其他任何支持的帳號都可以。

導入到日曆跨平臺同步

在手機端、電腦端、PAD端登錄同一帳號之後,即可實現全平臺同步。

Android端

若使用Google Calendar,手機端需要安裝谷歌日曆應用;若使用Outlook,手機端需要安裝Outlook應用。當然,部分安卓作業系統的系統日曆可以直接訂閱谷歌日曆和Outlook的日曆,不安裝App使用系統日曆也完全OK。

例如,小米日曆在「日曆-設置-日曆帳號管理」中,可以添加Gmail日曆。

添加日曆帳號電腦端

Windows10系統使用系統的「郵件與日曆」應用,登錄對應帳號,即可完成電腦端平臺的日曆同步。

如果是使用Google服務,需要先解除UWP應用的代理限制,請自行搜索「解除UWP應用網絡隔離」,或參閱Win10解除UWP應用網絡隔離允許訪問代理。推薦使用Fiddler中的WinConfig模塊,全部解除隔離。


感謝@陳某豪和@SunsetYe66的項目貢獻!

相關焦點

  • 將日曆功能挖掘到底:UpTo
    Google日曆雖然具有一定的社交分享功能,但除非別人的日程安排本身與自己有非常密切的關係,否則還是保有一定的私密性。 而iPhone應用「UpTo」日曆則用了另一種思路,UpTo除了可以對不同的日曆做整合,還可以對日曆有不同圈子的社交分享。而最新的UpTo更新更是將日曆作為「發現」活動的重要途徑。
  • 西交利物浦大學學生自主開發課表小程序成爆款 獲學校支持
    每個西浦學生都有自己查看課表的方式,有的同學會在上課之前反覆登陸E-bridge,有的同學會把課表截圖保存在手機相冊裡,甚至有的同學會把課表抄在紙上隨身攜帶。這些方法要麼太折騰,要麼太麻煩。  但是從這學期開始,有一種更方便的方法——XJTLU課表小程序誕生了,學生只要輸入ID和密碼登錄一次之後,就可以隨時隨地在手機上查看課表了。目前使用過這個小程序的西浦學生已經超過了5600人。
  • 行政班排課,五步的課表,讓你教學安排得心應手
    導入教學計劃導入教學計劃教學計劃格式文件導入任課關係模板簡而言之,後續需要經過管理員對課表的優化,而這個優化的過程更多的是結合老師的實際情況與課表的質量。便捷高效的課表優化過程第五步:下載列印在完成了課表的製作過程後,需要將課表拿出來列印,或者通過微信等方式讓學校直接查看自己的課表,這裡我們簡單看看課表導出的過程,一套行政班課表導出的內容包括:
  • 【操作技巧】利用自帶日曆創建分享課程表
    然而,通常我們並沒有那麼高的需求,沒有必要單獨安裝一款課表 App。 因此,我們完全可以利用 iOS 自帶的「日曆」App,配合「通知中心」的便利,來完成這一簡單的需求:一個按時提醒、清晰展示於手機中的課程表。更棒的是,你還可以將它輕鬆分享給全班同學,有沒有覺得很棒呢?
  • 善用Google日曆,讓事情做得更高效
    1、與電腦軟體同步你可以在這裡看到將Google日曆導出到Outlook等軟體和導入日曆到Google日曆的步驟。3、結合Remember the MilkRemember the Milk是最好的Todo List服務之一,你可以在Google日曆裡將RTM導入,方法是:將下面URL的日曆添加到Google日曆,接著輸入RTM的用戶信息:http://www.rememberthemilk.com
  • 10 種活用 Google 日曆的實踐案例,工作生活都適用
    因為 Google 日曆有協作、插入文件、視頻會議,乃至最近加入的目標管理、任務提醒功能,加上多日曆管理分類的特色,搭配之下可以創造無窮變化。我之前曾經分享過 Google 日曆的使用經驗,之後很多朋友都希望我能舉更多「真實應用案例」,來刺激大家用 Google 日曆解決更多問題的想像。
  • 10 種活用 Google 日曆的實踐案例,工作生活都適用 領客專欄 · 電腦玩物
    因為 Google 日曆有協作、插入文件、視頻會議,乃至最近加入的目標管理、任務提醒功能,加上多日曆管理分類的特色,搭配之下可以創造無窮變化。我之前曾經分享過 Google 日曆的使用經驗,之後很多朋友都希望我能舉更多「真實應用案例」,來刺激大家用 Google 日曆解決更多問題的想像。
  • Excel如何快速導入手機聯繫人? 手把手教你在Excel中導入手機聯繫人
    Excel如何快速導入手機聯繫人? 手把手教你在Excel中導入手機聯繫人時間:2017-08-15 13:23   來源:三聯   責任編輯:沫朵 川北在線核心提示:原標題:Excel如何快速導入手機聯繫人?
  • AI製作精美日曆照片詳細步驟 AI製作精美日曆照片教程
    今天給大家介紹的是利用AI處理照片,並且製作出精美能夠列印的日曆照片。其實大家會普遍的覺得AI這個軟體最大的優點就是可以去處理矢量圖,對於像素圖來說還是PS會比較好。但是最近小編有一個發現,其實AI也有強大的圖片處理功能。
  • 幼兒大班數學活動《有趣的日曆》
    >重點:知道一年分為12個月,一個月有30天難點:感受時間的流逝,懂得珍惜時間三、活動準備:日曆,紙張,水彩筆四、活動過程(一)導入部分謎語導入,激發幼兒興趣一個本子牆上掛,一年365天全裝下,它那上面都有啥,紅字黑字還有畫。
  • 如何讓私人教練用客戶將自己的課表排滿
  • 萌課表走紅網絡 「吾皇萬歲」代表歷史課
    商報見習記者 鄭玉霞  小夥伴們,「噫籲嚱」、「自求多福」已經「穿越」到課表上啦,更好玩的是,「聽天由命」、「自求多福」也跑來湊熱鬧,給晚自習「帶鹽」。日前,一「萌妹紙」創作的萌課表橫空出世,語文不叫語文,叫「噫籲嚱」,歷史不稱歷史,稱「吾皇萬歲」……萌課表迅速獲得網友關注,大家都說形象又有創意。
  • 小愛課程表APP問世:覆蓋920所高校 支持一鍵導入
    小愛課程表推出業內首個拍照導入課程表功能,自動導入圖片中的全部課程,一秒完成課程表導入。以往小愛課程表僅可在小米手機中使用,現在,小愛課程表App已上線各大應用商店,所有品牌手機都能安裝使用了。官方介紹,小愛課程表App目前已覆蓋全國920所高校教務系統,能將學校課表的課程名稱、上課地點和授課教師信息直接導入APP。未覆蓋的學校也可以提交適配申請。它還支持分享導入功能,一人編輯全班用。
  • 小愛課程表APP問世:覆蓋920所高校 支持一鍵導入
    小愛課程表推出業內首個拍照導入課程表功能,自動導入圖片中的全部課程,一秒完成課程表導入。以往小愛課程表僅可在小米手機中使用,現在,小愛課程表App已上線各大應用商店,所有品牌手機都能安裝使用了。官方介紹,小愛課程表App目前已覆蓋全國920所高校教務系統,能將學校課表的課程名稱、上課地點和授課教師信息直接導入APP。
  • 有一種課表,叫別人的課表!
    有一種課表,叫別人的課表! 各專業CQUer課表大賞 ·一起來圍觀吧· 一年一度的CQUer課表大賞
  • 優雅 | 今天很水的文章-Excel導入導出
    前端部分這裡闡述前端部分導入,導出,生成Excel表格這裡使用的是一個js-xlsx插件,所以這裡進行嘗試。導出exceldownloadExl = () => { const { results } = this.props //需要導出的json數據 let datas = _.clone(results)//這裡為了不影響項目的數據的使用 採用了lodash中的深克隆方法 let json = datas.map(item=> { //將json
  • Windows10下將農曆日曆設置成系統日曆的方法
    Windows10正式版系統 的默認日曆應用顯示的是陽曆。而不少用戶反饋自己因為習慣使用農曆日曆,因此想要將農曆日曆設置成Windows10系統的默認日曆,那麼這該如何轉換呢?下面,就隨小編一起來看看Win10日曆陽曆換成農曆的具體方法。1、首先從開始菜單中打開「日曆」應用,如下圖:
  • EXCEL好看且實用的日曆怎麼做?
    1今天給大家帶了了3個日曆製作的辦法,(視頻在下方)我相信3種方法,都會讓大家愛不釋手.在大家的數據表格太多的表格內容時,有兩種情況會用到日曆.1.單元格可填部分太多,似乎有的時候你都在反覆拖拽表格的過程中找到一個單元格來進行填寫,會很煩.即使你用名數據驗證序列去進行篩選,單獨的月份還好,如果牽涉到年月精確到了日,那麼你的這個方法應該是不可取的.
  • 無需「日曆」的時代,用一本日曆書將時間留駐身邊
    記者調查發現,多數人愛上日曆書的原因不止因為「高顏值」,還有它的實用性,具有使人「日進一寸」的輔助功能。01數十種日曆書爭奪「蛋糕」曾幾何時,日曆慢慢地遠離了我們的生活。如今,日曆書熱銷,一度成為年輕人追捧的對象。與傳統日曆相比,如今的日曆書更加注重審美價值,兼顧了功能性,強化了以內容性為主的特點。