少於 1 分鐘閱讀

戰爭前夕

手機在桌上震動了一下,螢幕亮起來,把整個昏暗的房間染成一小塊冷冷的白光。

我瞄了一眼。手機推播的新聞跳了出來:強颱巴威,七級風暴風半徑達 380 公里,是自 1987 年琳恩颱風以來,39 年來侵台暴風圈規模最大的颱風。

我盯著那行字看了兩秒。這不是一場普通的颱風。


巴威颱風

戰爭要開始了。

不是那種轟轟烈烈的戰爭,是每個颱風夜都會重演一次的、屬於醫院行政人員的小型戰爭——跟時間賽跑,跟一張 Excel 表格賽跑。

我拿起手機,是醫事室同仁傳來的訊息:

「地方政府宣布明天停班停課,門診異動清單已經跟各科確認得差不多了,我已把彙整好的 Excel 給你,你盡快公告院方決定開設的颱風部分門診清單。」

我盯著那行字看了兩秒,心裡浮起一種熟悉的疲憊感。這不是我第一次經歷這樣的夜晚了。每次颱風要來,醫務部的同仁得挨個科別群組去問、去催、去確認哪些醫師要停診、哪些改成半天、哪些照常開診——那是他們的辛苦,一通通電話、一則則訊息換來的清單。而清單到我手上之後,換我開始跑。

我必須在最短的時間內,把這份清單變成民眾看得懂、找得到的公告,讓原本已經掛號的病人,知道明天到底能不能來。

時鐘還在走,颱風還在逼近。

兩種笨方法

以前,我有兩種辦法。兩種都不好。

第一種,是截圖。把 Excel 開起來,調欄寬,調字級,截一張圖,上傳到 Joomla 網站上。動作不難,難的是接下來的兩三個小時。颱風夜的門診異動,從來不是一次到位的——公告才貼出去半小時,訊息又跳出來:「某醫師臨時說不看診了」「某一診又復診了」。於是我重新打開 Excel,重新調整,重新截圖,重新上傳。同樣的動作,一晚重複四五次。每按下一次上傳鍵,我都在心裡問自己一句:這樣真的有比較快嗎?

第二種,是把 Excel 上傳到 Google 雲端硬碟,再用 iframe 嵌進網頁。至少不用每次截圖了,雲端檔案一更新,網頁就跟著同步。聽起來很聰明,對吧?但問題出在手機上。大部分民眾是用手機看公告的,而 iframe 嵌入的 Excel 在手機瀏覽器裡,是一塊怎麼滑都滑不順的畫面——欄位跑出螢幕外,得左滑、右滑、再上滑,才找得到自己那個診間、那個醫師的異動資訊。

其實我不用憑空想像。每次縣市政府一宣布停班停課,醫院臉書粉專的貼文底下,留言就會一則一則冒出來,像雨點打在玻璃上——「請問明天內科還有看診嗎」「我掛的號還在嗎」「○○醫師明天停診了嗎」。同一個問題,被不同的人,用不同的口氣,焦急地問了一遍又一遍。不是他們不看公告,是那張怎麼滑都對不齊的表格,根本沒辦法讓人一眼確認自己要的答案。

那些一則接一則跳出來的留言,一直卡在我心裡,沒有離開過。

但比半夜臨時異動更讓我討厭的,是隔天清晨。天色還是那種灰灰的、還沒真正亮起來的顏色,手機又震動了——某某醫師一早看了看窗外的風雨,覺得路況太危險,臨時說不能來了,停診。前一晚熬夜弄好、才貼上去沒幾個小時的公告,天沒亮就得再改一次。半夢半醒地爬起來開電腦,那種感覺,比半夜被吵醒還要令人洩氣。

而如果這場颱風賴著不走,一連停班停課好幾天,這整套流程——半夜改、清晨改、白天又改——就會一天一天地重演,沒有一天能真正鬆懈。所謂的颱風假,對我來說根本不存在。別人在家裡追劇、囤泡麵,我幾乎是整個颱風天都守在電腦跟手機旁邊待命,隨時準備跳起來重跑一次截圖、上傳、修改、再截圖、再上傳的迴圈。而且這個迴圈,每來一次颱風就要重跑一遍,一次都逃不掉。

