有網友留言詢問如何在Excel將資料寫入多個工作表,
我們可以使用foreach的方式取得每個工作表,
或是利用Worksheets[index]的方式指定要存取那一張工作表。

Workbook在新增,預設會有三張工作表。
如果要新增工作表,使用Worksheets.Add方法新增。

底下是範例程式。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.IO;
using System.Reflection;
using Excel = Microsoft.Office.Interop.Excel;

namespace ExcelMultiSheet
{
    class Program
    {
        static void Main(string[] args)
        {
            GenerateExcel(5);
        }

        ///<summary>
        /// 產生多個工作表的Excel
        /// 工作表的數量一定要大於三,目前沒檢查
        /// </summary>
        /// 工作表數量
        static void GenerateExcel(int numberOfSheet)
        {
            string fileName = @"D:\MultiSheet.XLSX";

            Excel.Application oXL = new Excel.Application();
            Excel.Workbook oWB;
            Excel.Worksheet oSheet;

            oXL.Visible = false;
            oXL.UserControl = false;

            oWB = oXL.Workbooks.Add(Missing.Value);
            //目前工作表的數量
            int currentNumOfSheet = oWB.Worksheets.Count;
            //補足工作表
            for (; currentNumOfSheet < numberOfSheet; currentNumOfSheet++)
                oWB.Worksheets.Add(Missing.Value, Missing.Value, Missing.Value, Missing.Value);

            //對於每個工作表寫入一行測試資料
            foreach (Excel.Worksheet wSheet in oWB.Worksheets)
                wSheet.Cells[1, 1] =  wSheet.Name + " This is a test line before changing the sheet name. ";

            //使用Worksheets[index]的方式寫入第二行資料
            for (int counter = 1; counter <= currentNumOfSheet; counter++)
            {
                oSheet = oWB.Worksheets[counter];
                oSheet.Name = "Sheet " + counter;
                oSheet.Cells[2, 1] = "A test line after changing the sheet name. ";
            }

            //存檔
            oWB.SaveAs(fileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                Excel.XlSaveAsAccessMode.xlShared, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

            oWB.Close();
            oWB = null;

            oXL.Quit();
            oXL = null;
        }
    }
}

以上,提供參考。