Spire.xls+excel文件实现单据打印

报表和单据打印,通常都是使用fastreport之类的,因为有了现成的xls模板样式,如果转成fastreport那还需要花时间,是用spire.xls这个玩意简单,超好用。

一.引用

using Spire.Xls;

二.基本的操作

// 创建工作簿,读写,保存,保存

private void save_Click(object sender, EventArgs e)

{

Workbook workbook = new Workbook();

workbook.LoadFromFile(Application.StartupPath + "\\sample.xlsx");

// 获取第一个工作表

Worksheet sheet = workbook.Worksheets[0];

// 读取数据

string value1 = sheet.Range["A1"].Value.ToString();

string value2 = sheet.Range["B1"].Value.ToString();

// 写入数据

sheet.Range["A1"].Value = "Hello"; //方式一

sheet.Range[2,2].Value = "World"; //方式二

//保存文件

workbook.SaveToFile("c:\\example.xlsx", ExcelVersion.Version2013);

}
三.打印

使用对话框模式输出,不知道原因是什么,怎么选择打印机都是从默认打印机输出。

myxls.LoadFromFile(Application.StartupPath + "\\sample.xlsx");

sheet = myxls.Worksheets[0];

sheet.PageSetup.PrintArea = "A1:H20";

PrintDialog dialog = new PrintDialog();

dialog.PrinterSettings.PrintRange = System.Drawing.Printing.PrintRange.SomePages;

dialog.PrinterSettings.FromPage = 0;

dialog.AllowPrintToFile = true;

dialog.AllowCurrentPage = true;

dialog.AllowSomePages = true;

myxls.PrintDialog = dialog;

myxls.PrintDocument.PrinterSettings.Copies = 1;

if (dialog.ShowDialog() == DialogResult.OK)

{

myxls.PrintDocument.Print();

}

找不出原因,归结为可能是免费版本限制功能的原因。也不深究,换一个方式,在页面上增加了一个下拉框,窗体加载时将打印机列出来供选择。

using System.Drawing.Printing;

foreach (var item in System.Drawing.Printing.PrinterSettings.InstalledPrinters)

{

this.con_printer.Items.Add(item);

}

this.con_printer.Text= new System.Drawing.Printing.PrintDocument().PrinterSettings.PrinterName;//默认打印机

调用打印的时候,直接指定打印机名称,曲线救国成功。

myxls.PrintDocument.PrintController = new StandardPrintController();

PrinterSettings settings = myxls.PrintDocument.PrinterSettings;

settings.PrinterName = this.con_printer.Text;

settings.Duplex = Duplex.Simplex;

settings.FromPage = 1;

settings.ToPage = 1;

myxls.PrintDocument.Print();

四.插入图片

需要在打印页面插入二维码, 这个先用zxing产生图片,在指定位置插入图片

ExcelPicture mypic = sheet.Pictures.Add(1, 12, Generate3(barcode, 300, 300)); //在第1行12列插入

mypic.Width = 90;

mypic.Height = 90;

mypic.LeftColumnOffset = 75;

mypic.TopRowOffset = 20;

丝滑。

相关推荐
Envyᥫᩣ3 小时前
C#语言:从入门到精通
开发语言·c#
IT技术分享社区9 小时前
C#实战:使用腾讯云识别服务轻松提取火车票信息
开发语言·c#·云计算·腾讯云·共识算法
△曉風殘月〆16 小时前
WPF MVVM入门系列教程(二、依赖属性)
c#·wpf·mvvm
逐·風17 小时前
unity关于自定义渲染、内存管理、性能调优、复杂物理模拟、并行计算以及插件开发
前端·unity·c#
m0_6569747421 小时前
C#中的集合类及其使用
开发语言·c#
九鼎科技-Leo21 小时前
了解 .NET 运行时与 .NET 框架:基础概念与相互关系
windows·c#·.net
九鼎科技-Leo1 天前
什么是 ASP.NET Core?与 ASP.NET MVC 有什么区别?
windows·后端·c#·asp.net·mvc·.net
.net开发1 天前
WPF怎么通过RestSharp向后端发请求
前端·c#·.net·wpf
小乖兽技术1 天前
C#与C++交互开发系列(二十):跨进程通信之共享内存(Shared Memory)
c++·c#·交互·ipc
幼儿园园霸柒柒1 天前
第七章: 7.3求一个3*3的整型矩阵对角线元素之和
c语言·c++·算法·矩阵·c#·1024程序员节