C#操作excel打印的示例
using System; using System.Data; using System.IO; using System.Runtime.InteropServices; using System.Threading; using System.Windows.Forms; using Microsoft.Office.Core; using Excel = Microsoft.Office.Interop.Excel; namespace WindowsFormsApplication1 { public partial class Form1 : Form { private bool isStartPrint = false; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //string OriginalPath = Path.GetDirectoryName(Application.ExecutablePath) + "\\IMS.accdb"; ////初始化數(shù)據(jù)庫(kù) //DataBase.OleDbObject.InitDatabase(OriginalPath); //DataBase.OleDbObject.OpenDb(); //int k=DataBase.OleDbObject.Select("select * from ElementInventory").Rows.Count; //初始化要寫入Excel的數(shù)據(jù) DataTable dt = new DataTable(); for (int i = 0; i < 11; i++) { DataColumn dc = new DataColumn(); dc.ColumnName = "name" + i; dc.DataType = typeof(string); dt.Columns.Add(dc); } for (int i = 0; i < 30; i++) { DataRow dr = dt.NewRow(); if (i % 2 == 0) { dr[0] = "測(cè)試用例" + i + "號(hào),開(kāi)始測(cè)試是否自動(dòng)換行,以及頁(yè)面高度自適應(yīng)。"; } else { dr[0] = "測(cè)試用例" + i + "號(hào)"; } for (int j = 1; j < 11; j++) { dr[j] = j; } dt.Rows.Add(dr); } if (!isStartPrint) { Thread th = new Thread(delegate () { DataTabletoExcel(dt, "測(cè)試.xlsx"); }); th.Start(); isStartPrint = true; } else { MessageBox.Show("打印程序已啟用,請(qǐng)稍后……", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } //DataTabletoExcel(dt, "測(cè)試.xlsx"); } public void DataTabletoExcel(System.Data.DataTable dtTemp, string strFileName) { int rowNum = dtTemp.Rows.Count; //先得到dtTemp的行數(shù) int columnNum = dtTemp.Columns.Count; //列數(shù) Excel.Application ExcelApp = new Excel.Application(); //聲明一個(gè)應(yīng)用程序類實(shí)例 //ExcelApp.DefaultFilePath = ""; //默認(rèn)文件路徑導(dǎo)出excel的路徑還是在參數(shù)strFileName里設(shè)置 //ExcelApp.DisplayAlerts = true; //ExcelApp.SheetsInNewWorkbook = 1;///返回或設(shè)置 Microsoft Excel 自動(dòng)插入到新工作簿中的工作表數(shù)目。 Excel.Workbook worksBook = ExcelApp.Workbooks.Add(); //創(chuàng)建一個(gè)新工作簿 Excel.Worksheet workSheet = (Excel.Worksheet)worksBook.Worksheets[1]; //在工作簿中得到sheet。 if (workSheet == null) { System.Diagnostics.Debug.WriteLine("ERROR: worksheet == null"); return; } workSheet.Name = "測(cè)試Sheet1"; //工作表的名稱 workSheet.Cells.WrapText = true; //設(shè)置所有列的文本自動(dòng)換行 workSheet.Cells.EntireRow.AutoFit(); //設(shè)置所有列自動(dòng)調(diào)整行高 #region 繪制列 ///自定義方法,向sheet中繪制列 RangeMark(workSheet, "A1", "A2", "合并豎列1"); RangeMark(workSheet, "B1", "B2", "合并豎列2"); RangeMark(workSheet, "C1", "C2", "合并豎列3"); RangeMark(workSheet, "D1", "D2", "合并豎列4"); RangeMark(workSheet, "E1", "E2", "合并豎列5"); RangeMark(workSheet, "F1", "H1", "合并橫行1"); RangeMark(workSheet, "F2", "F2", "合并橫行1.1"); RangeMark(workSheet, "G2", "G2", "合并橫行1.2"); RangeMark(workSheet, "H2", "H2", "合并橫行1.3"); RangeMark(workSheet, "I1", "K1", "合并橫行2"); RangeMark(workSheet, "I2", "J2", "合并橫行2.1"); RangeMark(workSheet, "K2", "K2", "合并橫行2.2"); #endregion //將DataTable中的數(shù)據(jù)導(dǎo)入Excel中 for (int i = 0; i < rowNum; i++) { for (int j = 0; j < columnNum; j++) { workSheet.Cells[i + 3, j + 1] = dtTemp.Rows[i][j].ToString(); //文本 } } ///保存路徑 string filePath = @"C:\Users\Admin\Desktop\" + strFileName; if (File.Exists(filePath)) { try { File.Delete(filePath); } catch (Exception) { } } ExcelApp.Visible = true; //------------------------打印頁(yè)面相關(guān)設(shè)置-------------------------------- workSheet.PageSetup.PaperSize = Excel.XlPaperSize.xlPaperA4;//紙張大小 workSheet.PageSetup.Orientation = Excel.XlPageOrientation.xlLandscape;//頁(yè)面橫向 //workSheet.PageSetup.Zoom = 75; //打印時(shí)頁(yè)面設(shè)置,縮放比例百分之幾 workSheet.PageSetup.Zoom = false; //打印時(shí)頁(yè)面設(shè)置,必須設(shè)置為false,頁(yè)高,頁(yè)寬才有效 workSheet.PageSetup.FitToPagesWide = 1; //設(shè)置頁(yè)面縮放的頁(yè)寬為1頁(yè)寬 workSheet.PageSetup.FitToPagesTall = false; //設(shè)置頁(yè)面縮放的頁(yè)高自動(dòng) workSheet.PageSetup.LeftHeader = "Nigel";//頁(yè)面左上邊的標(biāo)志 workSheet.PageSetup.CenterFooter = "第 &P 頁(yè),共 &N 頁(yè)";//頁(yè)面下標(biāo) workSheet.PageSetup.PrintGridlines = true; //打印單元格網(wǎng)線 workSheet.PageSetup.TopMargin = 1.5 / 0.035; //上邊距為2cm(轉(zhuǎn)換為in) workSheet.PageSetup.BottomMargin = 1.5 / 0.035; //下邊距為1.5cm workSheet.PageSetup.LeftMargin = 2 / 0.035; //左邊距為2cm workSheet.PageSetup.RightMargin = 2 / 0.035; //右邊距為2cm workSheet.PageSetup.CenterHorizontally = true; //文字水平居中 //------------------------打印頁(yè)面設(shè)置結(jié)束-------------------------------- ///http://blog.csdn.net/wanmingtom/article/details/6125599 worksBook.PrintPreview(); //打印預(yù)覽 //worksBook.PrintOutEx(); //直接打印 //worksBook.Close(); //關(guān)閉工作空間 //ExcelApp.Quit(); //退出程序 //workSheet.SaveAs(filePath); //另存表 KillProcess(ExcelApp); //殺掉生成的進(jìn)程 isStartPrint = false; //打印完畢 GC.Collect(); //垃圾回收機(jī)制 } /// <summary> /// 引用Windows句柄,獲取程序PID /// </summary> /// <param name="Hwnd"></param> /// <param name="PID"></param> /// <returns></returns> [DllImport("User32.dll")] public static extern int GetWindowThreadProcessId(IntPtr Hwnd, out int PID); /// <summary> /// 殺掉生成的進(jìn)程 /// </summary> /// <param name="AppObject">進(jìn)程程對(duì)象</param> private static void KillProcess(Excel.Application AppObject) { int Pid = 0; IntPtr Hwnd = new IntPtr(AppObject.Hwnd); System.Diagnostics.Process p = null; try { GetWindowThreadProcessId(Hwnd, out Pid); p = System.Diagnostics.Process.GetProcessById(Pid); if (p != null) { p.Kill(); p.Dispose(); } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine("進(jìn)程關(guān)閉失敗!異常信息:" + ex); } } /// <summary> /// 創(chuàng)建表頭單元格,包括合并單元格 /// </summary> /// <param name="workSheet">工作表</param> /// <param name="startCell">單元格起始格編號(hào)</param> /// <param name="endCell">單元格結(jié)束編號(hào)</param> /// <param name="strText">單元格名稱</param> private static bool RangeMark(Excel.Worksheet workSheet, string startCell, string endCell, string strText) { //創(chuàng)建一個(gè)區(qū)域?qū)ο?。第一個(gè)參數(shù)是開(kāi)始格子號(hào),第二個(gè)參數(shù)是終止格子號(hào)。比如選中A1——D3這個(gè)區(qū)域。 Excel.Range range = (Excel.Range)workSheet.get_Range(startCell, endCell); if (range == null) { System.Diagnostics.Debug.WriteLine("ERROR: range == null"); return false; } range.Merge(0); //合并方法,0的時(shí)候直接合并為一個(gè)單元格 range.Font.Size = 16; //字體大小 range.Font.Name = "黑體"; //字體 range.WrapText = true; //文本自動(dòng)換行 range.EntireRow.AutoFit(); //自動(dòng)調(diào)整行高 //range.RowHeight = 20; //range.EntireColumn.AutoFit(); //自動(dòng)調(diào)整列寬 range.ColumnWidth = 15; range.HorizontalAlignment = XlVAlign.xlVAlignCenter; //橫向居中 range.Value = strText; //合并單元格之后,設(shè)置其中的文本 range.Interior.ColorIndex = 20; //填充顏色 range.Cells.Borders.LineStyle = 1; //設(shè)置單元格邊框的粗細(xì) return true; } } }
以上就是C#操作excel打印的示例的詳細(xì)內(nèi)容,更多關(guān)于c# 打印的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- c# 實(shí)現(xiàn)打印機(jī)狀態(tài)查詢與阻塞打印
- c#使用Aspose打印文件的示例
- C# 調(diào)用exe傳參,并獲取打印值的實(shí)例
- 如何利用C#打印九九乘法表
- c# winform 解決PictureBox 無(wú)法打印全部圖片的問(wèn)題
- C#操作Word打印的示例
- C# 打印網(wǎng)頁(yè)不顯示頁(yè)眉頁(yè)腳的實(shí)現(xiàn)方法
- C#實(shí)現(xiàn)掃描槍掃描二維碼并打印(實(shí)例代碼)
- C#利用PrintDocument定制打印單據(jù)的小例子
- C#打印PDF文檔的10種方法(小結(jié))
- C# TSC打印二維碼和條形碼的實(shí)現(xiàn)方法
- C# winform打印excel的方法
- c# 如何實(shí)現(xiàn)web打印插件
相關(guān)文章
C#使用泛型實(shí)現(xiàn)刪除數(shù)組中重復(fù)元素
這篇文章主要為大家詳細(xì)介紹了C#如何使用泛型實(shí)現(xiàn)刪除數(shù)組中重復(fù)元素,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02C# WinForm中Panel實(shí)現(xiàn)用鼠標(biāo)操作滾動(dòng)條的實(shí)例方法
由于在WinForm中Panel不能直接響應(yīng)鼠標(biāo)的滾動(dòng)事件,只好采用捕獲窗體的滾動(dòng)事件。2013-03-03使用C#?11的靜態(tài)接口方法改進(jìn)?面向約定?的設(shè)計(jì)方法
我們知道接口是針對(duì)契約的定義,但是一直以來(lái)它只能定義一組“實(shí)例”的契約,而不能定義類型的契約,因?yàn)槎x在接口中的方法只能是實(shí)例方,這篇文章主要介紹了使用C#?11的靜態(tài)接口方法改進(jìn)面向約定?的設(shè)計(jì),需要的朋友可以參考下2022-12-12C#實(shí)現(xiàn)簡(jiǎn)單學(xué)生成績(jī)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)簡(jiǎn)單學(xué)生成績(jī)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08C#中ListView控件實(shí)現(xiàn)窗體代碼
這篇文章主要介紹了C#中ListView控件實(shí)現(xiàn)窗體的核心代碼,非常不錯(cuò),具有參考借鑒價(jià)值,對(duì)c#listview相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2016-08-08C#使用System.Threading.Timer實(shí)現(xiàn)計(jì)時(shí)器的示例詳解
以往一般都是用 System.Timers.Timer 來(lái)做計(jì)時(shí)器,其實(shí) System.Threading.Timer 也可以實(shí)現(xiàn)計(jì)時(shí)器功能,下面就跟隨小編一起來(lái)學(xué)習(xí)一下如何使用System.Threading.Timer實(shí)現(xiàn)計(jì)時(shí)器功能吧2024-01-01C#中事務(wù)處理和非事務(wù)處理方法實(shí)例分析
這篇文章主要介紹了C#中事務(wù)處理和非事務(wù)處理方法,較為詳細(xì)的分析了C#中事務(wù)處理與非事務(wù)處理的使用技巧,對(duì)于使用C#進(jìn)行數(shù)據(jù)庫(kù)程序開(kāi)發(fā)有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07C#實(shí)現(xiàn)簡(jiǎn)單合并word文檔的方法
這篇文章主要介紹了C#實(shí)現(xiàn)簡(jiǎn)單合并word文檔的方法,涉及C#針對(duì)word文檔的讀取、插入、保存等技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-09-09