1. 程式人生 > >C# 操作EXCEL

C# 操作EXCEL

(1)如何引用單元格和區域:


指定單元格或單元格區域,然後對該單元格或單元格區域進行一些操作,如輸入公式或更改格式。通常用一條語句就能完成操作,該語句可標識單元格,還可更改某個屬性或應用某個方法。Range 物件既可表示單個單元格,也可表示單元格區域。下列主題說明了標識和處理 Range 物件最常用的方法


示例1將單元格區域 A1:D5 的字型設定為加粗。


Workbooks("Book1").Sheets("Sheet1").Range("A1:D5").Font.Bold =True


演示了使用 Range 屬性的一些 A1 樣式引用。


引用                   含義


Range("A1")            單元格 A1


Range("A1:B5")         從單元格 A1 到單元格 B5 的區域


Range("C5:D9,G9:H16")  多塊選定區域


Range("A:A")           A 列


Range("1:1")           第一行


Range("A:C")           從 A 列到 C 列的區域


Range("1:5")           從第一行到第五行的區域


Range("1:1,3:3,8:8")   第 1、3 和 8 行


Range("A:A,C:C,F:F")   A 、C 和 F 列


示例2 用編號引用單元格


通過使用行列編號,可用 Cells 屬性來引用單個單元格。該屬性返回代表單個單元格的 Range 物件。下例中,Cells(6,1) 返回 Sheet1 上的單元格 A6,然後將 Value 屬性設定為 10。


Worksheets("Sheet1").Cells(6, 1).Value = 10


示例3 引用行和列


可用 Rows 屬性或 Columns 屬性來處理整行或整列。這兩個屬性返回代表單元格區域的 Range 物件。下例中,用 Rows(1) 返回 Sheet1 上的第一行,然後將單元格區域的 Font 物件的 Bold 屬性設定為 True。


   Worksheets("Sheet1").Rows(1).Font.Bold = True


演示使用 Rows 和 Columns 屬性的一些行和列的引用。


引用              含義


Rows(1)           第一行


Rows              工作表上所有的行


Columns(1)         第一列


Columns("A")      第一列


Columns           工作表上所有的列


示例4 相對於其他單元格來引用單元格


處理相對於另一個單元格的某一單元格的常用方法是使用 Offset 屬性。下例中,將位於活動工作表上活動單元格下一行和右邊三列的單元格的內容設定為雙下劃線格式。


    ActiveCell.Offset(1, 3).Font.Underline = xlDouble


(2)頁面控制


   Dim ExcelID as Excel.Application


Set ExcelID as new Excel.Application


1) 顯示當前視窗:


ExcelID.Visible := True;


2) 更改 Excel 標題欄:


ExcelID.Caption := '應用程式呼叫 Microsoft Excel';


3) 新增新工作簿:


     ExcelID.WorkBooks.Add;


4) 開啟已存在的工作簿:


     ExcelID.WorkBooks.Open( 'C:\Excel\Demo.xls' );


5) 設定第2個工作表為活動工作表:


     ExcelID.WorkSheets[2].Activate;


或 ExcelID.WorkSheets[ 'Sheet2' ].Activate;


6) 給單元格賦值:


     ExcelID.Cells[1,4].Value := '第一行第四列';


7) 設定指定列的寬度(單位:字元個數),以第一列為例:


     ExcelID.ActiveSheet.Columns[1].ColumnsWidth := 5;


8) 設定指定行的高度(單位:磅)(1磅=0.035釐米),以第二行為例:


     ExcelID.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1釐米


9) 在第8行之前插入分頁符:


     ExcelID.WorkSheets[1].Rows[8].PageBreak := 1;


10) 在第8列之前刪除分頁符:


     ExcelID.ActiveSheet.Columns[4].PageBreak := 0;


11) 指定邊框線寬度


 ExcelID.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight :=3;


      1-左    2-右   3-頂    4-底   5-斜( \ )     6-斜( / )


12) 清除第一行第四列單元格公式:


     ExcelID.ActiveSheet.Cells[1,4].ClearContents;


13) 設定第一行字型屬性:


ExcelID.ActiveSheet.Rows[1].Font.Name := '隸書';


ExcelID.ActiveSheet.Rows[1].Font.Color := clBlue;


