C#模板打印excel


using Microsoft.Office.Interop.Excel; //引用
 
public void PrintPriviewExcelFile( string filePath)
{
             Microsoft.Office.Interop.Excel.ApplicationClass xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
             xlApp.Visible = true ;
             object oMissing = System.Reflection.Missing.Value;
             Microsoft.Office.Interop.Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(filePath, 0, true , 5, oMissing, oMissing, true , 1, oMissing, false , false , oMissing, false , oMissing, oMissing);
             Microsoft.Office.Interop.Excel.Worksheet xlWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkbook.Worksheets[1];
             xlWorksheet.PrintPreview( null );
             xlApp.Visible = false ;
             xlWorksheet = null ;
         }
 
private _Workbook _workBook = null ;
private Worksheet _workSheet = null ;
private Excel.Application _excelApplicatin = null ;
 
_excelApplicatin = new Excel.Application();
_excelApplicatin.Visible = true ;
_excelApplicatin.DisplayAlerts = true ;
 
_workBook = _excelApplicatin.Workbooks.Add(XlSheetType.xlWorksheet);
_workSheet = (Worksheet)_workBook.ActiveSheet;
_workSheet.Name = "workSheetName" ;
 
//打開已存在的Excel
             string strExcelPathName = AppDomain.CurrentDomain.BaseDirectory + "excelSheetName.xls" ;
             Excel.Workbook workBook = application.Workbooks.Open(strExcelPathName, Type.Missing, Type.Missing,
               Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
               Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            //讀取已打開的Excel
             Excel.Worksheet workSheet1 = (Excel.Worksheet)workBook.Sheets[ "SheetName1" ];
             Excel.Worksheet workSheet2 = (Excel.Worksheet)workBook.Sheets[ "SheetName2" ];       
 
             //添加一個workSheet
             Worksheet workSheet = (Worksheet)workBook.Worksheets.Add(System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing);
 
//RowHeight   "1:1"表示第一行, "1:2"表示,第一行和第二行
((Excel.Range)_workSheet.Rows[ "1:1" , System.Type.Missing]).RowHeight = 100;
 
//ColumnWidth "A:B"表示第一列和第二列, "A:A"表示第一列
((Excel.Range)_workSheet.Columns[ "A:B" , System.Type.Missing]).ColumnWidth = 10;
 
// EXCEL操作(需要凍結的字段 按住ALT+W 再按F)
             Excel.Range excelRange = _workSheet .get_Range(_workSheet .Cells[10, 5], _workSheet .Cells[10, 5]);
             excelRange.Select();
             excelApplication.ActiveWindow.FreezePanes = true ;
 
//Borders.LineStyle 單元格邊框線
Excel.Range excelRange = _workSheet.get_Range(_workSheet.Cells[2, 2], _workSheet.Cells[4, 6]);
//單元格邊框線類型(線型,虛線型)
excelRange.Borders.LineStyle = 1;
excelRange.Borders.get_Item(XlBordersIndex.xlEdgeTop).LineStyle = Excel.XlLineStyle.xlContinuous;
//指定單元格下邊框線粗細,和色彩
excelRange.Borders.get_Item(XlBordersIndex.xlEdgeBottom).Weight = Excel.XlBorderWeight.xlMedium;
 
excelRange.Borders.get_Item(XlBordersIndex.xlEdgeBottom).ColorIndex =3;
 
//設置字體大小
excelRange.Font.Size = 15;
//設置字體是否有下划線
excelRange.Font.Underline = true
 
//設置字體在單元格內的對其方式
excelRange.HorizontalAlignment = XlHAlign.xlHAlignCenter;
//設置單元格的寬度
excelRange.ColumnWidth = 15;
//設置單元格的背景色
excelRange.Cells.Interior.Color = System.Drawing.Color.FromArgb(255, 204, 153).ToArgb();
// 給單元格加邊框
excelRange.BorderAround(XlLineStyle.xlContinuous, XlBorderWeight.xlThick,
                                           XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());
//自動調整列寬
excelRange.EntireColumn.AutoFit();
// 文本水平居中方式
excelRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;           
//文本自動換行
excelRange.WrapText = true ;
//填充顏色為淡紫色
excelRange.Interior.ColorIndex = 39;
 
//合並單元格
excelRange.Merge(excelRange.MergeCells);
_workSheet.get_Range( "A15" , "B15" ).Merge(_workSheet.get_Range( "A15" , "B15" ).MergeCells);
 
/// <summary>
/// 常用顏色定義,對就Excel中顏色名
/// </summary>
public enum ColorIndex
{
    無色 = -4142,   自動 = -4105,   黑色 = 1,   褐色 = 53,   橄欖 = 52,   深綠 = 51,   深青 = 49,
    深藍 = 11,   靛藍 = 55,   灰色80 = 56,   深紅 = 9,   橙色 = 46,   深黃 = 12,   綠色 = 10,
    青色 = 14,   藍色 = 5,   藍灰 = 47,   灰色50 = 16,   紅色 = 3,   淺橙色 = 45,   酸橙色 = 43,
    海綠 = 50,   水綠色 = 42,   淺藍 = 41,       紫羅蘭 = 13,   灰色40 = 48,   粉紅 = 7,
    金色 = 44,   黃色 = 6,   鮮綠 = 4,   青綠 = 8,   天藍 = 33,   梅紅 = 54,   灰色25 = 15,
    玫瑰紅 = 38,   茶色 = 40,   淺黃 = 36,   淺綠 = 35,   淺青綠 = 34,   淡藍 = 37,   淡紫 = 39,
    白色 = 2
}
 
 
     range.NumberFormatLocal = "@" ;     //設置單元格格式為文本
     range = (Range)worksheet.get_Range( "A1" , "E1" );     //獲取Excel多個單元格區域:本例做為Excel表頭
     range.Merge(0);     //單元格合並動作
     worksheet.Cells[1, 1] = "Excel單元格賦值" ;     //Excel單元格賦值
     range.Font.Size = 15;     //設置字體大小
     range.Font.Underline= true ;     //設置字體是否有下划線
     range.Font.Name= "黑體" ;       設置字體的種類  
     range.HorizontalAlignment=XlHAlign.xlHAlignCenter;     //設置字體在單元格內的對其方式
     range.ColumnWidth=15;     //設置單元格的寬度
     range.Cells.Interior.Color=System.Drawing.Color.FromArgb(255,204,153).ToArgb();     //設置單元格的背景色
     range.Borders.LineStyle=1;     //設置單元格邊框的粗細
     range.BorderAround(XlLineStyle.xlContinuous,XlBorderWeight.xlThick,XlColorIndex.xlColorIndexAutomatic,System.Drawing.Color.Black.ToArgb());     //給單元格加邊框
     range.Borders.get_Item(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeTop).LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlLineStyleNone; //設置單元格上邊框為無邊框
         range.EntireColumn.AutoFit();     //自動調整列寬
     Range.HorizontalAlignment= xlCenter;     // 文本水平居中方式
     Range.VerticalAlignment= xlCenter     //文本垂直居中方式
     Range.WrapText= true ;     //文本自動換行
     Range.Interior.ColorIndex=39;     //填充顏色為淡紫色
     Range.Font.Color=clBlue;     //字體顏色
     xlsApp.DisplayAlerts= false ;     //保存Excel的時候,不彈出是否保存的窗口直接進行保存
 
 
  Excel對象

  微軟的Excel對象模型包括了128個不同的對象,從矩形,文本框等簡單的對象到透視表,圖表等復雜的對象.下面我們簡單介紹一下其中最重要,也是用得最多的四個對象。

  (1) Application對象。Application對象處於Excel對象層次結構的頂層,表示Excel自身的運行環境。
  (2) Workbook對象。Workbook對象直接地處於Application對象的下層,表示一個Excel工作薄文件。
  (3) Worksheet對象。Worksheet對象包含於Workbook對象,表示一個Excel工作表。
  (4) Range對象。Range對象包含於Worksheet對象,表示Excel工作表中的一個或多個單元格

    在.NET公用語言框架內運行的程序為受管代碼。受管代碼在程序中所有類型都受到嚴格檢查,沒有指針,對內存的管理完全由運行系統控制。受控狀態下,編寫程序更為容易,且更少出錯,我們可以花更多的時間在解決實際問題上而不是在計算機語言問題上。相對而言,那些在.NET框架外運行的程序為非受管代碼。比如:COM組件、ActiveX組件、Win32 API函數、指針運算等。C#編程中在某些特定情況下,需要運用非受管代碼,例如,要利用一個成熟的COM組件,或者調用一個API函數,或者用指針去編寫實時/高效程序等。

  Visual C#中調用Excel的COM組件

  一個.NET組件事實上是一個.NET下的DLL,它包含的不僅是運行程序本身,更重要的是包含這個DLL的描述信息(Meta Data,即元數據),而一個COM組件是用其類庫(TLB)儲存其描述信息。這些COM組件都是非受管代碼,要在Visual C#中使用這些非受管代碼的COM組件,就必須把他們轉換成受管代碼的.NET組件。所以在用Visual C#調用Excel表格之前,必須完成從COM組件的非受管代碼到受管代碼的類庫的轉換。

  1、將Excel的COM組件轉換為.NET組件

  在項目中打開Add Reference對話框,選擇COM欄,之后在COM列表中找到"Microsoft Excel 9.0 Object Library"(Office 2000),然后將其加入到項目的References中即可。Visual C#.NET會自動產生相應的.NET組件文件,以后即可正常使用。

  這個轉換形成.NET組件不能單獨使用,它不過是以前的COM組件的一個外層包裝,在.NET中可以通過這個外層包裝去發現原來的COM組件並調用其相應的界面函數。所以它必須與原來的COM組件一起起作用。

  2、Visual C#打開Excel表格

  事實上,在C#中使用一個經轉換的COM組件和使用任何一個其它.NET組件完全一樣。可以用new關鍵字創建一個經轉換的COM組件,然后再像使用任何一個其它C#對象一樣使用這個組件對象。

  在轉換后的.NET組件中定義了一個命名空間Excel,在此命名空間中封裝了一個類Application,這個類和啟動Excel表格有非常重要的關系,在Visual C#中,只需要下列三行代碼就可以完成打開Excel表格的工作,具體如下:

Excel.Application excel = new Excel.Application ();//引用Excel對象
excel.Application.Workbooks.Add ( true );//引用Excel工作簿
excel.Visible = true ;//使Excel可視

  但此時的Excel表格是一個空的表格,沒有任何內容,下面就來介紹如何往Excel表格中輸入數據。

  3、往Excel表格中輸入數據

  在命名空間"Excel"中,還定義了一個類"Cell",這個類所代表的就是Excel表格中的一個單元格。通過給"Cell"賦值,從而實現往Excel表格中輸入相應的數據,下列代碼功能是打開Excel表格,並且往表格輸入一些數據。

Excel.Application excel = new Excel.Application () ;
excel.Application.Workbooks.Add ( true ) ;
excel.Cells[ 1 , 1 ] = "First Row First Column" ;
excel.Cells[ 1 , 2 ] = "First Row Second Column" ;
excel.Cells[ 2 , 1 ] = "Second Row First Column" ;
excel.Cells[ 2 , 2 ] = "Second Row Second Column" ;
excel.Visible = true ;  


一、調用Excel的方法:一般情況下有兩種方法調用Excel:

1、直接使用Delphi自帶的組件:在Form中分別放入ExcelApplication, ExcelWorkbook和ExcelWorksheet。
2、動態創建Excel文件:首先創建 Excel 對象,使用ComObj,Excel2000:

var ExcelApp: Variant;
ExcelApp := CreateOleObject( 'Excel.Application' );

二、導入數據:在程序中,我們可以將查詢到的數據(SQL、Access、)導入到Excel中。例如:用Adoquery查詢Access中的數據:

1、先查到所需的數據;
2、導入:i:=1;
Adoquery.First;
              while not Adoquery.Eof do
                Begin
                  ExcelApp.WorkSheets[1].Cells[i,1].Value := i;//添加序號的值
ExcelApp.WorkSheets[1].Cells[i,2].Value := Adoquery.FieldByName('cp_name').AsString;
                  ……
                  Inc(i);
Adoquery.Next;
                End;

當然也可以把Adotable、Adoquery、Table、Query等組件的數據導入到Excel中。

三、Excel的處理:如果在你已知Excel格式的情況下,可以控制Excel,如下:


1、 顯示當前窗口:ExcelApp.Visible := True;

2、 更改 Excel 標題欄:ExcelApp.Caption := '標題內容';

3、 添加新工作簿:ExcelApp.WorkBooks.Add;

4、 設置第2個工作表為活動工作表:ExcelApp.WorkSheets[2].Activate;

5、 給單元格賦值:ExcelApp.Cells[1,1].Value := '第一行第一列';

6、 設置指定列的寬度(單位:字符個數),以第一列為例:

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

7、 設置指定行的高度(單位:磅)(1磅=0.035厘米),以第二行為例:
ExcelApp.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米

8、文字水平居中:Excelid.worksheets[1].Rows[1].HorizontalAlignment := $FFFFEFF4;
文字垂直居中:Excelid.worksheets[1].Rows[1].VerticalAlignment := $FFFFEFF4;

9、 插入一行或一列:a. ExcelApp.ActiveSheet.Rows[2].Insert;
b. ExcelApp.ActiveSheet.Columns[1].Insert;

10、 刪除一行或一列:a. ExcelApp.ActiveSheet.Rows[2].Delete;
b. ExcelApp.ActiveSheet.Columns[1].Delete;

11、合並單元格:ExcelApp.worksheets[1].range[A1:F8'].Merge(abc);注:要聲明變量abc: Variant;

12、豎行顯示文字:ExcelApp.worksheets[1].Cells.Item[1,1].Orientation:= xlVertical;

13、單元格加邊線:ExcelApp.worksheets[1].Range[A1:F8].Borders.LineStyle := 1;

14、在第8行之前插入分頁符:ExcelApp.WorkSheets[1].Rows[8].PageBreak := 1;

15、在第4列之前刪除分頁符:ExcelApp.ActiveSheet.Columns[4].PageBreak := 0;

16、指定邊框線寬度:ExcelApp.ActiveSheet.Range[ 'B3 4' ].Borders[2].Weight := 3;
1-左    2-右   3-頂    4-底   5-斜( \ )     6-斜( / )

17、拷貝操作:a.拷貝整個工作表:ExcelApplication1.ActiveSheet.Used.Range.Copy;
b.拷貝指定區域:ExcelApplication1.ActiveSheet.Range[ 'A1:E2' ].Copy;
c.從A1位置開始粘貼:ExcelApplication1.ActiveSheet.Range.[ 'A1' ].PasteSpecial;
d.從文件尾部開始粘貼:ExcelApplication1.ActiveSheet.Range.PasteSpecial;

18、清除第一行第四列單元格公式:ExcelApp.ActiveSheet.Cells[1,4].ClearContents;

19、工作表保存:if not ExcelApp.ActiveWorkBook.Saved then
               ExcelApp.ActiveSheet.PrintPreview;

20、工作表另存為:ExcelApp.SaveAs( 'C:\Excel\Demo1.xls' );

21、放棄存盤:ExcelApp.ActiveWorkBook.Saved := True;

22、關閉工作簿:ExcelApp.WorkBooks.Close;

23、退出 Excel:ExcelApp.Quit;
下面是有關打印頁面控制的語句:

24、設置第一行字體屬性:ExcelApp.ActiveSheet.Rows[1].Font.Name := '隸書';
ExcelApp.ActiveSheet.Rows[1].Font.Color := clBlue;
ExcelApp.ActiveSheet.Rows[1].Font.Bold := True;
ExcelApp.ActiveSheet.Rows[1].Font.UnderLine := True;
ExcelApp.ActiveSheet.Rows[1].Font.size:=10;

25、進行頁面設置:a.頁眉:ExcelApp.ActiveSheet.PageSetup.CenterHeader := '報表演示';
b.頁腳:ExcelApp.ActiveSheet.PageSetup.CenterFooter := '共&N頁 第& 頁';
c.頁眉到頂端邊距2cm:ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;
d.頁腳到底端邊距3cm:ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;
e.頂邊距2cm:ExcelApp.ActiveSheet.PageSetup.TopMargin := 2/0.035;
f.底邊距2cm:ExcelApp.ActiveSheet.PageSetup.BottomMargin := 2/0.035;
g.左邊距2cm:ExcelApp.ActiveSheet.PageSetup.LeftMargin := 2/0.035;
h.右邊距2cm:ExcelApp.ActiveSheet.PageSetup.RightMargin := 2/0.035;
i.頁面水平居中:ExcelApp.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;
j.頁面垂直居中:ExcelApp.ActiveSheet.PageSetup.CenterVertically := 2/0.035;
k.打印單元格網線:ExcelApp.ActiveSheet.PageSetup.PrintGridLines := True;

26、打印預覽工作表:ExcelApp.ActiveSheet.PrintPreview;

27、打印輸出工作表:ExcelApp.ActiveSheet.PrintOut;
對Excel的其他控制:

28、excel的多單元格合計功能:ExcelApp..Cells[ARow, ACol].Formula
:= '= SUM($+IntToStr(BeginRow) + + IntToStr(EndRow) +');
注:聲明變量ARow, ACol: Integer;

29、打開已經存在的Excel文件: ExcelApplication1.Workbooks.Open (c:\a.xls
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,0);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM