~/blog/sme-digitization-excel-to-wordpress-database-migration-2026.md
企業系統與 CRM · 2026 / 02 / 05

Excel 跑到當機?2026 中小企業數位轉型:從試算表思維到 WordPress 關聯式資料庫的技術遷移實戰

Eric — 浪花科技創辦人 / AI 架構師
Eric
浪花科技創辦人 · AI 架構師
Excel 跑到當機?2026 中小企業數位轉型:從試算表思維到 WordPress 關聯式資料庫的技術遷移實戰
目錄 table-of-contents.md

打開公司共用資料夾裡那份 2026_客戶名單_最終版_真的最後一版_v3.xlsx,泡杯咖啡回來它還在轉圈圈——很多中小企業的「資料庫」,其實就是這樣一份隨時可能當機的 50MB 試算表。Excel 是好工具,但它從來就不是設計來給多人並發編輯、做關聯查詢用的。這篇要聊的,是怎麼把試算表思維升級成 WordPress 關聯式資料庫,走完數位轉型最關鍵的第一步。

即使到了 2026 年,AI Agent 已經能幫我們寫 Code、Cursor 已經成為標配,但我發現台灣還是有大量的傳統中小企業(SME)深陷在「Excel 地獄」中。老闆習慣看格子,業務習慣傳 LINE 檔案,結果就是資料打架、版本混亂,更別提什麼數據分析或 AI 預測了。

今天這篇技術文,我們不談空泛的數位轉型口號,我們要從工程師的角度切入,談談如何將雜亂無章的 Excel 試算表思維,遷移到 WordPress 的關聯式資料庫(Relational Database)架構中,並附上實際的程式碼範例。這一把,我們要把公司的「技術債」連本帶利清乾淨。

為什麼 Excel 是 2026 年企業成長的最大絆腳石?

Excel 很棒,它是世界上最強大的計算機,但它不是資料庫。在 2026 年的今天,依賴 Excel 作為核心業務系統(ERP/CRM)會面臨幾個毀滅性的技術問題:

  • 缺乏單一真值來源 (SSOT): 當檔案被複製成三份,哪一份才是最新的庫存數據?這在分散式系統原理中是絕對的大忌。
  • 缺乏資料完整性 (Data Integrity): Excel 儲存格沒有強型別限制,電話欄位被填入「下午三點回電」,這會導致後續 API 串接或 AI 分析直接噴錯。
  • 併發寫入衝突 (Concurrency Control): 雖然現在有協作功能,但當多人同時修改同一筆訂單狀態時,資料覆蓋(Lost Update)的風險極高。
  • 無法自動化: 你無法輕易地讓 Excel 主動發送 Webhook 給 Line Bot 通知客戶出貨,這在 WordPress 中卻是幾行 Code 就能解決的事。

思維重構:從「扁平化」到「關聯式」

要逃離 Excel 地獄,首先要改變的是資料結構的設計思維。Excel 是二維的、扁平的;而 WordPress 背後的 MySQL/MariaDB 是立體的、關聯的。

正規化 (Normalization):工程師的整理術

假設你的 Excel 訂單表長這樣:

訂單編號 | 客戶姓名 | 客戶電話 | 商品A | 商品A價格 | 商品B | 商品B價格 |總金額

這種設計在資料庫領域稱為「未正規化」。如果客戶改電話,你得搜尋所有訂單逐一修改;如果一筆訂單有 10 個商品,你的欄位就會無限橫向擴張。

在 WordPress 的架構下,我們會將其拆解:

  • User (wp_users): 儲存客戶帳號資訊。
  • Order (Custom Post Type): 儲存訂單狀態、時間。
  • Order Items (Custom Table): 儲存訂單內的商品明細與當下價格。
  • Product (WooCommerce/CPT): 儲存商品資訊。

技術實戰:在 WordPress 中建立高效能資料庫結構

很多開發者會濫用 WordPress 的 Post Meta (wp_postmeta),把所有資料都塞進去。這在資料量少時沒問題,但當你有十萬筆訂單明細時,效能會直接崩潰。Eric 建議,針對大量結構化數據,我們應該建立自訂資料表 (Custom Tables)

1. 建立自訂資料表

我們使用 WordPress 的 dbDelta 函式來建立一個儲存「訂單明細」的獨立資料表。這比用 Meta Query 搜尋快上數百倍。


function roamer_create_order_items_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'roamer_order_items';
    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE $table_name (
        id mediumint(9) NOT NULL AUTO_INCREMENT,
        order_id bigint(20) NOT NULL,
        product_sku varchar(55) NOT NULL,
        quantity int(5) NOT NULL,
        unit_price decimal(10,2) NOT NULL,
        created_at datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
        PRIMARY KEY  (id),
        KEY order_id (order_id)
    ) $charset_collate;";

    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    dbDelta( $sql );
}
// 在外掛啟用時執行
register_activation_hook( __FILE__, 'roamer_create_order_items_table' );

2. 資料遷移腳本 (Migration Script)

假設你已經把 Excel 轉存為 CSV,我們需要一個腳本將其讀入並寫入資料庫。這裡要注意資料清洗 (Data Cleaning),如果 CSV 的價格欄位包含 "NT$" 符號,記得要濾掉。


