CSV 還是 Excel 做流程圖:該由哪一種檔案建起

CSV 是一張純文字表格,沒有公式、沒有第二個工作表、沒有格式。Excel 三樣都有,而且很少是系統匯出的東西。該由哪一種格式建流程圖,以及各自要你付出甚麼。

運作方式

  1. 弄清楚你實際上拿著哪一種檔案

    如果這條流程是由一套系統出來的,那麼無論圖示長成怎樣,你拿著的都是一個 CSV,而你可以對它做的最安全的事,就是不要用 Excel 打開它。如果是有人人手打出來的,你拿著的是一個活頁簿,而它裡面會有合併儲存格。兩個起點需要不同的第一步,而把一份匯出當成一個活頁簿去對待,正是令你的產品代碼變成日期的原因。

  2. 在試算表之前先用文字編輯器打開這個 CSV

    看頭兩行。它們告訴你分隔符、那些欄位有沒有加引號,以及第一個標題名稱前面有沒有三個由 UTF-8 位元組順序標記帶來的隱形位元組。在這裡花三十秒,省下兩個看似軟件錯誤而其實不是的失敗:一個匯入成一個巨大單欄的檔案,以及一個因為標題再也比對不上而被安靜忽略的第一個欄。

  3. 如果你的來源是 Excel,就把它攤平成一張表格

    把工作表以值的方式貼回它自己身上,令每一條公式都變成它算出來的字串。把所有合併取消,刪掉標題上方那一塊、刪掉空白分隔列,並把任何以填色或粗體編碼的東西搬進一個真正的欄,因為它們沒有一樣捱得過這一趟。一行標題、一個步驟一列、一個工作表。CSV 按定義就是一張表格,所以這一步正是令兩個來源等價的那一步。

  4. 把連接欄以列號加上去

    「連線至」放的是每一列所連往那一列以 1 起計的號碼,多過一個時以逗號分隔,而「連線文字」按同一次序放連線標籤。在一個逗號分隔的檔案裡,兩個儲存格都必須用引號包起——「5,6」與「是,否」——否則那一列就會比標題多出一個欄位,而它後面每一個欄都往左移。這是在兩種格式裡你都真正要自己提供的唯一一批新資料。

  5. 把它匯入

    把 .csv 拖到編輯器的試算表區域,或者直接把 CSV 文字貼進去。欄是按標題名稱比對的,所以它們在你檔案裡的次序無關緊要,而任何不獲認得的東西都會被帶過並忽略。由一個活頁簿出發的話,要麼選取那個範圍貼進去,要麼先把工作表另存為 CSV——當那張工作表裡有任何不尋常的東西時,後者值得做,因為另存為 CSV 會把真正捱得過的東西給你看。

  6. 檢查那三件只會朝一個方向壞的事

    掉了一個前置零的代碼、變成了日期的值,以及在檔案中間某處移了位的一個欄。三者都來自一個 CSV 被某個會猜的東西解析過,而三者在你去找之前都是隱形的。在那些列裡修好它們,不要在原本的匯出檔裡修,因為由這一刻起圖表是母版,而那個檔案是一個快照。

常見問題

要做流程圖,我應該匯出 CSV 還是 XLSX?

取來源系統本來就產生的那一種,實務上即是 CSV。把一份匯出轉成一個活頁簿,只是加了一個解析環節,而那個環節只可能損失資訊;至於你會換來的那些活頁簿功能——公式、類型、第二個工作表——全部都要在一列變成一個方框之前解析成純值。有一種情況 Excel 是較好的選擇:當這條流程還未存在於任何地方、而你正在人手把它寫出來時,因為一條把步驟代碼變成列號的公式,確實比人手做快。那條路在 /yue/guides/從試算表建立流程圖 有交代。那些列一旦定下來,兩種格式就完全匯合。

CSV 會不會漏掉流程圖真正需要的東西?

不會。一張圖建起來所用的每一個欄都是文字:標籤、「連線至」裡的列號、「連線文字」裡的連線標籤、形狀名稱,以及兩個泳道名稱。當中沒有一樣需要類型、公式或者第二個工作表,所以一個 CSV 承載得起一張完整的流程圖,一點不缺。CSV 會漏掉的是圖以外的一切——格式、一則註解裡的備註、下一個分頁上的樞紐分析、那個由計算而不是由儲存得來的欄。如果當中有任何一項對你的流程是承重的,那它就是一份被編碼在資料以外的意義,而它必須在匯出之前而不是之後變成一個欄。

為甚麼我打開那個檔案之後,產品代碼變了樣?

因為一個 CSV 沒有類型,而打開它的那個程式必須去猜。一個讀作 00742 的欄位在檔案裡就只是那五個字元;Excel 把它讀成一個數字、掉了前置零、顯示 742,而如果你在那一刻儲存,這個檔案本身現在就寫著 742。同一個猜測把 3-4 變成一個日期、把一個長數字代碼變成科學記數法,並按打開它那個人的地區設定去重新解讀 01/02。這個檔案在被檢視之前一直都是正確的。請直接匯入這個 CSV,不要讓它在一個試算表裡走一轉;如果你非打開不可,就把那些欄以文字方式匯入。

當幾個人一起維護這條流程時,哪一種格式較好?

只要這條流程還住在一個檔案裡,就是 CSV。它是純文字,所以它逐行比對得到、搜尋得到、合併得到,也可以放進版本控制,清清楚楚顯示兩個修訂之間哪些步驟改動過。一個 .xlsx 是一包 XML 的壓縮檔:改一個儲存格會重寫大半個封存檔,所以一次比對只會告訴你這個檔案變了,此外甚麼都沒有。話雖如此,匯入之後這個答案就不再要緊,因為圖表變成了母版,而它自己的修訂紀錄接手。把那個 CSV 留作一份大家也會去編輯的並行副本,只會把這次轉換本來要終結的偏差重新引入。

我的欄在一行中間移了位。發生了甚麼事?

幾乎一定是一個逗號分隔檔案裡一個沒有引號保護的逗號。那一行是在任何東西看標題之前就按分隔符拆開的,所以一個含有 4,5 的「連線至」儲存格會被讀成兩個欄位,那一列於是比標題多出一個欄位,而它後面每一個欄都落在鄰居的標題之下。把那些儲存格用雙引號包起,解析器就會把它們放回原位。同樣道理適用於「連線文字」,以及任何含有半形逗號的標籤,例如一個產品名稱。如果移位是由最第一個欄而不是由中間開始,成因就不同了:這個檔案是分號分隔的而被當成逗號分隔去讀,或者有一個位元組順序標記附在第一個標題名稱上,令它再也比對不上。

流程圖指南的更多內容