亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

C# winform打印excel的方法

2024-07-10 13:32:44
字體:
來源:轉載
供稿:網友

前言

c#做winform程序要求生成并打印Excel報告,為了不安裝Office相應組件,我選擇了NPOI來生成Excel報告,用winform的PrintDocument控件來觸發打印操作,而難點在于如何將excel轉換成Graphics對象,在NPOI中我只找到了excel打印的設置(如橫向/縱向),還需要打開excel去觸發打印操作,但項目要求是一次性直接實現打印,要用PrintDocument控件而不是再去操作excel。不得已重新搜索,發現了類庫Spire.xls,最終實現了要求。有什么錯誤或更簡潔的方法還請廣大博友不吝賜教。

思路

用npoi生成Excel =》 用spire.xls轉換成圖片.png =》 獲取生成的圖片,利用Graphic的drawimage方法對圖片進行操作,當然了,如果不介意的話,可以不對圖片進行操作:) =》使用printDocument控件的print方法實現打印( 當然這里可以直接用spire.xls直接生成Excel,但是Spire.xls的免費版本有每個sheet最多有150行的限制 )

知識點

【0】NPOI使用方法

下載:http://npoi.codeplex.com/releases/

【1】winform的printDocument控件

參考: https://docs.microsoft.com/en-us/dotnet/framework/winforms/advanced/how-to-print-a-multi-page-text-file-in-windows-forms

理解:

PrintDocument控件的作用是定義一個向打印機發送輸出的對象,有BeginPrint,PrintPage,EndPrint方法,當執行printdocument.Print()語句時,會檢查是否存在BeginPrint方法,存在則先調用。然后調用PrintPage方法,該方法會向PrintPageEcentArgs類中獲得一個空白的Graphics對象,我們可以對Graphics對象進行操作(可以理解對畫布進行繪制,Graphics對象有內置的類似DrawString,DrawPie的方法),在PrintPage方法的最后,會向打印設備發送這個Graphics對象。打印設備完成打印后,會檢查是否存在EndPrint方法,存在則調用。

【2】spire.xls使用方法

參考:.NET讀寫Excel工具Spire.Xls使用入門教程(1)

具體代碼

【1】winform使用的打印控件介紹

使用的插件截圖

printDocument1作用:定義一個向打印機發送輸出的對象

printPreviewDialog1作用:顯示一個對話框,向用戶顯示關聯文檔打印的樣子

printDialog1作用:顯示一個對話框,允許用戶選擇打印機并選擇其他打印選項(如分數,紙張方向)

【2】代碼展示

“直接打印” 按鈕的后臺設置

