当前位置: 首页 > news >正文

C# 设置Excel打印选项及打印excel文档

C# 设置Excel打印选项及打印excel文档

打印Excel文档是一个很常见的操作,但有时候我们会碰到各种不同的打印需求,例如只打印一个Excel工作表的其中一部分,或打印时每页都有表头,或把工作表中超出1页所有内容打印到1页上等等,这时我们需要对Excel的打印选项进行设置。这篇文章主要是分享如何使用Excel组件及C#来设置一些常见的Excel打印选项及打印Excel文档。

下面这个Excel工作表共含有17行,20列数据:

                       

目标:将第7, 8行的所有数据打印到一页上,并打印表头(标题行)。

创建一个WinForm项目,使用如下命名空间:

using System;
using System.Drawing.Printing;
using System.Windows.Forms;
using Spire.Xls;

 

步骤1创建一个新的workbook对象并加载Excel文档。

Workbook workbook = new Workbook();
workbook.LoadFromFile("Sample.xlsx");

 

步骤2获取该Excel文档的第一个工作表,并设置打印选项。

Worksheet sheet = workbook.Worksheets[0];

 

下面列出几个常设置的打印选项:

设置打印区域/范围:

sheet.PageSetup.PrintArea = "A7:T8";

 

设置打印表头(标题行):

sheet.PageSetup.PrintTitleRows = "$1:$1";

 

设置excel工作表缩放为一页宽一页高:

sheet.PageSetup.FitToPagesWide = 1;
sheet.PageSetup.FitToPagesTall = 1;

这里可以设置它们的值为0或1来改变打印效果以满足不同需求。 

 

除此之外还可以设置页面方向及打印页面大小等:

设置页面方向:

sheet.PageSetup.Orientation = PageOrientationType.Portrait;

 

设置打印页面大小:

sheet.PageSetup.PaperSize = PaperSizeType.PaperA3;

 

步骤3创建一个新的PrintDialog对象,设置dialog属性及打印页面范围并打印文档。

PrintDialog dialog = new PrintDialog();
dialog.AllowPrintToFile = true;
dialog.AllowCurrentPage = true;
dialog.AllowSomePages = true;
dialog.AllowSelection = true;
dialog.UseEXDialog = true;
dialog.PrinterSettings.Duplex = Duplex.Simplex;
dialog.PrinterSettings.FromPage = 0;
dialog.PrinterSettings.ToPage = 8;
dialog.PrinterSettings.PrintRange = PrintRange.SomePages;
workbook.PrintDialog = dialog;
PrintDocument pd = workbook.PrintDocument;
if (dialog.ShowDialog() == DialogResult.OK)
{ pd.Print(); }

 

运行程序会出现如下对话框:

 

这里我选择Microsoft XPS Document Writer将这个excel文档打印为XPS格式,得到的XPS文件如下:

 

全部代码:

using System;
using System.Drawing.Printing;
using System.Windows.Forms;
using Spire.Xls;
 
namespace Print_Excel_in_csharp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Workbook workbook = new Workbook();
            workbook.LoadFromFile("Sample.xlsx");           

            Worksheet sheet = workbook.Worksheets[0];
            sheet.PageSetup.PrintArea = "A7:T8";
            sheet.PageSetup.PrintTitleRows = "$1:$1";
            sheet.PageSetup.FitToPagesWide = 1;
            sheet.PageSetup.FitToPagesTall = 1;
            //sheet.PageSetup.Orientation = PageOrientationType.Landscape;
            //sheet.PageSetup.PaperSize = PaperSizeType.PaperA3;
           
            PrintDialog dialog = new PrintDialog();
            dialog.AllowPrintToFile = true;
            dialog.AllowCurrentPage = true;
            dialog.AllowSomePages = true;
            dialog.AllowSelection = true;
            dialog.UseEXDialog = true;
            dialog.PrinterSettings.Duplex = Duplex.Simplex;
            dialog.PrinterSettings.FromPage = 0;
            dialog.PrinterSettings.ToPage = 8;
            dialog.PrinterSettings.PrintRange = PrintRange.SomePages;
            workbook.PrintDialog = dialog;
            PrintDocument pd = workbook.PrintDocument;
            if (dialog.ShowDialog() == DialogResult.OK)
            { pd.Print(); }
        }

    }

}

 

相关文章:

  • 软件工程之软件项目管理
  • 时间管理
  • Linux_RHEL7_LDAP、Autofs服务
  • Oracle权限(二)权限相关的动态性能视图与数据字典视图
  • 线程的实现
  • Java 动态生成复杂 Word
  • Competition-based User Expertise Score Estimation-20160520
  • 地址转换协议ARP
  • netstat -aon|findstr 8888 终止进程
  • 判断jQuery元素是否隐藏
  • 第二阶段—个人工作总结01
  • IO流的操作规律
  • C#创建https请求并使用pfx证书
  • Xcode 7 缺少 *.dylib库的解决方法
  • [C#基础]说说lock到底锁谁?
  • Android交互
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • codis proxy处理流程
  • cookie和session
  • Git 使用集
  • Javascript编码规范
  • JSDuck 与 AngularJS 融合技巧
  • leetcode388. Longest Absolute File Path
  • Node 版本管理
  • Vue2 SSR 的优化之旅
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 阿里云Kubernetes容器服务上体验Knative
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 简单实现一个textarea自适应高度
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 用 Swift 编写面向协议的视图
  • 用简单代码看卷积组块发展
  • 在electron中实现跨域请求,无需更改服务器端设置
  • elasticsearch-head插件安装
  • Java总结 - String - 这篇请使劲喷我
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​flutter 代码混淆
  • ​queue --- 一个同步的队列类​
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • #WEB前端(HTML属性)
  • #微信小程序:微信小程序常见的配置传值
  • $L^p$ 调和函数恒为零
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (pojstep1.3.1)1017(构造法模拟)
  • (层次遍历)104. 二叉树的最大深度
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (一)SpringBoot3---尚硅谷总结
  • .net Application的目录
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .Net中ListT 泛型转成DataTable、DataSet
  • .net中的Queue和Stack