• 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;

    丝滑。
     

  • 相关阅读:
    UE5C++学习(一)--- 增强输入系统
    Ajax异步请求的五个步骤
    测试概念第三篇—注册登陆测试用例
    含免费次数的常用API接口
    Windows10/11 缩放与布局自定义
    【商鼎云更新】你想要的相册备份功能,已经安排上了​
    datart:Invalid database configuration. Datart is running in demo mode
    基于STC15单片机两路ADC测量串口显示-proteus仿真-源程序
    LQ0148 统计子矩阵【前缀和】
    windows下MySQL服务不见,服务无法启动,服务闪退,提示“本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止”
  • 原文地址:https://blog.csdn.net/samson_www/article/details/132744617