初次写博客,有哪些不足的地方,还请多多指点,给予建议,谢谢!
如若想要源码,请留言。
    
 
本实例是在Webservice 中通过excel做模板来打印标签。
具体需求是:一个订单一页纸打印4行分录,如果超过4行,则再次按照原格式换纸打印,如果行数未满4行,则补空行。
一、实现步骤:

1、首先在EXCEL 画好模版 (后缀名是 .xlt )
2、在程序中调用EXCEL 填充数据
3、调用EXCEL打印方法打印

二、源码重点讲解:
1、List<> 泛型集合保存打印的数据,通过它可以删除已经打印过的数据

 示例:

for (int i = 0; i <= list.Count; i++)
 {
        if (i > 0) i--; //每当执行完下一次的时候,将这个值初始化为0,即i-- 
        if (nindex == Convert.ToInt32(pagesize)) break;  //如果超过指定的行数,则跳出循环
        FitemData model = list[i]; 
        ..........
        list.Remove(model); //移除当前行
}
2、While 循环:当条件为真的时候执行循环体,先判断后执行,循环次数不固定
示例:

 while (list.Count > 0)
 {
        PrintExccel(ref list, damountcount.ToString(), FirstPageText.ToString(), PageCount.ToString(), PageSize.ToString(), ref strmes);
        FirstPageText++;  } 

=========================源码讲解==============================

 /// <summary>
 /// 打印方法
 /// </summary>
 /// <param name="dt">打印的数据</param>
 /// <param name="strmes">bug返回的异常信息</param>  private void Print(DataTable dt, ref string strmes)
 {
        List<FitemData> list = new List<FitemData>();
        decimal damountcount = 0.00M; //合计小写金额
        try
        {
            foreach (DataRow dr in dt.Rows)
            {
                FitemData model = new FitemData();
                model.F_106 = dr["F_106"].ToString();
                model.FAmount = Convert.ToDecimal(dr["FAmount"].ToString()).ToString("f2");
                model.FPrice = Convert.ToDecimal(dr["FPrice"].ToString()).ToString("f2");
                model.FUnitName = dr["FUnitName"].ToString();
                model.Fdate = dr["fdate"].ToString();
                model.Fbillno = dr["fbillno"].ToString();
                model.FQty = dr["FQty"].ToString();
                damountcount += Convert.ToDecimal((model.FAmount));
                list.Add(model);
            } 
 
            int PageSize = Convert.ToInt32(ConfigurationManager.AppSettings["PageSize"]);    //每页行数
            int PageCount = 0;  //总页数
            int FirstPageText = 1; //首页
            PageCount = list.Count % PageSize > 0 ? list.Count / PageSize + 1 : list.Count / PageSize;
 
            while (list.Count > 0)
            {
                PrintExccel(ref list, damountcount.ToString(), FirstPageText.ToString(), PageCount.ToString(), PageSize.ToString(), ref strmes);
                FirstPageText++;
            }
        }
        catch (Exception ex)
        {
            strmes = ex.Message;
        }
   }
 
