避免甘特圖錯誤要從嚴格的 YYYY-MM-DD 輸入與包含結束日期開始,甘特圖製作工具一次驗證一列,只要有一列格式錯誤就會在繪製任何長條之前拒絕整個請求。解析器接受 2 到 30 列非空白的簡化 CSV 格式,每列剛好兩個逗號,留下任務標籤、開始日期與結束日期。帶引號的逗號、多餘欄位、斜線和時區後綴會刻意被拒絕。日期會以實際的預先推算格里高利 UTC 曆法日來檢查,這代表 4 月 31 日、非閏年的 2 月 29 日,以及第 0 或 13 個月都會回傳錯誤,而非被默默修正。結束日期是包含的,所以 1 月 1 日到 1 月 3 日會佔用三個日期格,而不是兩個。每個座標都是確定性的,只有在序列化時才會四捨五入到小數點後三位,因此你檢視的預覽與下載的 SVG 完全一致。

how do i avoid mistakes when i make gantt chart
製作甘特圖時如何避免錯誤

為什麼大多數甘特圖錯誤會發生

大多數甘特圖錯誤都落入少數幾種模式。試算表會默默接受格式錯誤的日期並將其轉為序號,所以 2025-03-12 中的打錯字可能在不知不覺中把任務排到錯誤的週。日曆格在一個欄位中以工作日繪製,在另一個欄位卻以日曆日繪製,產生的長條看起來比標示的持續時間少一天。重疊的任務因為圖表只顯示最新範圍,會隱藏在同一列中。進度條、相依性與資源欄位被附加上去,圖表就不再描述時程,而是開始描述對時程的幻想。

解法不是更聰明的試算表。解法是把資料契約與圖表分開,然後在繪製任何長條之前強制執行資料契約。嚴格的輸入規則會將隱含的假設轉為明確的錯誤,讓你能即時修正,而不是在三次會議後、進度已經延誤時才發現。

及早阻擋錯誤的嚴格輸入規則

甘特圖製作工具完全在目前的瀏覽器分頁中執行,將精簡的時程轉為獨立的 SVG。其接受輸入的方式就是防止錯誤的方式。

約束限制為何能防止錯誤
非空白列數2 到 30一列太單薄不算是時程,30 列已足以涵蓋階段計畫
每列逗號數剛好 2 個字面逗號不支援引號或跳脫逗號,也不會混入多餘欄位
任務標籤長度最多 80 個 UTF-16 程式碼單位標籤不會超出長條或 SVG 輸出預算
選用標題長度最多 100 個 UTF-16 程式碼單位標題不會讓圖表超出 SVG 預算
原始時程輸入最多 20,000 個 UTF-16 程式碼單位貼上千列的試算表也無法繞過限制
日期格式必須剛好是 YYYY-MM-DD,共 10 個字元斜線、時間文字與時區後綴都會失敗
結束日期相對於開始日期結束日期在開始日期當天或之後負持續時間的任務會被拒絕
SVG 輸出預算最多 100,000 個 UTF-16 程式碼單位允許剛好達到邊界;超過一個單位即失敗且不截斷

當某列超出上述任何一項限制,整個請求都會被拒絕。沒有部分圖表、沒有略過的列,也沒有默默截斷的情況。你看到的圖表就是成功通過的圖表。

一個常讓人意外的結果:需要逗號的標籤必須改寫成不含逗號的版本。不支援完整的 CSV 引號語法。關於甘特圖任務標籤中的逗號的指南會說明確切情況與可行的改寫方式。

逐步建立零錯誤的圖表

  1. 在瀏覽器中開啟甘特圖製作工具。
  2. 在標題欄位中輸入選用的標題,最多 100 個 UTF-16 程式碼單位。
  3. 將時程以 2 到 30 列非空白的形式貼上,格式為 task,start,end,每列剛好兩個逗號。
  4. 使用真實的 UTC 日期,格式為 YYYY-MM-DD,例如 2025-03-12,結束日期須在開始日期當天或之後。
  5. 點擊產生。檢查每個長條、每個刻度標籤,以及座標軸的起點與終點。
  6. 下載由你剛才檢視的預覽字串所產生的獨立 SVG。

