教學 · Excel → Markdown

Excel 轉 Markdown:公式和格式

Markdown 表格是一個文字的矩形。工作表是一個格子的矩形,而一個格子底下能壓著公式,上面能蓋著顯示格式,還能被合併拉到隔壁去。這四樣裡有三樣無處安放。

於是真正該問的是一個很窄的問題:這張表知道的一切裡,有多少能到表格裡,而你要的那部分在不在裡面。

去轉換器

公式變成它的答案

=SUM(B2:B9) 出來是 4211。這個方向才有用,因為 Markdown 什麼都不算 —— 貼過去的公式只會在文件裡當幾個不動的字元待著,看起來像有意思,其實沒有。

它能這麼做,是因為 Excel 每次儲存檔案時都會把算好的值快取在公式旁邊。轉換器讀的是這個快取值,所以它不需要自帶一個公式引擎,整件事也才能在一個瀏覽器分頁裡跑。

Excel 裡的儲存格
B10:  =SUM(B2:B9)
Markdown
| Total | 4211 |

沒人打開過的那些活頁簿

如果這個活頁簿是指令碼產生的 —— Python 匯出、報表工作、任何用試算表函式庫寫出來的東西 —— 而且從來沒在 Excel 裡開過,那就沒有快取值。沒人寫過。這些儲存格轉出來是空的。

一趟往返就能解決:用 Excel 或者 LibreOffice 開啟這個活頁簿,儲存,關掉。填快取的動作就是儲存。而讀出來仍然是空的工作表會在輸出上方被點名,所以你不會順手複製走一張全是空格的表。

公式錯誤也是轉成空,而不是 #DIV/0! 或者 #REF!。一整欄查閱出錯會變成一欄空白 —— 所以某一欄莫名其妙是空的,回去查原始檔。

數字格式留不下來

這一頁裡,這條最該在轉換之前先看。Excel 把顯示遮罩和存下來的數字放在兩個地方,只有後者是資料 —— 遮罩是一條算繪指令。

所以 $1,234.50 落地成 1234.5,顯示 12.50% 的儲存格落地成 0.125。沒有誰被弄壞:這些就是檔案裡一直存著的數,只是沒戴那層遮罩。

格式要緊的話,在試算表裡加一欄用 TEXT() 公式拼出格式化後的字串,然後用那一欄。那樣它就是文字了,而文字會一字不差地轉過來。

日期是例外。它們也是按數字存的,但數字格式能認出它們,所以出來是 1995-01-01,有時間的話後面跟上時間。它們是刻意按 UTC 讀回來的 —— 圖省事的寫法會讓格林威治以西的每個人的日期都往前挪一天。

合併儲存格會拆開

一個跨 A1:C1 合併的標題出來是一個裝著文字的儲存格,旁邊兩個空儲存格。Excel 把值留在合併範圍左上那一格,其餘的確實是空的,所以能讀到的就是這些。

Markdown 沒有 colspan,所以沒有辦法把它拼回去。版面要緊的話先在 Excel 裡拆掉 —— 很多時候那些合併只是為了把標題置中。

顏色、字型、邊框、設定格式化的條件、儲存格註解也一樣留不下,理由相同:Markdown 裡沒有它們的語法。

工作表:一張,或者幾張

只有選了不只一張表的時候才會有那個標題。只有一張的時候你已經知道是哪張了,標題只是雜訊。

末尾的空列會先裁掉,這件事比聽起來重要:在 Excel 裡空白處點幾下,能讓一張工作表聲稱自己有幾百列、而裡面什麼都沒有。裁完是空的工作表會明說,而不是給你一張全是空白的表格。

  1. 01把活頁簿拖進來。工作表名稱會帶著列數列出來,第一張會被轉換。
  2. 02勾上你要的工作表。改選取範圍是拿記憶體裡已經讀好的那份重新算繪 —— 檔案不會再讀一次。
  3. 03選了幾張就出成一份文件,每張表在一個帶工作表名稱的 ## 標題下面。

大小上限,和被拒掉的檔案

每個活頁簿 10 MB —— 比別的格式那個 25 MB 低。.xlsx 是個 zip,在分頁裡解開它花的記憶體比檔案大小看著要多得多。

選取的全部內容一共十萬格,所以少選幾張表能讓一個大活頁簿過關,而整個一起就過不了。

設了密碼的活頁簿會被拒掉,而不是讀一半。舊的二進位 .xls 也一樣 —— 這兩種都是 OLE 容器而不是 zip,這裡都讀不了。用 Excel 開啟,不設密碼另存成 .xlsx。

不小心把 .docx 或者 PDF 拖到這一頁上,它不會硬試:檔案標頭會先查一遍,提示裡會寫出接這種檔案的是哪一頁。

把活頁簿拖進來,勾上要的工作表,複製表格。.xlsx 是在這個分頁裡解開的,不去別處 —— 檔案是財務模型的時候,這一點要緊。

Excel → MD