<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        C# winform打印excel的方法

        來源:懂視網 責編:小采 時間:2020-11-27 22:35:22
        文檔

        C# winform打印excel的方法

        C# winform打印excel的方法:前言 c#做winform程序要求生成并打印Excel報告,為了不安裝Office相應組件,我選擇了NPOI來生成Excel報告,用winform的PrintDocument控件來觸發打印操作,而難點在于如何將excel轉換成Graphics對象,在NPOI中我只找到了excel打印的設置(如橫向/縱
        推薦度:
        導讀C# winform打印excel的方法:前言 c#做winform程序要求生成并打印Excel報告,為了不安裝Office相應組件,我選擇了NPOI來生成Excel報告,用winform的PrintDocument控件來觸發打印操作,而難點在于如何將excel轉換成Graphics對象,在NPOI中我只找到了excel打印的設置(如橫向/縱

        前言

        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生成excel
        if (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.1
        private 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();即可,這個的原理沒有研究,反正這樣設置后,只要你處理好內容,就能在預覽中看到。

        總結

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        C# winform打印excel的方法

        C# winform打印excel的方法:前言 c#做winform程序要求生成并打印Excel報告,為了不安裝Office相應組件,我選擇了NPOI來生成Excel報告,用winform的PrintDocument控件來觸發打印操作,而難點在于如何將excel轉換成Graphics對象,在NPOI中我只找到了excel打印的設置(如橫向/縱
        推薦度:
        標簽: 方法 excel 辦法
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 一级做a爰片久久毛片免费看| 亚洲av乱码一区二区三区按摩 | 91免费福利视频| 又大又黄又粗又爽的免费视频| 亚洲精品久久久久无码AV片软件| 国产精品免费观看久久| 免费中文字幕一级毛片| 最新亚洲人成无码网站| 四虎影视永久免费视频观看| 亚洲精品免费视频| 99久久99久久免费精品小说| 亚洲免费闲人蜜桃| 在线免费观看中文字幕| 亚洲av最新在线观看网址| 国产午夜免费福利红片| 无套内谢孕妇毛片免费看看 | 鲁大师在线影院免费观看| 亚洲一区二区中文| 国产片AV片永久免费观看| 亚洲欧洲免费无码| 免费国产美女爽到喷出水来视频| av片在线观看永久免费| 亚洲成a人片在线观看中文动漫| 亚洲视频免费观看| 国产亚洲精品AAAA片APP| 国产亚洲美女精品久久久2020| 少妇太爽了在线观看免费视频| 日韩成人免费在线| 久久久久国色AV免费观看| 四虎免费久久影院| 99免费精品视频| 亚洲AV无码一区二区三区人| 最近新韩国日本免费观看| 亚洲人成人无码.www石榴| 精品亚洲成α人无码成α在线观看 | 亚洲精品自拍视频| 国产一级一片免费播放i| 两个人看的www高清免费观看| 亚洲一卡2卡4卡5卡6卡在线99| 亚洲av无码天堂一区二区三区 | 亚洲一本之道高清乱码|