@版权声明:本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出,
本文链接https://www.jianshu.com/p/aae8962b3dbd
如有问题, 可邮件(yumxuanyi@qq.com)咨询。
关键词 : VSTO 、Excel、ExportAsFixedFormat、PDF
问题描述
我们可以通过Excel.WorkBook.ExportAsFixedFormat方法将工作表或工作簿打印为PDF文件。这样对于大量的文件进行批量操作,会大大提高效率。
但是,在打印输出pdf文件时往往不是将整个工作簿一起全部打印为一份pdf文件。而是根据不同的情况选出工作簿中的一个或几个工作表(Excel.WorkSheet或Excel.WorkSheets),将这些选择的工作表单独的打印为一份PDF文件。
本文章提供了一种解决方法,可以实现一个工作簿中一个或多个工作表输出为一份PDF
解决方法
- 定义一个List集合,将所需要打印的的工作表的名字存储到集合中。
List<string> listWorkSheetNames = new List<string>();//用于存放需要打印的工作表的名称
- 根据不同的条件,将需要的工作表名添加的集合中。代码实现省略
- 调用ExportAsFixedFormat方法进行打印
workbook.Active();//打印前必须激活需要打印的工作簿
Excel.Sheets sheets = workbook.Worksheets[listWorkSheetNames .ToArray()];//需要打印的工作表的集合
workbook.Active();//再次激活需要打印的工作簿 经过多次测试后这里最好加上这句 不要省略
sheets.Select(true);//将工作表集合选中 这里将形成一个"工作组"
//使用如下方法进行打印
workbook.ActiveSheet.ExportAsFixedFormat(Excel.XlFixedFormatType.xlTypePdf,pdfPath,Excel.XlFixedFormatQuality.xlQualityStandard,true,false,System.Type.Missing,System.Type.Missing,fasle);
//注意以上是用workbook.ActiveSheet的ExportAsFixedFormat方法。
//pdfPath为打印后的pdf文件的路径
引伸
- 在进行批量打印时为方法Excel不断刷新造成闪烁。可以将ScreenUpdating设置为false;
Globals.ThisAddin.Application.ScreenUpDating = false;//关闭屏幕更新
注意:
1. 关闭更新设置后,在打印操作完成或其他情况退出时一定要将ScreenUpdateing重新设置为true
2. 在Word打印为Pdf时 ,不要将ScreenUpDating 设置为False。这样会造成页眉页脚的横线消失
- 为方法批量操作打开excle过程中会弹出窗体。(如更新链接窗体)可以将DisplayAlerts设置为false;
Globals.ThisAddIn.Application.DisplayAlerts = false;//禁止弹出对话框