Excel 跑到當機?從「試算表思維」進化到 WordPress 關聯式資料庫的技術遷移指南

2026/02/2 | WP 開發技巧, 企業系統思維, 全端與程式開發

Excel 跑到當機?從「試算表思維」進化到 WordPress 關聯式資料庫的技術遷移指南

嗨,我是浪花科技的資深工程師 Eric。最近又有一個客戶丟給我一個 200MB 的 .xlsx 檔案,標題寫著「2024_客戶訂單_最終版_v3_真的最後一版.xlsx」,然後問我為什麼檔案打開要跑五分鐘,而且多人編輯時常常出現「衝突複本」。

看著那個充滿了 VLOOKUP、彩色儲存格和神秘註解的檔案,我不禁嘆了一口氣。這就是典型的「Excel 地獄」。

很多中小企業在數位化初期,Excel 確實是神器。但當業務量擴大,這種「平面化」的資料管理方式就會變成災難。今天這篇文章,我不談虛無縹緲的數位轉型大道理,我要用工程師的角度帶你實作:如何將 Excel 的試算表思維,轉化為 WordPress 的資料庫設計思維,並透過程式碼建立一個真正穩固的企業資訊系統。

為什麼 Excel 會變成企業的數位負資產?

在我們動手寫 Code 之前,必須先理解為什麼 Excel 在處理複雜業務邏輯時會崩潰。這不僅僅是列數限制的問題,而是資料結構(Data Structure)的根本差異。

1. 資料冗餘(Data Redundancy)與一致性災難

在 Excel 中,如果你有一個「訂單表」,你通常會在每一列重複輸入客戶的姓名、電話和地址。這就是資料冗餘。如果「王小明」改了電話,你必須手動搜尋並取代所有「王小明」的紀錄。只要漏改一筆,資料就不一致了。

2. 缺乏關聯性(Lack of Relationships)

Excel 的 VLOOKUP 雖然可以模擬關聯,但它本質上是脆弱的。在資料庫設計中,我們講究的是正規化(Normalization)。客戶資料應該獨立存在於一張表,訂單存在另一張表,兩者透過 Client ID 進行關聯。這在 WordPress 中,就是 Post Object 的概念。

3. 權限與資安的黑洞

Excel 檔案通常是「要嘛全給,要嘛不給」。你很難設定「業務 A 只能看自己的客戶,會計只能看金額,老闆可以看全部」這種顆粒度的權限控管(RBAC)。但在 WordPress 中,這是核心功能之一。

技術實戰:從試算表到 WordPress 資料庫架構

現在,我們要動真格的了。假設你有一張 Excel,裡面記錄了「客戶」與「專案」。我們要如何將其搬移到 WordPress?

在 WordPress 的世界裡,不要只把它當成部落格系統。它的底層其實是一個強大的內容管理框架(Content Management Framework)。我們的武器有兩個:

  • Custom Post Type (CPT):用來定義「資料實體」,例如:客戶、專案、合約。
  • Custom Fields (Post Meta):用來定義「資料屬性」,例如:統一編號、聯絡人、金額。

第一步:定義你的資料實體 (Entity)

別再把所有東西塞進 Excel 的 Sheet 1。我們需要拆分實體。以一個 B2B 業務為例,我們至少需要兩個 CPT:

  1. 客戶 (Client):儲存公司基本資料。
  2. 專案 (Project):儲存交易紀錄,並「關聯」到客戶。

第二步:撰寫 CPT 程式碼

作為一個有潔癖的工程師,我建議將這些設定寫在 mu-plugins 或專屬的主題 functions.php 中,而不是依賴純外掛產生的黑盒子。以下是註冊「客戶」類型的範例程式碼:


function roamer_register_client_cpt() {
    $labels = array(
        'name'                  => '客戶',
        'singular_name'         => '客戶',
        'menu_name'             => '客戶管理',
        'add_new'               => '新增客戶',
        'add_new_item'          => '新增客戶資料',
        'edit_item'             => '編輯客戶',
        'new_item'              => '新客戶',
        'view_item'             => '檢視客戶',
        'search_items'          => '搜尋客戶',
        'not_found'             => '找不到客戶',
    );

    $args = array(
        'label'                 => '客戶',
        'labels'                => $labels,
        'supports'              => array( 'title', 'editor', 'custom-fields', 'revisions' ), // 支援的欄位
        'hierarchical'          => false,
        'public'                => true,
        'show_ui'               => true,
        'show_in_menu'          => true,
        'menu_position'         => 5,
        'menu_icon'             => 'dashicons-businessman', // 設定一個帥氣的 icon
        'show_in_admin_bar'     => true,
        'show_in_nav_menus'     => true,
        'can_export'            => true,
        'has_archive'           => true,
        'exclude_from_search'   => false,
        'publicly_queryable'    => true,
        'capability_type'       => 'post',
        'show_in_rest'          => true, // 重點:開啟 REST API 支援,方便未來自動化
    );

    register_post_type( 'roamer_client', $args );
}
add_action( 'init', 'roamer_register_client_cpt', 0 );