ExcelID.ActiveSheet.Rows[1].Font.Bold := True;


ExcelID.ActiveSheet.Rows[1].Font.UnderLine := True;


14) 進行頁面設定:


a.頁首:


    ExcelID.ActiveSheet.PageSetup.CenterHeader := '報表演示';


b.頁尾:


    ExcelID.ActiveSheet.PageSetup.CenterFooter := '第&P頁';


c.頁首到頂端邊距2cm:


    ExcelID.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;


d.頁尾到底端邊距3cm:


    ExcelID.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;


e.頂邊距2cm:


    ExcelID.ActiveSheet.PageSetup.TopMargin := 2/0.035;


f.底邊距2cm:


    ExcelID.ActiveSheet.PageSetup.BottomMargin := 2/0.035;


g.左邊距2cm:


    ExcelID.ActiveSheet.PageSetup.LeftMargin := 2/0.035;


h.右邊距2cm:


    ExcelID.ActiveSheet.PageSetup.RightMargin := 2/0.035;


i.頁面水平居中:


    ExcelID.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;


j.頁面垂直居中:


    ExcelID.ActiveSheet.PageSetup.CenterVertically := 2/0.035;


k.列印單元格網線:


    ExcelID.ActiveSheet.PageSetup.PrintGridLines := True;


15) 拷貝操作:


a.拷貝整個工作表:


   ExcelID.ActiveSheet.Used.Range.Copy;


b.拷貝指定區域:


   ExcelID.ActiveSheet.Range[ 'A1:E2' ].Copy;


c.從A1位置開始貼上:


   ExcelID.ActiveSheet.Range.[ 'A1' ].PasteSpecial;


d.從檔案尾部開始貼上:


   ExcelID.ActiveSheet.Range.PasteSpecial;


16) 插入一行或一列:


   a. ExcelID.ActiveSheet.Rows[2].Insert;


   b. ExcelID.ActiveSheet.Columns[1].Insert;


17) 刪除一行或一列:


   a. ExcelID.ActiveSheet.Rows[2].Delete;


   b. ExcelID.ActiveSheet.Columns[1].Delete;


18) 列印預覽工作表:


   ExcelID.ActiveSheet.PrintPreview;


19) 列印輸出工作表:


   ExcelID.ActiveSheet.PrintOut;


20) 工作表儲存:


    If not ExcelID.ActiveWorkBook.Saved then


          ExcelID.ActiveSheet.PrintPreview


   End if


21) 工作表另存為:


     ExcelID.SaveAs( 'C:\Excel\Demo1.xls' );


22) 放棄存檔:


     ExcelID.ActiveWorkBook.Saved := True;


23) 關閉工作簿:


     ExcelID.WorkBooks.Close;


24) 退出 Excel:


ExcelID.Quit;


25) 設定工作表密碼:


ExcelID.ActiveSheet.Protect "123",


DrawingObjects:=True,


Contents:=True, Scenarios:=True


26) EXCEL的顯示方式為最大化


ExcelID.Application.WindowState = xlMaximized   


27) 工作薄顯示方式為最大化


ExcelID.ActiveWindow.WindowState = xlMaximized


28) 設定開啟預設工作薄數量


ExcelID.SheetsInNewWorkbook = 3


29) '關閉時是否提示儲存(true 儲存;false 不儲存)


ExcelID.DisplayAlerts = False


30) 設定拆分視窗,及固定行位置


ExcelID.ActiveWindow.SplitRow = 1


ExcelID.ActiveWindow.FreezePanes = True


31)列印


sheets.PageSetup.PrintTitleRows   =   "$1:$3";//頂端標題行  


    sheets.PageSetup.PaperSize=Excel.XlPaperSize.xlPaperA3;//.xlPaperB4;//紙張大小  


    sheets.PageSetup.Orientation=Excel.XlPageOrientation.xlLandscape;//紙張方向.橫向  


32) 行的樣式:邊線寬度,顏色


 destRange.Borders[Excel.XlBordersIndex.xlEdgeTop].LineStyle= Excel.XlLineStyle.xlContinuous;                    

destRange.Borders[Excel.XlBordersIndex.xlEdgeTop].Weight= (Excel.XlBorderWeight)Enum.Parse(typeof(Excel.XlBorderWeight),

 LineWidthCode(BaseRpt.mintOutLineWeight,true));                    