private void DirectPrint_Click(object sender, EventArgs e){isprint = false;GenerateExcel_Click(sender, e); //使用NPOI生成excelif (newsavefilepath != "" && isprint==true){isprint = false; ChangeExcel2Image(newsavefilepath); //利用Spire將excel轉換成圖片if (printDialog1.ShowDialog() == DialogResult.OK){ printDocument1.Print(); //打印}} }

"生成excel" 按鈕后臺設置

private void Generate_Click(object sender, EventArgs e){CreateExcel(); //使用NPOI生成excel內容SaveFileDialog savedialog = new SaveFileDialog(); //彈出讓用戶選擇excel保存路徑的窗口savedialog.Filter = " excel files(*.xlsx)|*.xlsx|All files(*.*)|*.*";savedialog.RestoreDirectory = true;savedialog.FileName = string.Format("銷售訂單審批單{0}", DateTime.Now.ToString("yyyyMMddHHmm"));if (savedialog.ShowDialog() == DialogResult.OK){//newsavefilepath是excel的保存路徑newsavefilepath = savedialog.FileName.ToString().Trim();using (FileStream newfs = new FileStream(newsavefilepath, FileMode.Create, FileAccess.ReadWrite)){singlexssfwk.Write(newfs); //將生成的excel寫入用戶選擇保存的文件路徑中newfs.Close();}} }

CreateExcel()方法舉例

using NPOI.XSSF.UserModel;XSSFWorkbook singlexssfwk;//注意,不同的NPOI版本調用的方法不一致,這里使用的版本是2.1.3.1private void CreatExcel() { //獲取模板excel的路徑string str = System.Environment.CurrentDirectory + "//XXXX.xlsx";if (File.Exists(str)){using (FileStream fs = new FileStream(str, FileMode.Open, FileAccess.Read)){singlexssfwk = new XSSFWorkbook(fs);fs.Close();}//獲取表XSSFSheet xssfsheet = (XSSFSheet)singlexssfwk.GetSheetAt(0);//創建行 XSSFRow xssfrow1 = (XSSFRow)xssfsheet.GetRow(1);//設置單元格內容xssfrow1.GetCell(0).SetCellValue("...");... ...    }else{... ...}}

ChangeExcel2Image()方法舉例

using Spire.Xls; public void ChangeExcel2Image(string filename){Workbook workbook = new Workbook();workbook.LoadFromFile(filename);Worksheet sheet = workbook.Worksheets[0];sheet.SaveToImage(imagepath); //圖片后綴.bmp ,imagepath自己設置}

執行printDocument1.Print()的方法會調用printDocument1_PrintPage方法

//在PrintPage方法中寫截取圖片 的代碼private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e){ #region 如果不需要截取圖片,可以不用寫以下代碼GC.Collect();Graphics g = e.Graphics; //imagepath是指 excel轉成的圖片的路徑using (Bitmap bitmap = new dBitmap(imagepath)){//如何截取自己摸索Rectangle newarea = new Rectangle();newarea.X = 0;newarea.Y = 50;newarea.Width = bitmap.Width;newarea.Height = bitmap.Height - 120;using (Bitmap newbitmap = bitmap.Clone(newarea, bitmap.PixelFormat)){g.DrawImage(newbitmap, 0, 0, newbitmap.Width - 200, newbitmap.Height - 150);}} #endregion}

備注:關于預覽的設置,關鍵在于printDocument1是個全局對象,直接設置printPreviewDialog1.Document = printDocument1; printPreviewDialog1.ShowDialog();即可,這個的原理沒有研究,反正這樣設置后,只要你處理好內容,就能在預覽中看到。

總結

以上就是我實現c# winform打印excel的經過,或許這只是一種比較冗雜的方法,如果有大佬有更精簡的方法,請不吝賜教。如有錯誤,也請不吝賜教。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美亚州一区二区三区| 欧美孕妇孕交黑巨大网站| 久久久噜噜噜久噜久久| 精品亚洲一区二区三区四区五区| 国产九九精品视频| 国产精品成人免费电影| 热久久视久久精品18亚洲精品| 亚洲精品wwww| 亚洲国产精品女人久久久| 亚洲视频999| 国产欧美日韩精品在线观看| 91国产精品91| 91精品久久久久久久久久久久久久| 欧美视频在线观看免费| 国产精品久久精品| 91精品视频专区| 日本a级片电影一区二区| 国产一区二区三区在线免费观看| 日韩av快播网址| 91大神福利视频在线| 亚洲精品电影在线| 久久久久久亚洲精品| 国产精品久久久久aaaa九色| 日韩成人中文电影| 日韩欧美精品网址| 国产成人福利夜色影视| 欧美日韩国产一区二区| 国产福利精品视频| 欧美在线免费看| 日韩av在线一区二区| 91国自产精品中文字幕亚洲| 97视频免费观看| 久久九九有精品国产23| 亚洲伊人第一页| 国产精品久久久久久久一区探花| 欧美一级黑人aaaaaaa做受| 亚洲最大中文字幕| 91国自产精品中文字幕亚洲| 亚洲精品久久久久中文字幕二区| 北条麻妃99精品青青久久| 亚洲第一中文字幕在线观看| 伊人av综合网| 亚洲天堂av网| 在线观看欧美成人| 欧美日韩在线视频观看| 少妇高潮久久久久久潘金莲| 曰本色欧美视频在线| 国产福利精品av综合导导航| 正在播放国产一区| 亚洲欧美日韩国产中文| 日韩免费电影在线观看| 狠狠躁夜夜躁人人爽天天天天97| 亚洲精品久久久久久下一站| 亚洲成人激情视频| 亚洲片av在线| 日韩经典一区二区三区| 国模视频一区二区| 日韩欧美国产中文字幕| 成人黄色片网站| 欧美激情精品久久久久久久变态| 久久亚洲精品视频| 视频一区视频二区国产精品| 日本久久久久久久| 日本19禁啪啪免费观看www| 国产在线精品成人一区二区三区| 午夜伦理精品一区| 久久久久久久电影一区| 97在线观看免费高清| 亚洲国产一区自拍| 国产精品精品一区二区三区午夜版| 欧美最猛性xxxxx(亚洲精品)| 尤物tv国产一区| 亚洲精品白浆高清久久久久久| 精品久久久久久亚洲国产300| 久久九九免费视频| 成人深夜直播免费观看| 91日本视频在线| 精品视频在线播放免| 亚洲精品小视频| 欧美成人精品一区二区| 国产精品一区二区久久久久| 亚洲国产古装精品网站| 精品久久久久久久中文字幕| 久久中国妇女中文字幕| 欧美成人免费全部观看天天性色| 中国人与牲禽动交精品| 久久久www成人免费精品张筱雨| 日韩成人av一区| 欧美天天综合色影久久精品| 成人免费观看49www在线观看| 久久久精品国产亚洲| 97精品一区二区视频在线观看| 日韩av成人在线观看| 久久精品国产96久久久香蕉| 日韩在线免费高清视频| 亚洲视频电影图片偷拍一区| 97视频免费看| 国产成人综合久久| 国产精品永久免费视频| 久久在线免费观看视频| 欧美疯狂性受xxxxx另类| 亚洲天堂网在线观看| 久久久久女教师免费一区| 成人性教育视频在线观看| 国产精品稀缺呦系列在线| 欧美激情xxxx性bbbb| 亚洲bt欧美bt日本bt| 亚洲激情在线观看| 国产精品视频资源| 中文字幕亚洲一区| 久久久久久久一区二区| 国产伦精品一区二区三区精品视频| 日韩大陆毛片av| 91亚洲国产成人久久精品网站| 欧美性xxxxx极品| 中文字幕免费精品一区| 最近2019免费中文字幕视频三| 91麻豆国产精品| 日韩三级成人av网| 国自产精品手机在线观看视频| 久久免费视频观看| 亚洲伊人第一页| 成人性生交大片免费观看嘿嘿视频| 91黑丝高跟在线| 亚洲欧美国产视频| 九九热r在线视频精品| 91成人精品网站| 中文字幕欧美日韩在线| 国产精品爽爽爽爽爽爽在线观看| 亚洲第一中文字幕| 日韩精品中文字幕在线播放| 91深夜福利视频| 亚洲va欧美va国产综合久久| 午夜精品一区二区三区av| 国产精品入口尤物| 日韩美女毛茸茸| 伊人久久五月天| 精品人伦一区二区三区蜜桃网站| 青草青草久热精品视频在线网站| 国产日韩精品在线播放| 色婷婷久久av| 日本19禁啪啪免费观看www| 亚洲欧美在线第一页| 日本久久久久久久久| 亚洲第一区中文字幕| 日韩国产欧美区| 国产成人精彩在线视频九色| 91av在线国产| 亚洲成成品网站| 国产精品丝袜白浆摸在线| 欧美日韩亚洲一区二| 精品亚洲aⅴ在线观看| 在线观看91久久久久久| 欧美激情一二三| 羞羞色国产精品| 欧美裸体男粗大视频在线观看| 中文字幕在线看视频国产欧美在线看完整| 欧美一区二区三区免费观看| 欧美激情二区三区| 欧美成人免费观看| 亚洲国产精品久久久久| 久久这里只有精品视频首页| 懂色av中文一区二区三区天美| 国产精品久久久久久久久免费看|