/// <summary>
/// excel 打印
/// </summary>
/// <param name="list">总记录数</param>
/// <param name="damountcount">小写金额总计</param>
/// <param name="firsrpagetext">页码数</param>
/// <param name="pagesize">每页行数</param>
/// <param name="strmes">错误参数回写</param>
private void PrintExccel(ref List<FitemData> list, string damountcount, string firsrpagetext, string pagecount, string pagesize, ref string strmes)
{
        try
        {               int rowBase = 4,colBase = 1,rowIndex = rowBase,colIndex = colBase, nindex = 0;             decimal dfamount = 0.0M;  
  
            Excel.Application excelapp;
            excelapp = new Microsoft.Office.Interop.Excel.Application();
            Excel.Workbook book = excelapp.Workbooks.Open(System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"\ReportFile\Report.xlt",
                Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
 
            Excel.Worksheet st1 = (Excel.Worksheet)book.Worksheets[1]; // 选择的工作表,序号默认是从1开始即(Sheet0)             st1.Cells[2, 2] = list[0].Fdate;
            st1.Cells[2, 7] = list[0].Fbillno;
            st1.Cells[3, 1] = "商品名称";                for (int i = 0; i <= list.Count; i++)
            {
                if (i > 0) i--;
                if (nindex == Convert.ToInt32(pagesize)) break;  //如果超过指定的行数,则跳出循环
                FitemData model = list[i];
 
                //复制格式 插入一个新行
                Excel.Range range = (Excel.Range)st1.Rows[rowBase, Missing.Value];
                range.Insert(Excel.XlInsertShiftDirection.xlShiftDown, Missing.Value);
 
                st1.Cells[rowBase, colIndex] = model.F_106;
                colIndex = colIndex + 2;
                st1.Cells[rowBase, colIndex] = model.FUnitName;
                colIndex++;
                st1.Cells[rowBase, colIndex] = "'" + model.FQty;
                colIndex++;
                st1.Cells[rowBase, colIndex] = "'" + model.FPrice;
                colIndex++;
                st1.Cells[rowBase, colIndex] = "'" + model.FAmount;
            
                rowBase++;
                colIndex++;
                rowIndex++;
                colIndex = colBase;
                dfamount += Convert.ToDecimal(model.FAmount);  
                nindex++;
                list.Remove(model);  
            }
 
            if (nindex < Convert.ToInt32(pagesize))
            {
                for (int i = 0; i < Convert.ToInt32(pagesize) - nindex; i++)
                {
                    //复制格式 插入一个新行
                    Excel.Range range = (Excel.Range)st1.Rows[rowBase, Missing.Value];
                    range.Insert(Excel.XlInsertShiftDirection.xlShiftDown, Missing.Value);
                    rowBase++;
                    colIndex++;
                    rowIndex++;
                    colIndex = colBase;
                }
            } 
 
            Excel.Range rangedel = (Excel.Range)st1.Rows[rowIndex, Missing.Value];
            rangedel.EntireRow.Delete(Excel.XlDeleteShiftDirection.xlShiftUp);   //删除多余行 (即固定订单分录行数下多出的一行)
 
            st1.Cells[rowIndex, 2] = "'" + damountcount; //dfamount.ToString("f2");
            st1.Cells[rowIndex, 6] = "'" + dfamount.ToString("f2");
            st1.Cells[rowIndex + 1, 2] = MoneyToUpper(Convert.ToDecimal(damountcount).ToString("f2"));
            st1.Cells[rowIndex + 1, 7] = "第  " + firsrpagetext + "  联";
            st1.Cells[rowIndex + 2, 7] = "共  " + pagecount + "  联";
 
            excelapp.Visible = false;   //不显示出来
            string strprintpath = ConfigurationManager.AppSettings["PrinterName"]; //打印机名称 
            st1.PrintOut(Type.Missing, Type.Missing, Type.Missing, Type.Missing, strprintpath, Type.Missing, Type.Missing, Type.Missing);  //直接打印  
 
            book.Saved = true;
            excelapp.Workbooks.Close();
            excelapp.Visible = false;
            excelapp.Quit(); 
            GC.Collect();
            //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
        }
        catch (Exception ex)
        {
            strmes = ex.Message;
        } 
}

 
 
 

C# 标签打印示例 1的更多相关文章

  1. PHPCMS 标签与示例

    一.SEO优化: 获取栏目的关键字:{$SEO['keyword']} 获取栏目的描述:{$SEO['description']} 判断栏目的title是否存在或为空,如果是的话,则用站点的title ...

  2. Virgo标签打印

    去年刚换新的公司,熟悉新的业务和代码,在修改公司打印标签的时候,感觉到无比烦躁与头痛.只因为不好维护,所有的标签打印,全部是GDI+绘制,每次修改微调,都只能全部运行才能看到效果.程序过大,编译过慢, ...

  3. 生鲜配送管理系统_升鲜宝V2.0 小标签打印功能【代配送商品打印小标签功能】说明_15382353715

    小标签打印说明 小标签打印可以打印本系统的订单商品数量,也可以把外部的订单商品导入本系统进行打印. 打印本系统中的订单商品操作说明[上篇文章已经讲解相关的操作说明] 打印本系统之外的订单商品明细清单 ...

  4. 生鲜配送管理系统_升鲜宝V2.0 小标签打印功能说明_15382353715

    小标签打印说明 小标签打印可以打印本系统的订单商品数量,也可以把外部的订单商品导入本系统进行打印. 打印本系统中的订单商品操作说明 1.1    界面说明 1.2     查询条件 1.2.1     ...

  5. java continue break 关键字 详解 区别 用法 标记 标签 使用 示例 联系

    本文关键词: java continue break 关键字 详解 区别  用法 标记  标签 使用 示例 联系   跳出循环 带标签的continue和break 嵌套循环  深入continue ...

  6. JSTL中forEach标签应用示例【转】【补】

    forEach样例 <%@ page language="java" import="java.util.*" pageEncoding="ut ...

  7. 使用FastReport报表工具生成标签打印文档

    在我们实际开发报表的时候,我们需要按一定的业务规则组织好报表的模板设计,让报表尽可能的贴近实际的需求,在之前的随笔中<使用FastReport报表工具生成报表PDF文档>介绍了FastRe ...

  8. jsp的三种自定义标签 写法示例

    1.自定义方法标签 引入方式示例: <%@ taglib prefix="fns" uri="/WEB-INF/tlds/fns.tld" %> 写 ...

  9. 让pre标签自动换行示例代码

    pre 元素可定义预格式化的文本.被包围在 pre 元素中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体. <pre> 标签的一个常见应用就是用来表示计算机的源代码.对于技术博客经 ...

随机推荐

  1. 高性能ORM框架XLinq功能详细介绍

    之前简单介绍了XLinq的一些功能,有很多功能都没有提到,现在给XLinq加了一些功能,这次把所有功能都介绍一遍. 设计目标 易用性 在使用一个框架的时候 应该没几个人会喜欢写一大堆的配置文件吧 也应 ...

  2. php+js 瀑布流源码

    官方网站:更多源码 新浪微博:QQ公众号 QQ:各种源码 602902342 大牛技术群: 452207697 下载地址:http://pan.baidu.com/s/1bnNipI3 密码: h93 ...

  3. MongoDB-C# Driver账户密码登录问题

    MongoDb在3.0之后添加了SCRAM-SHA-1,用户验证模式.添加的用户,默认登录协议也是这个. 在登陆的时候就要选择使用这种方式登录.有的gui客户端的登录验证方式还是MONGODB-CR. ...

  4. java学习笔记 (7) —— 实现简单的上传处理

    1.下载apache 的 commons-fileupload.jar 包及 commons-io.jar 2.引入到lib 文件夹下 3.新建uploadApache.jsp <%@ page ...

  5. Google的Guava工具类splitter和apache stringutil对比 编辑

    一直用的是apache的stringutil工具类,其实google的工具类项目 guava中居然也有字符串的分隔类splitter的,在 http://code.google.com/p/guava ...

  6. JS原型的剖析与理解

    原型相关的概念 关于面向对象的概念 类 class 在js中就是构造函数 在传统的面向对象语言中,使用一个叫类的东西定义模版,然后使用模版创建对象 在构造方法中也具有类似的功能,因此称其为类 实例与对 ...

  7. python入门安装

    一.在python官网上下载python3.4或python2.7版本,这两个版本目前比较稳定,安装第3方包相对而言没有什么问题. 二.安装成功后,在计算机->属性->高级系统设置-> ...

  8. JVM调优总结 + jstat 分析(转)

    [转] JVM调优总结 + jstat 分析 JVM调优总结 + jstat 分析 jstat -gccause pid 1 每格1毫秒输出结果jstat -gccause pid 2000 每格2秒 ...

  9. C语言---volatile(我的工程笔记本)

    一般说来,volatile用在如下的几个地方: 1.中断服务程序中修改的供其它程序检测的变量需要加volatile: 2.多任务环境下各任务间共享的标志应该加volatile: 3.存储器映射的硬件寄 ...

  10. 【Android纳米学位】project 0 - 问题汇总

    1.页面布局 参考:http://www.xuebuyuan.com/1100763.html 从不知道如何下手到开始布局出想要的样子,使用线性布局及属性 margin,padding 2.添加点击事 ...