首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 合併多個相同結構的 Excel 檔案:使用 COM Interop 實現批次整合

     編輯:關於C語言

需求場景

有多個結構相同 (含複雜表頭) 的 Excel 檔案,需合併為單一檔案並移除重複表頭資料。透過 COM 元件 (Microsoft.Office.Interop.Excel) 讀取各檔案的 Range 寫入新活頁簿。

核心程式碼架構

using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using Excel = Microsoft.Office.Interop.Excel;

namespace ConsoleApplication20
{
    class Program
    {
        static void Main(string[] args)
        {
            // M 為最後一欄標記,3 為表頭列數
            MergeExcel.DoMerge(new string[] 
            {
                @"E:\excel\類型A\公司A.xls",
                @"E:\excel\類型A\公司B.xls"
            }, @"E:\excel\類型A\合併測試.xls", "M", 3);

            MergeExcel.DoMerge(new string[] 
            {
                @"E:\excel\類型B\統計表A.xls",
                @"E:\excel\類型B\統計表B.xls"
            }, @"E:\excel\類型B\合併測試.xls", "I", 4);
        }
    }

    public class MergeExcel
    {
        Excel.Application app = new Excel.ApplicationClass();
        Excel.Workbook bookDest = null, bookSource = null;
        Excel.Worksheet sheetDest = null, sheetSource = null;
        string[] _sourceFiles; string _destFile, _columnEnd;
        int _headerRowCount, _currentRowCount;

        public MergeExcel(string[] sourceFiles, string destFile, string columnEnd, int headerRowCount)
        {
            bookDest = (Excel.WorkbookClass)app.Workbooks.Add(Missing.Value);
            sheetDest = bookDest.Worksheets.Add(Missing.Value, Missing.Value, Missing.Value, Missing.Value) as Excel.Worksheet;
            sheetDest.Name = "Data";
            _sourceFiles = sourceFiles; _destFile = destFile; _columnEnd = columnEnd; _headerRowCount = headerRowCount;
        }

        void OpenBook(string fileName) { /* 開啟來源活頁簿 */ }
        void CloseBook() { /* 關閉來源活頁簿 */ }
        void CopyHeader() { /* 複製表頭至目標 */ }
        void CopyData() { /* 複製資料列 (跳過表頭) */ }
        void Save() { bookDest.Saved = true; bookDest.SaveCopyAs(_destFile); }
        void Quit() { app.Quit(); }

        void DoMerge()
        {
            bool first = false;
            foreach (string f in _sourceFiles)
            {
                OpenBook(f);
                if (!first) { CopyHeader(); first = true; }
                CopyData();
                CloseBook();
            }
            Save(); Quit();
        }

        public static void DoMerge(string[] sourceFiles, string destFile, string columnEnd, int headerRowCount)
        {
            new MergeExcel(sourceFiles, destFile, columnEnd, headerRowCount).DoMerge();
        }
    }
}

關鍵邏輯說明

  1. 初始化 Excel Application:建立 ApplicationClass、目標活頁簿與工作表。
  2. 迴圈處理來源檔:第一個檔案複製表頭 (含格式),後續檔案僅複製資料區 (從表頭下一列開始)。
  3. Range 複製:使用 get_Range 定義來源與目標區域,呼叫 Copy 方法。
  4. 資源釋放:每個檔案處理完畢關閉來源活頁簿,最後儲存目標檔並呼叫 Quit() 釋放 COM 物件。

注意事項

  • 需安裝 Excel 或至少安裝 Primary Interop Assemblies (PIA)。
  • 伺服器端自動化 Excel 需注意 DCOM 權限與記憶體洩漏,建議改用 OpenXML SDK 或 NPOI 等純 .NET 函式庫。
  • 大量檔案合併時效能較慢,可考慮平行處理或分批次執行。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved