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;

丝滑。

相关推荐
SteveDraw2 小时前
C++动态链接库封装,供C#/C++ 等编程语言使用——C++动态链接库概述(总)
开发语言·c++·c#·封装·动态链接库
Kookoos3 小时前
性能剖析:在 ABP 框架中集成 MiniProfiler 实现性能可视化诊断
后端·c#·.net·abp vnext·miniprofiler
阿翰5 小时前
自动 GitHub Readme 20 种语言翻译平台 - OpenAiTx 开源免费
c#·.net
枫叶kx8 小时前
1Panel运行的.net程序无法读取系统字体(因为使用了docker)
c#
军训猫猫头14 小时前
96.如何使用C#实现串口发送? C#例子
开发语言·c#
不爱写代码的玉子15 小时前
HALCON透视矩阵
人工智能·深度学习·线性代数·算法·计算机视觉·矩阵·c#
开开心心就好18 小时前
高效Excel合并拆分软件
开发语言·javascript·c#·ocr·排序算法·excel·最小二乘法
一名用户19 小时前
unity实现自定义粒子系统
c#·unity3d·游戏开发
钢铁男儿1 天前
C# 类和继承(扩展方法)
java·servlet·c#
爱炸薯条的小朋友1 天前
C#由于获取WPF窗口名称造成的异常报错问题
windows·c#·wpf