function roamer_import_legacy_data() {
    global $wpdb;
    $csv_file = '/path/to/your/legacy_data.csv';
    
    if ( !file_exists($csv_file) ) return;

    $handle = fopen($csv_file, "r");
    // 跳過標題列
    fgetcsv($handle);

    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        // $data[0] = Order ID, $data[1] = SKU, $data[2] = Qty, ...
        
        // 簡單的資料清洗
        $price = preg_replace('/[^0-9.]/', '', $data[4]); 

        $wpdb->insert(
            $wpdb->prefix . 'roamer_order_items',
            array(
                'order_id'   => intval($data[0]),
                'product_sku'=> sanitize_text_field($data[1]),
                'quantity'   => intval($data[3]),
                'unit_price' => floatval($price)
            ),
            array( '%d', '%s', '%d', '%f' )
        );
    }
    fclose($handle);
    error_log('Excel Migration Completed Successfully.');
}

Eric 的小囉嗦:在跑這段腳本前,拜託一定要先備份資料庫。資料庫操作是不可逆的,不要讓你的週五晚上變成 Debug 之夜。

2026 年的資料架構優勢:AI Ready

為什麼要這麼大費周章?因為只有將資料結構化 (Structured Data) 後,我們才能真正利用 2026 年強大的 AI 工具。

當你的訂單資料在 SQL 資料庫中:

  • Text-to-SQL: 你可以讓老闆直接對 Line Bot 問:「上個月賣最好的紅色商品是什麼?」,後端 AI 直接轉譯成 SQL Query 回傳結果。這在 Excel 裡是做不到即時互動的。
  • 預測性維護: 透過歷史數據,AI 可以預測下季庫存需求,這需要乾淨的時間序列資料,而不是散落在各個 sheet 裡的破碎數字。
  • API 自動化: 透過 REST API,WordPress 可以與 ERP、CRM 或 n8n 無縫串接,實現真正的「無人值守」營運。

結語:痛苦是暫時的,效益是永久的

從 Excel 遷移到 WordPress 資料庫,對中小企業來說無異於換心手術。初期會很痛,員工會抱怨「為什麼不能直接打字就好」,但身為技術決策者,你必須堅持下去。

試算表是個人的工具,資料庫才是企業的資產。在 2026 年,數據資產的顆粒度與可存取性,決定了你公司的競爭力。

準備好拋棄那個 50MB 的 Excel 檔案了嗎?

延伸閱讀

不想再被 Excel 綁架?讓我們幫你打造客製化資料庫系統

數據轉移有風險,交給專業的浪花科技團隊,讓你的企業運作效率翻倍。

立即填寫表單聯繫我們
// FAQ

常見問題

為什麼 Excel 不適合當作企業的核心業務系統?
Excel 是強大的計算機,但不是資料庫。用它當核心 ERP/CRM 會面臨幾個技術問題:缺乏單一真值來源(檔案被複製多份後不知哪份最新)、缺乏資料完整性(儲存格沒有強型別限制)、併發寫入衝突(多人同時修改易發生資料覆蓋),以及無法輕易自動化(難以主動發送 Webhook 通知)。
什麼是資料庫的正規化(Normalization)?
正規化是把扁平的試算表結構拆解成有關聯的多張表,避免資料重複與欄位無限橫向擴張。以訂單為例,可拆成 User(客戶資訊)、Order(訂單狀態與時間)、Order Items(訂單明細與當下價格)、Product(商品資訊),客戶改電話時只需改一處,而不必逐筆訂單修改。
WordPress 處理大量結構化資料時,為什麼要用自訂資料表而非 Post Meta?
很多開發者會把所有資料塞進 wp_postmeta,這在資料量少時沒問題,但當有十萬筆訂單明細時用 Meta Query 搜尋效能會崩潰。針對大量結構化數據,應使用 WordPress 的 dbDelta 函式建立自訂資料表(Custom Tables)並建立索引,查詢速度可快上數百倍。
從 Excel 匯入資料到資料庫時要注意什麼?
匯入前務必先備份資料庫,因為資料庫操作不可逆。匯入時要做資料清洗(Data Cleaning),例如價格欄位若含「NT$」符號要先用正規表達式濾掉,並對各欄位做型別轉換與消毒(如 intval、sanitize_text_field、floatval)後再寫入。
資料遷移到資料庫後,還能繼續用 Excel 做報表嗎?
可以,而且這才是正確用法。讓 WordPress 資料庫負責資料的輸入與儲存(作為單一真值來源),再透過外掛或匯出功能把資料拉到 Excel 做報表分析,把 Excel 當成分析工具而非核心儲存系統。
~/roamer-tech/newsletter // FREE
// newsletter

訂閱免費電子報

把 AI 自動化、企業系統設計與 WordPress / Laravel 開發的真實案例和可直接照做的技巧,整理成電子報寄給你。只寄精選內容、不灌垃圾信,一鍵就能退訂。

$
// final.exec()

準備好讓你的網站開始為你工作了嗎?