夠了,我想。這樣下去不是辦法。

那就自己做一個

這次颱風來襲的前一天,我告訴自己:不要再讓惡夢重演一次。

窗外風雨還沒真正撲上來,我把筆電螢幕的亮度調高,坐到電腦前。不是再去想怎麼截圖比較快、怎麼把 iframe 調得順一點,而是換一個問題來問自己——如果從根本上換一種做法呢?

我決定做一個小工具:把 Excel 拖進去,直接吐出一段能貼進網站的 HTML。邏輯其實不複雜——醫事室給我的清單格式每次都一樣,那何必每次都靠人工排版?讓程式自己讀資料、自己排版,我只要複製貼上就好。純粹的 HTML 加 JavaScript,沒有框架,靠著 AI 工具輔助,一行一行把邏輯生出來。那一晚,我幾乎沒有離開椅子。

寫到一半,畫面忽然亂了套。Excel 裡同一天、同一個科別的資料,常常用合併儲存格擠成一格,只在最上面留一個值,底下全是空白。我寫的第一版邏輯天真地以為「值一樣就該合併」,結果一跑,兩個完全不相干的診間,因為欄位剛好連續同值,被程式硬生生黏在一起,變成一團誰也看不懂的表格。我盯著那團亂碼看了好一會兒,才想通:合併不能只看單一欄,得先看它左邊那一欄有沒有也合併——邏輯得一層一層往下傳,不能斷。改完,重新整理,表格終於乖乖排好的那一刻,我笑了一下。

我還在意一件事——這個工具從頭到尾不能有伺服器。上傳的 Excel、解析、轉成 HTML,全部得在瀏覽器裡跑完,資料不能離開這台電腦,更不能被送到任何我不確定安不安全的地方。院內的門診異動資訊,本來就不該經過來路不明的第三方服務。這不是我隨手選的技術,是動手寫第一行程式碼之前,就先想清楚的事。

當然,中間也不是一路順風。我把第一份 HTML 貼進 Joomla 後台,滿心期待地重新整理——畫面醜得亂七八糟,樣式全部消失,跟我在自己電腦上看到的完全是兩回事。翻了好一陣子後台設定,才發現是 Joomla 的編輯器 JCE 在搞鬼:它預設不准存入 <style> 標籤裡的樣式,我辛苦排好的版面,被它不動聲色地吃掉了。找到那個開關的瞬間,我真的想罵髒話——但看著公告終於漂漂亮亮排好的樣子,那句髒話還沒出口,就變成了笑。

一分鐘公告

真正測試的那一刻,我把最新收到的異動清單拖進工具裡。

畫面安靜了幾秒,然後一段 HTML 跳了出來。

我把它貼到網站後台,深呼吸一次,重新整理頁面——診間資訊一條一條整齊地排列著,手機上也不再需要左滑右滑,一眼就能看到自己掛號的科別是否受到影響。

那一刻,我坐在電腦前,看著螢幕,肩膀忽然鬆了一點。

颱風不會因為我做了這個工具就不來,醫務部同仁的辛苦跟各科確認的過程,也不會因此變輕鬆。但至少,從清單交到我手上的那一刻起,到公告出現在民眾眼前的那一刻,中間的距離,被我狠狠地縮短了。

之後如果又有醫師臨時異動——不管是半夜,還是隔天清晨那種讓人洩氣的時刻——我不用再重新截圖,也不用再擔心 iframe 把畫面切得亂七八糟。我只要拿到更新後的 Excel,重新上傳一次,複製新的 HTML,貼上——公告更新完成。整個過程,可能不到一分鐘。就算颱風連著賴上好幾天,我還是得待命,但至少每一次被手機震動吵醒時,我知道自己只需要一分鐘,就能把這件事解決掉。

窗外,其實一滴雨都還沒落下。颱風走得慢,照現在的速度,大概要到今晚才會真正登陸。我看著螢幕上那段安靜運作的小工具,忽然覺得,這大概就是所謂的,在風雨真正撲上來之前,先把自己的一小塊地方,安頓好。

更新時間: