//打印操作,套打、打印、预览
        enum PrintFlag
        {
            /// <summary>
            /// 套打,只打印没有印刷的部分
            /// </summary>
            CasePrint,
            /// <summary>
            /// 打印全部
            /// </summary>
            PrintAll,
            /// <summary>
            /// 预览全部
            /// </summary>
            PreviewAll        
        }

//套打、打印、预览三个按钮关联些委托实例
        private void Print_Click(object sender, System.EventArgs e)
        {
            Button btn = (Button)sender;
            switch(btn.Tag.ToString())
            {
                case "套打":
                    Print(PrintFlag.CasePrint);
                    break;
                case "打印":
                    Print(PrintFlag.PrintAll);
                    break;
                case "预览":
                    Print(PrintFlag.PreviewAll);
                    break;            
            }        
        }

private void Print(PrintFlag p_printFlag)
        {

//制作步骤:
            /*    1、用Excel作出与要打印的样式一样的电子表格存为模板;
             *     技巧:最好把第一行与第一列作为空行,以利于调整边距(虽然Excel、打印机可调整页边距), 尽量的在需要调整的地方多空几行与几列,以利于调整套打对准
             *
             *  2、如同本程序一样,将Excel作为套打的模板,直接将要打印的数据写入;
             *
             *  3、打印,根据实际的效果调整Excel模板行高列宽及空出的行列, 直到能够准确的套上。将模板拷贝一份,清除模板上的文字与网格线,做成套打的模板。
             */

#region 套打、打印预览

//用Excel打印,步骤为:打开、写数据、打印预览、关闭
            GoldPrinter.ExcelExpert.ExcelBase excel = new GoldPrinter.ExcelExpert.ExcelBase();    
            string strFileName = "invoice.xlt";            //模板文件名

if (p_printFlag == PrintFlag.CasePrint)
            {
                strFileName = "invoiceCase.xlt";        //套打模板文件名
            }

string strExcelTemplateFile = System.IO.Path.GetFullPath(@"../../ExcelTemplate/" + strFileName);
                        
            excel.Open(strExcelTemplateFile);                            //用模板文件
            excel.Visible = false;                                        //建议:如果excel不可见且在编程情况下写数据特别是大量数据时
            excel.ScreenUpdating = false;                                //设置此开关能大大提高效率。写完后如要可见,再设置此属性为真刷新屏幕。
            excel.Caption = "税 务 机 关 代 开 统 一 发 票(国 税)";    //"MIS金质打印通  通打天下报表";

//在模板中写入要打印的数据

//***发票抬头***

//年月日
            excel.SetCellText(7,"B",txtYear.Text + "年" + txtMonth.Text + "月" + txtDay.Text + "日" );    
            
            //付款方名称    
            excel.SetCellText(8,"D",txtPayer.Text);
            //收款方名称    
            excel.SetCellText(9,"D",txtCollecter.Text);
            //及地址、电话    
            excel.SetCellText(11,"D",txtCollecterAddTel.Text);

// 代开普通发票    申 请 表 号 码    
            excel.SetCellText(8,"J",txtInvoiceApplicationNo.Text);
            //收款方识别号或 证 件 号 码    
            excel.SetCellText(9,"J",txtCollecterID.Text);

//***品名及金额、备注***
            //B14到B23是品名   F14到F23为金额

excel.SetCellText("B14",txtP1.Text);
            excel.SetCellText("F14",txtJ1.Text);
            
            excel.SetCellText("B15",txtP2.Text);
            excel.SetCellText("F15",txtJ2.Text);

excel.SetCellText("B16",txtP3.Text);
            excel.SetCellText("F16",txtJ3.Text);

excel.SetCellText("B17",txtP4.Text);
            excel.SetCellText("F17",txtJ4.Text);

excel.SetCellText("B18",txtP5.Text);
            excel.SetCellText("F18",txtJ5.Text);

excel.SetCellText("B19",txtP6.Text);
            excel.SetCellText("F19",txtJ6.Text);

excel.SetCellText("B20",txtP7.Text);
            excel.SetCellText("F20",txtJ7.Text);

excel.SetCellText("B21",txtP8.Text);
            excel.SetCellText("F21",txtJ8.Text);

excel.SetCellText("B22",txtP9.Text);
            excel.SetCellText("F22",txtJ9.Text);

excel.SetCellText("B23",txtP10.Text);
            excel.SetCellText("F23",txtJ10.Text);

//备注
            //excel.SetCellText(14,"I",txtMemo.Imag.);

//***发票总金额***

//合计人民币   (大写)        
            excel.SetCellText(24,"D",txtTotalUpper.Text);
            //合计人民币   (小写)
            excel.SetCellText(24,"K",txtTotalLower.Text);

//税额   (大写)    
            excel.SetCellText(25,"D",txtTaxUpper.Text);
            //税额   (小写)    
            excel.SetCellText(25,"L",txtTaxLower.Text);

//***发票尾***
            //税控码
            excel.SetCellText(26,"C",txtTaxControlCode.Text);
            //开票人:    
            excel.SetCellText(26,"H",txtWriter.Text);

//刷新Excel屏幕
            excel.ScreenUpdating = true;

if (p_printFlag == PrintFlag.CasePrint || p_printFlag == PrintFlag.PrintAll)
            {
                excel.Print();                //打印
            }
            else
            {
                excel.PrintPreview();        //预览
            }

excel.Close();                    //关闭并释放    
            
            #endregion
    
        }

