标签:选择 文档 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文档学习,这里就不赘述了。
标签:选择 文档 catch 直接 sheet 效果 inter 绝对路径 方法
原文地址:https://www.cnblogs.com/qyxfirstblog/p/10077260.html