這段程式碼做的事情,就是告訴 WordPress 資料庫:「嘿,除了文章(Post)和頁面(Page),我現在多了一種資料叫做『客戶』」。這比在 Excel 開一個新 Sheet 強大得多,因為它繼承了 WordPress 所有的查詢、權限和 API 功能。

資料關聯的藝術:捨棄 VLOOKUP

接下來是重頭戲。在 Excel 中,你要知道某個專案屬於哪個客戶,你可能會用 VLOOKUP。在 WordPress 中,我們使用 Meta Box 或 ACF (Advanced Custom Fields) 的 Relationship Field

在資料庫層面(MySQL),這會在 wp_postmeta 表中建立一條紀錄,將 Project IDClient ID 綁定。這樣做的好處是:

  • 雙向查詢:你可以輕鬆查出「這個專案屬於誰」,也可以查出「這個客戶名下有哪些專案」。
  • 資料完整性:你連結的是一個真實存在的「客戶物件」,而不是一個可能被打錯字的文字字串。

使用 ACF 建立關聯 (概念程式碼)

雖然我們可以用 PHP 手刻 Meta Box,但為了開發效率(工程師也是要睡覺的),通常會搭配 ACF。如果是用程式碼定義 ACF 欄位(推薦做法,利於版控),大概長這樣:


if( function_exists('acf_add_local_field_group') ):

acf_add_local_field_group(array(
    'key' => 'group_project_details',
    'title' => '專案詳細資料',
    'fields' => array(
        array(
            'key' => 'field_related_client',
            'label' => '所屬客戶',
            'name' => 'related_client',
            'type' => 'post_object',
            'post_type' => array('roamer_client'), // 限制只能選取「客戶」類型
            'return_format' => 'id',
            'ui' => 1,
        ),
        array(
            'key' => 'field_project_amount',
            'label' => '專案金額',
            'name' => 'project_amount',
            'type' => 'number',
        ),
    ),
    'location' => array(
        array(
            array(
                'param' => 'post_type',
                'operator' => '==',
                'value' => 'roamer_project', // 顯示在「專案」編輯頁面
            ),
        ),
    ),
));

endif;

擺脫 Excel 地獄後的自動化紅利

當你辛苦地把資料結構化並搬進 WordPress 後,你會發現世界變了。這不只是一個「記錄資料」的地方,它變成了一個「活的系統」。

  1. API 串接:因為我們在註冊 CPT 時開啟了 show_in_rest,現在你可以透過 /wp-json/wp/v2/roamer_client 讀取所有客戶資料。這意味著你可以讓外部系統(如 CRM、ERP)直接跟你的網站對話。
  2. 自動化工作流:配合 n8n 或 Zapier,當你在 WordPress 新增一個「專案」時,可以自動發送 LINE 通知給業務主管,或自動產生一份 PDF 報價單寄給客戶。這在 Excel 裡是需要寫複雜的 VBA 才能勉強達成的。
  3. 權限控管:利用 WordPress 的 User Role Editor,你可以設定實習生只能「新增專案」但不能「刪除客戶」,完美解決 Excel 檔案被誤刪的風險。

Eric 的工程師小碎念:資料清洗 (Data Cleaning)

最後我要提醒一點,也是最多人卡關的地方。從 Excel 搬家到 WordPress,最痛苦的不是寫程式,而是資料清洗

你一定會發現 Excel 裡面的日期格式五花八門(2024/01/01、113.1.1、Jan 1st),或者電話號碼有的有加國碼有的沒有。在匯入資料庫之前,請務必先將這些髒資料處理乾淨。垃圾進,垃圾出(Garbage In, Garbage Out),如果你把髒資料倒進 WordPress,那你只是從 Excel 地獄搬到了 WordPress 地獄而已。

這是一個陣痛期,但相信我,當你第一次在手機上打開網頁,一秒搜尋到客戶三年前的報價單時,你會感謝現在這個決定擺脫 Excel 的自己。

相關閱讀:讓你的 WordPress 更強大

你的企業資料還卡在 Excel 轉圈圈嗎?是時候構建專屬的數位系統了。

立即聯繫浪花科技,啟動你的數位化轉型

常見問題 (FAQ)

Q1: 從 Excel 轉移到 WordPress 資料庫會很困難嗎?

技術上並不難,難點在於「資料清洗」。我們需要先梳理 Excel 中的邏輯,將其拆解為正規化的資料結構。如果資料量在幾萬筆以內,透過 WP All Import 等工具或客製化腳本,通常可以在數天內完成遷移。

Q2: 使用 WordPress 當作企業資料庫安全嗎?

WordPress 本身是安全的,前提是你必須做好資安防護。例如設定強密碼、使用兩階段驗證 (2FA)、限制 API 存取權限,並定期備份。相較於用 Email 傳來傳去的 Excel 檔案,WordPress 提供了更完善的權限控管與存取紀錄 (Log)。

Q3: 轉移後我還可以匯出 Excel 報表嗎?

當然可以!這是數位化的好處之一。你可以將資料儲存在 WordPress 資料庫中確保一致性,需要分析時,再透過外掛或 API 將資料匯出為 Excel 或 CSV,甚至直接串接 Google Looker Studio 製作即時儀表板,完全不需要手動更新報表。

 
立即諮詢,索取免費1年網站保固