private void frmInvoice_Load(object sender, System.EventArgs e)
        {
            //初始当日日期
            System.DateTime dt = System.DateTime.Now;
            SetToday(dt);
        }

private void btnExit_Click(object sender, System.EventArgs e)
        {
            this.Close();
        }

//回车
        private void frmInvoice_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)13)
            {
                SendKeys.Send("{TAB}");
            }
        }

//金额小写转人民币大写
        private void txtTotalLower_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            SetUpperMoney();
        }

//重新总计
        private void txtJX_TextChanged(object sender, System.EventArgs e)
        {
            double dblMoney = 0;

dblMoney += GetInputMoney(txtJ1.Text);
            dblMoney += GetInputMoney(txtJ2.Text);
            dblMoney += GetInputMoney(txtJ3.Text);
            dblMoney += GetInputMoney(txtJ4.Text);
            dblMoney += GetInputMoney(txtJ5.Text);
            dblMoney += GetInputMoney(txtJ6.Text);
            dblMoney += GetInputMoney(txtJ7.Text);
            dblMoney += GetInputMoney(txtJ8.Text);
            dblMoney += GetInputMoney(txtJ9.Text);
            dblMoney += GetInputMoney(txtJ10.Text);

txtTotalLower.Text = dblMoney.ToString();
            SetUpperMoney();

}

//改变税率重算
        private void cboTaxRate_TextChanged(object sender, System.EventArgs e)
        {
            SetUpperMoney();
        }

private void btnRefDate_Click(object sender, System.EventArgs e)
        {
            cldSelect.Visible = true;
            cldSelect.SetDate(new DateTime(int.Parse(txtYear.Text),int.Parse(txtMonth.Text),int.Parse(txtDay.Text)));
            cldSelect.Focus();
        }

private void cldSelect_DateSelected(object sender, System.Windows.Forms.DateRangeEventArgs e)
        {
            SetToday(e.End);
            cldSelect.Visible = false;        
        }

//大写合计人民币、税额
        private void SetUpperMoney()
        {
            try
            {
//                string strUpper = GoldPrinter.ExcelExpert.ChineseNum.GetUpperMoney(Double.Parse(txtTotalLower.Text));
//                //合计人民币
//                txtTotalUpper.Text = strUpper;
//
//                strUpper
=
GoldPrinter.ExcelExpert.ChineseNum.GetUpperMoney(Double.Parse(txtTotalLower.Text)
* Double.Parse(cboTaxRate.Text) / 100);
//                //税额 = 合计人民币 * 税率
//                txtTaxUpper.Text = strUpper;

}
            catch{}                
        }

private double GetInputMoney(string p_text)
        {
            double dblReturn = 0;
            try
            {
                dblReturn = double.Parse(p_text);
            }
            catch{}

return dblReturn;
        }

private void SetToday(System.DateTime dt)
        {
            txtYear.Text = dt.Year.ToString();    
            
            txtMonth.Text = GetLengthTwoDate(dt.Month.ToString());
            txtDay.Text = GetLengthTwoDate(dt.Day.ToString());    
        }

private string GetLengthTwoDate(string p_MonthOrDay)
        {
            string strReturn = p_MonthOrDay;
            if (strReturn.Length == 1)
            {
                strReturn = "0" + strReturn;
            }

return strReturn;
        }

}//End Class
}//End Namespace

