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);