每一步都是在錯誤擴散之前明確捕捉的機會。產生功能會拒絕任何一個錯誤的列,預覽會顯示下載時會使用的確定性版面,而 SVG 輸出預算會保護檔案本身。

包含式結束日期與長條寬度

包含式結束日期是 off-by-one 錯誤的常見來源。在本工具中,結束日期會計入任務的一部分。從 2025-01-01 到 2025-01-03 的任務佔用三個日曆日格:包含式天數 = 結束日期 − 開始日期 + 1,也就是 2025-01-03 − 2025-01-01 + 1 = 3。開始與結束相同的任務剛好佔用一個日格。長條的 x 位置使用完整的 UTC 日偏移,長條寬度則使用各任務的包含式天數,因此視覺呈現與標示範圍一致。

若時程中每個任務都落在同一天,共用網域就是一天,所有長條仍會正常繪製。計算過程絕不會除以零個經過區間,而這正是會默默毀掉試算表的那種邊界情況。

座標軸與資料對齊。水平網域從最早的任務開始日期起算,並在最新的包含式任務日之後結束。62 天以內的時程使用確定性的日刻度,刻度標籤為 YYYY-MM-DD。更長的時程則切換為月刻度,標籤為 YYYY-MM。間隔的選擇是為了維持大約九個標籤,並始終包含首尾日期。每個被接受的任務及其完整日期寬度都會保留;只有座標軸標籤會為了可讀性而進行抽樣。

圖表刻意不會顯示的內容

圖表描述的是日曆佔用情況。它不描述工時、工作日、工作量、完成百分比或資源容量。它不會解析 Microsoft Project 檔、相依性、里程碑、要徑、假日、工作曆、進度、指派人、成本或基準線,也不接受帶時區的時間戳記。它也不會推論重疊的工作是否可行。

會描述不會描述
每個任務的日曆日格每天的工作時數
跨任務的 UTC 日期範圍工作日或假日曆
確定性的 UTC 長條位置時區在地化的位移
62 天以內為日刻度,超過則為月刻度小時或分鐘刻度
獨立 SVG 輸出進度條、相依性、基準線

若需要相依性規劃、協作、權限、稽核紀錄與營運承諾,專案的專案管理軟體才是合適的工具。將此圖表視為精確的日曆時間軸、僅此而已,是使用它最安全的方式。

下載獨立 SVG

驅動預覽的 SVG 與下載取得的字串完全相同,符合 W3C SVG 2 規格。數值屬性僅來自經驗證的有限版面計算。使用者字串(例如標籤與標題)會經過 XML 實體跳脫,因此 &、角括號、引號與撇號不會變成標記。XML 禁止的控制字元與孤立的代理項會變成 U+FFFD,代表雜散的控制字元無法破壞輸出。看起來像指令碼的文字會保持為可見字元,而不是 SVG 元素。

檔案具有固定的 1,100 像素邏輯寬度、依列數決定的動態高度、白色背景、格線、標籤文字、矩形長條、標題工具提示、viewBox,以及無障礙的 role 與 label。寬幅輸出會在預覽中捲動,而不是把標籤縮成在手機上無法閱讀的寬度,因此你在螢幕上檢視的圖表與你儲存的圖表完全一致。

成功產生時,會從完整 SVG 建立單一 Blob 網址。該網址在一般同來源錨點下載期間保持有效,並會在標題或資料變更、結果被取代、產生失敗或元件卸載時撤銷。這避免了立即撤銷所造成的下載競態以及 ObjectURL 洩漏的累積。若 Blob 或 URL 建立失敗,不會留下任何過時的預覽或下載。你的時程、標題、SVG 與互動都不會離開目前的分頁。

延伸閱讀:使用打字測驗時如何避免錯誤。