C#用 excel 作为模板打印的更多相关文章

  1. js以excel为模板的打印

    使用excel为模板打印的好处是格式容易调整,这种方法要求客户端系统配置高度统一,譬如excel安装版本一致,存在服务器上的excel模板必须与客户端excel版本一致,而且不能用其他版本的excel ...

  2. Python开发-实现Excel套打打印

    一.目的 目前本人就职与甲方的工作,由于公司的ERP比较烂无法完美的设计套打,就想着自己用Python开发一个套打工具. 二.开发过程 刚开始我打算用Html的方式生成打印的文档,但是有两个无法解决的 ...

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

    C# 设置Excel打印选项及打印excel文档 打印Excel文档是一个很常见的操作,但有时候我们会碰到各种不同的打印需求,例如只打印一个Excel工作表的其中一部分,或打印时每页都有表头,或把工作 ...

  4. java动态生成带下拉框的Excel导入模板

    在实际开发中,由于业务需要,常常需要进行Excel导入导出操作.以前做一些简单的导入时,先准备一个模板,再进行导入,单有十几. 二十几个导入模板时,往往要做十几.二十几个模板.而且,当在模板中需要有下 ...

  5. C# 对Excel文档打印时的页面设置

    1.对打印页面的朝向,页宽,页高进行设置 参考源码[1] using Excel = Microsoft.Office.Interop.Excel; Excel.Application tmpExce ...

  6. 删除Excel中的打印预览留下的打印线

    Excel 工作表打印后,会留有几条虚线打印线.如下图所示:     不少同学反映,他们尝试了很多操作却仍然无法消除.难道除了重新打开就没有别的办法了? 可以这样做: 在 Excel 2010 中,单 ...

  7. JXLS导出Excel(模板导出)

    1.导包 在pom.xml中加入依赖如下: <dependency> <groupId>org.jxls</groupId> <artifactId>j ...

  8. 按照已有的模板打印小票<二> ——调用windows打印机打印 可设置字体样式

    按照已有的模板打印小票<二> ——调用windows打印机打印 可设置字体样式 之前写过一篇文章<按照已有的模板输出一(如发票)>,是关于如何给已有的模板赋值.在项目的实践过程 ...

  9. 项目产品化——Excel数据库模板化导入(java)

    Excel导入可能是代码开发中比較常见的功能,一个项目假设有多个地方须要excel导入数据库.那么开发的工作量也将比較大,项目产品化过程中,将这么一个类似的功能进行封装合并也是必要的.封装好的代码仅仅 ...

随机推荐

  1. java-并发之高性能对象

    Hadoop之RPC          Hadoop的RPC主要是通过Java的动态代理(Dynamic Proxy)与反射(Reflect)实现,代理类是由java.lang.reflect.Pro ...

  2. Fluent Nhibernate code frist简单配置

    Fluent Nhibernate code frist简单配置   前言 在以前的项目开发过程中使用nhibernate做完orm映射工具需要编写大量的xml映射文件,项目过程中往往会因为一个字段等 ...

  3. ngx-push-stream模块源码学习(五)——内存清理

    1.定时器         采用nginx自身的定时器管理机制,具体细节待学习过nginx源码后加以补充 2.channel的生成周期 (0).初始(诞生)         发布.订阅均有可能产生ch ...

  4. Castle Windsor 项目中快速使用

    Castle Windsor 项目中快速使用 新建项目如下: 一个模型类,一个接口,一个实现方法.我的目的很明确就是在UI层通过Castle 调用数据访问层的方法. 添加项目引用 CastleDemo ...

  5. 自己动手用maven构建基于SSI的java EE应用

    上篇跟大家聊了聊maven的简单使用,之前也写了一篇搭建基于SSI(struts2,spring,ibatis)的javaEE开发环境的文章,但是那篇只是给初学者搭建一个简单的SSI应用的框架,其实我 ...

  6. 惊喜:opera换webkit内核后完美支持SDCH压缩协议

    csdn发邮件警告说再不发文章就取消我的专家头衔了.呵呵,其实我只是在csdn暴露了我的帐号密码以后不得已把csdn密码修改成一个我自己都记不住的货,所以很少上来了. 言归正传.我们从去年就在QQ空间 ...

  7. android jni——helloworld

    看了网上好多牛人写的学习系列都是用HelloWorld作为开始,我们这里也用HelloWorld来开始我们的学习,首先我们来介绍下JNI吧. JNI作为java代码和C/C++的桥梁而存在的,为了让j ...

  8. javadataAbout stack and heap in JAVA(2)

    改章节个人在上海喝咖啡的时候突然想到的...近期就有想写几篇关于javadata的笔记,所以回家到之后就奋笔疾书的写出来发表了 The stack is much faster than the he ...

  9. 【未来畅想】未来的电信通讯行业,账号密码将取代sim卡

    今天看到一条新闻,是关于LG模块化的手机,LG将手机电池模块化了,很多人一片叫好,但是我认为模块化手机无法成为未来的趋势,原因如下:模块化必然要增加手机的卡口.插口增,意味着体积也大大增加,手机正因为 ...

  10. ONLY三行脚本 SQL数据恢复到指定时间点

    经常看到有人误删数据,或者误操作,特别是Update和Delete的时候没有加WHERE ... 然后就喊爹喊娘了,怕是亲爹妈也无奈摇肩. 话说,如果没有犯过错误,那你还算是程序猿(媛)麽?!没了偶尔 ...