destRange.Borders[Excel.XlBordersIndex.xlEdgeTop].Color= BaseRpt.mlngOutLineColor;



33)


   //橫向合併注意 方向為從右到左


  for (i = iTitleRow + 1; i <= iTitleRow + iHeadRow; i++)


   {


         j = iColNum;


         while (j > 1)


         {


              PrevRange = xlSheet.get_Range(xlSheet.Cells[i, j], xlSheet.Cells[i, j]);


              PrevValue = PrevRange.Value2.ToString();


              NextRange = PrevRange.get_Offset(0, -1);


              NextValue = NextRange.Value2.ToString();


              if (PrevValue == NextValue)


              {


                   NextRange.Value2 = "";


                   xlSheet.get_Range(NextRange, PrevRange).MergeCells = true;


              }


              j -= 1;


         }


   }


   //縱向合併 注意方向為從下到上,並且判斷是否是已經合併過的單元格             


   for (j = 1; j <=iColNum; j++)


   {


        i = iTitleRow + iHeadRow;                   


        while (i >iTitleRow+1)


        {


            PrevRange = xlSheet.get_Range(xlSheet.Cells[i, j], xlSheet.Cells[i, j]);


            if ((bool)PrevRange.MergeCells)


            { PrevRange = (Excel.Range)PrevRange.MergeArea.get_Item(1, 1); }                      


            PrevValue = PrevRange.Value2.ToString();


            NextRange = PrevRange.get_Offset(-1, 0);


            if ((bool)NextRange.MergeCells)


            { NextRange = (Excel.Range)NextRange.MergeArea.get_Item(1, 1); }                       


            NextValue = NextRange.Value2.ToString();


            if (PrevValue == NextValue)


            {


                 NextRange.Value2 = "";


                 xlSheet.get_Range(NextRange, PrevRange).MergeCells = true;


            }                      


            i -= 1;


         }


  }           

 Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application();
                object m_objOpt = System.Reflection.Missing.Value;
                Microsoft.Office.Interop.Excel.Workbooks ExcelBooks = (Microsoft.Office.Interop.Excel.Workbooks)ExcelApp.Workbooks;
                Microsoft.Office.Interop.Excel._Workbook ExcelBook = (Microsoft.Office.Interop.Excel._Workbook)(ExcelBooks.Add(m_objOpt));
                Microsoft.Office.Interop.Excel._Worksheet ExcelSheet = (Microsoft.Office.Interop.Excel._Worksheet)ExcelBook.ActiveSheet;

                //設定標題
                ExcelApp.Caption = "XX";
                
                //設定列寬
                //ExcelApp.Columns.EntireColumn.AutoFit();
                ExcelApp.get_Range("A1", System.Reflection.Missing.Value).ColumnWidth = 25;


                //設定列居中對齊
                //Workbooks("Book1").Sheets("Sheet1").Range("A1:D5").Font.Bold =True
                
                ExcelApp.get_Range("A:A", System.Reflection.Missing.Value).HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;

                //寫入列名
                for (int i = 1; i <= listV_fault.Columns.Count; i++)
                {
                    ExcelSheet.Cells[1, i] = listV_fault.Columns[i - 1].Text;
                }
                //寫入內容
                for (int i = 2; i < listV_fault.Items.Count + 2; i++)
                {
                    ExcelSheet.Cells[i, 1] = listV_fault.Items[i - 2].Text;
                    for (int j = 2; j <= listV_fault.Columns.Count; j++)
                    {
                        ExcelSheet.Cells[i, j] = listV_fault.Items[i - 2].SubItems[j - 1].Text;
                    }
                }

                //獲取當前時間並修改格式
                DateTime dtNowTime = DateTime.Now;
                string stNowTime = dtNowTime.ToString();
                stNowTime = stNowTime.Replace("/", "-");
                stNowTime = stNowTime.Replace(":", "_");

                //設定儲存路徑和名稱
                string strPath = System.IO.Directory.GetCurrentDirectory() + string.Format(@"\XXX_{0}.xlsx", stNowTime);

                //儲存並退出
                ExcelBook.SaveAs(strPath, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value);
                ExcelApp.Quit();

                //回收垃圾
                GC.Collect();