Winform 匯出成Excel列印

來源:互聯網
上載者:User

WinForm中 直接調用Excel的預覽列印功能,但不顯示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;        }

設定Excel的格式

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以其功能強大,介面友好等受到了許多使用者的歡迎。在設計應用系統時,對於不同的使用者,他們對於列印的需求是不一樣的,如果要使得程式中的列印功能適用於每一個使用者,可以想象程式設計是十分複雜的。由於Excel表格的功能強大,又由於幾乎每一台機器都安裝了它,如果把程式處理的結果放到Excel表格中,這樣每一個使用者就可以根據自己的需要在Excel中定製自己的列印。這樣不僅使得程式設計簡單,而且又滿足了諸多使用者的要求,更加實用了。那麼用Visual C#如何調用Excel,如何又把資料存放到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:D4' ].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頁 第&P頁';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.xlsEmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0); 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.