C#操作excel的打印分页符问题

2021-06-27 13:05

阅读:486

标签:选择   文档   catch   直接   sheet   效果   inter   绝对路径   方法   

  最近在帮公司winfrom项目组开发一个打印单据的功能,由于之前没有操作过excel(个人技术比较菜。。。),所以在开发过程中遇到了一些应该比较简单的(但我不会)问题。

  需求是打印出库单数据,出库单是以excel为模板打印出来,不过需要设定每页分固定的多少条数据,因为太多的话一张单据放不下,可以打印多张单据

  我的做法:是将数据导出到excel模板中,首先做好excel模板,只不过把固定的表头设定好就行(当然也可以用code直接写进去,那只需要一个空模板就好了,我这里可以直接在模板上设定好,没有影响)。为了不影响打印效果,使用打印分页符来处理该问题,

       1、首先选择微软自带的API:Microsoft.Office.Interop.Excel.Application,实例化一个对象:Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();

       2、加载模板Microsoft.Office.Interop.Excel.Workbook wb=excel.Workbooks.Open(“文件绝对路径”);

       3、我的模板放在了excel的第一个sheet里,所以var sheet = wb.Worksheets[1];

         4、这样模板就可以加载好了,下面就是讲数据填充进去就可以了,当然可以根据需求对应添加,这里只举个例子:sheet.Cells[i, j] = “111”;//将数据添加到sheet的第i行j列

  重点来了:将数据加载完后,接下来就需要分页处理了

         5、在需要分页的地方:sheet.HPageBreaks.Add(sheet.Range["A12"]);//假如在sheet的第13行开始分页,因为该方法会在指定单元格上方插入分页,即在第12行单元格上方添加分页符。(横向分页符)

                  sheet.VPageBreaks.Add(sheet.Range["F1"]); //在F列单元格的左侧添加分页符                                                                                                                                    (纵向分页符)

 

         6、然后覆盖所有数据设置打印区域:sheet.PageSetup.PrintArea = "A1:X20";//只打印sheet的A1-X20的区域(矩形区域)

        7、保存 :wb.SaveAs(savePath);//SaveAs()方法的参数挺多的,可以查看官方文档传递需要的参数,有如果文件存在则会提示是否覆盖已保存的文件,但是我在做的时候如果已存在的文件处于打开状态就会报错了,我解决的办法是:try...catch{}异常,

            判断异常然后给用户一个弹窗提示,检查是否有同名同类型的文件打开。 

       其他功能还有比如设置分页预览模式查看效果:sheet.ViewMode = ViewMode.Preview;

  当然还有很多功能,如果需要可以查询API文档学习,这里就不赘述了。

C#操作excel的打印分页符问题

标签:选择   文档   catch   直接   sheet   效果   inter   绝对路径   方法   

原文地址:https://www.cnblogs.com/qyxfirstblog/p/10077260.html


评论


亲,登录后才可以留言!