[C#] 控制Excel的方法

  • 29406
  • 0

摘要:[c#] 控制Excel方式

C#控制Excel的方法比起VBA直覺許多

缺點是API函數的參數太多

而且功能不好搜尋

物件分層如下

1. Excel Application層 - 代表控制Excel的應用程式,請永遠保持唯一

using Excel = Microsoft.Office.Interop.Excel;

public static Excel.Application xlApp = null;

xlApp = new Excel.ApplicationClass();

// 第二層

xlApp.Quit();

 

2. Excel WorkBook層 - 代表一個Excel檔案

因為參數很多很難用,建議覆寫這些API

        public static Excel.Workbook openWorkBook(string path)
        {
            return xlApp.Workbooks.Open(path, 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
        }

        public static void saveAsWorkBook(Excel.Workbook wb, string path)
        {
            wb.SaveAs(path, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
        }        

        public static void closeWorkBook(Excel.Workbook wb)
        {
            wb.Close(false, Type.Missing, Type.Missing);
        }        

        public static Excel.Workbook getWorkBook(int index)
        {
            if (index > 0 && index <= xlApp.Workbooks.Count)
            {
                return xlApp.Workbooks[index];
            }
            return null;
        }

3. Excel WorkSheet層 - 代表Excel檔案內的一個工作表

指定某個工作表的方法

        public static Excel.Worksheet getWorkSheet(Excel.Workbook wb, int index)
        {
            if (index > 0 && index <= wb.Worksheets.Count)
            {
                return wb.Worksheets[index] as Excel.Worksheet;
            }
            return null;
        }

4. Excel Range層 - 代表工作表內一塊範圍的欄位

注意欄位從1,1開始

這是一塊範圍

Excel.Range raArea = ((Excel.Range)ws.get_Range(ws.Cells[1,1],ws.Cells[2,2]));

也可以是單一個格(Cell)

Excel.Range raOne = (Excel.Range)ws.Cells[row, column];

 

5. 格式設定

Excel.Range ra = ((Excel.Range)ws.Cells[row, column]);

顏色型態必須是整數

ra.Interior.Color = ColorTranslator.ToOle(color);

置中

ra.HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;

ra.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;

欄寬

ra.ColumnWidth = 25;

自動調整欄寬

ra.Columns.AutoFit();

細外框線

ra.Borders.Weight = Excel.XlBorderWeight.xlThin;

字型

ra.Columns.Font.Name = "Arial";

欄位值的文字表示(例如00:00:00)

ra.Text

欄位真正的值(但是值是47000)

ra.Value2

 

以上功能應該可以滿足輸出報表的實現