• winform 程序中复杂的报表输出


    ----这个是一个报表页面后台代码,在web页面引入 webbrowser 控件

    通过 webbrowser 实现打印,导出

        public partial class FrmStoreReport : Form

        {

            private string _printHtml = string.Empty;

            private string _printContent = string.Empty;

            public FrmStoreReport()

            {

                InitializeComponent();

            }

     

            private void FrmStoreReport_Load(object sender, EventArgs e)

            {

                this.WindowState = FormWindowState.Maximized;

                ConstructHtmlString();

                wbReportView.DocumentText = _printHtml;

               

            }

            #region 打印相关

            /// <summary>

            /// 打印字符串

            /// </summary>

            /// <param name="htmltable">待打印的字符串,包括表格的样式等</param>

            /// <param name="key">1、打印(默认);2、直接打印;3、打印预览;4、打印设置</param>

            /// <returns></returns>

            public string StringPrint(string htmltable, int key)  

            {  

                StringBuilder sb = new StringBuilder();  

                string Htmls = "";

                sb.Append(htmltable);

                switch (key)  

                {  

                    case 1://打印  

                        sb.Append("<script languge='javascript'>WebBrowser.ExecWB(6,1); window.opener=null;</script>"); break;  

                    case 2://直接打印  

                        sb.Append("<script languge='javascript'>WebBrowser.ExecWB(6,6); window.opener=null;</script>"); break;  

                    case 3://打印预览  

                        sb.Append("<script languge='javascript'>WebBrowser.ExecWB(7,1); window.opener=null;</script>"); break;  

                    case 4://打印设置  

                        sb.Append("<script languge='javascript'>WebBrowser.ExecWB(8,1); window.opener=null;</script>"); break;  

                    default: //打印  

                        sb.Append("<script languge='javascript'>WebBrowser.ExecWB(6,1); window.opener=null;</script>"); break;  

                }          

                Htmls = sb.ToString();  

                return (Htmls);

            }

     

            #region 打印html Header,style 定义

            protected const string HEADER = "<html xmlns:x=\"urn:schemas-microsoft-com:office:excel\">" +

                                          "<meta http-equiv=Content-Type content=\"text/html; charset=\"gb2312\">" +

                                          "<head>" +

                                          "<!--[if gte mso 9]><xml>" +

                                           "<x:ExcelWorkbook>" +

                                               "<x:ExcelWorksheets>" +

                                                   "<x:ExcelWorksheet>" +

                                                       "<x:Name>工作表标题</x:Name>" +

                                                       "<x:WorksheetOptions>" +

                                                           "<x:Print>" +

                                                               "<x:ValidPrinterInfo />" +

                                                           "</x:Print>" +

                                                       "</x:WorksheetOptions>" +

                                                   "</x:ExcelWorksheet>" +

                                               "</x:ExcelWorksheets>" +

                                           "</x:ExcelWorkbook>" +

                                       "</xml>" +

                                       "<![endif]-->";

            const string STYLE = "<style type=\"text/css\">" +

                                           ".spercent" +

                                           " {" +

                                           "   background-color:#ffff99;" +

                                           "   mso-number-format:0.00%;" +

                                           " }" +

                                            ".sId" +

                                           " {" +

                                           "   background-color:#ff6633;" +

                                           "   mso-number-format:0;" +

                                           " }" +

                                            ".sName" +

                                           " {" +

                                           "     color:red;" +

                                           " }" +

                                            ".sValue" +

                                           " {" +

                                           "   color:blue;" +

                                           "   mso-number-format:0;" +

                                           " }" +

                                           "</style>";

            #endregion

     

            private void ConstructHtmlString()

            {

                StringBuilder sbHtml =new StringBuilder();

                StringBuilder sbContent = new StringBuilder();

                sbHtml.Append(HEADER);

                sbHtml.Append(STYLE);

                sbHtml.Append("</head><body>");

                sbHtml.Append("<object ID='WebBrowser' WIDTH='0' HEIGHT='0' CLASSID='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2'></object>");

                sbContent.Append("<table border=\"1\" style=\"font-size:8pt\" width=\"100%\"><tr>");

                sbContent.Append("<th>ID</th>");

                sbContent.Append("<th>Name</th>");

                sbContent.Append("<th>Value</th>");

                sbContent.Append("<th>Percent</th>");

                for (int row = 1; row < 50; row++)

                {

                    sbContent.Append("<tr>");

                    sbContent.Append(string.Format("<td class=\"sId\">{0}</td>", row));

                    sbContent.Append(string.Format("<td class=\"sName\">{0}</td>", Guid.NewGuid().ToString()));

                    sbContent.Append(string.Format("<td class=\"sValue\">{0}</td>", new Random().Next()));

                    sbContent.Append(string.Format("<td class=\"spercent\">{0}</td>", new Random().NextDouble()));

                    sbContent.Append("</tr>");

                    sbContent.Append("<tr><td colspan='4'>dfdfdfd</td></tr>");

                }

                sbContent.Append("</table>");

                sbHtml.Append(sbContent.ToString() + "</body>");

                _printContent = sbHtml.ToString();

                _printHtml = _printContent+"</html>";

            }

            #endregion

            private void btnExport_Click(object sender, EventArgs e)

            {

                SaveFileDialog sfd = new SaveFileDialog();

                sfd.DefaultExt = "xls";

                sfd.Filter = "Excel文件|*.xls";

                sfd.FileName = dateTimePicker1.Value.ToString("yyyy-MM") + "库存报表";

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

                {

                    using (StreamWriter writer = new StreamWriter(sfd.FileName, true, System.Text.Encoding.GetEncoding("gb2312"), 512))

                    {

                        writer.WriteLine(_printHtml);

                    }

                }

     

            }

            private void btnPrintSet_Click(object sender, EventArgs e)

            {

                wbReportView.DocumentText =StringPrint(_printHtml, 4);

            }

     

            private void btnPrintPreView_Click(object sender, EventArgs e)

            {

                wbReportView.DocumentText = StringPrint(_printHtml, 3);

            }

            private void btnPrint_Click(object sender, EventArgs e)

            {

                wbReportView.DocumentText = StringPrint(_printHtml, 1);

            }

        }

    ----------------通过 webbrowser 打印,html 导出excel 实现复杂报表生成复杂动态 加合并的 报表

    在HTML 中用 table 画报表远比 winform 中简单多。

     

    --效果 

  • 相关阅读:
    nginx优化之配置文件优化一常用参数
    Centos7+LVS-DR+Apache负载均衡web实验
    LVS负载均衡原理
    Centos7+LVS-NAT+apache实验
    CentOS7.6 使用ceph-deploy部署mimic 13.2.8集群(一)
    linux关闭ACPI电源管理模块
    Jenkins + pipeline + Git + PHP (九)
    Jenkins-Master-slave架构(八)
    Jenkins参数化构建(七)
    Jenkins连接Git仓库时候报错Permission denied, please try again.
  • 原文地址:https://www.cnblogs.com/xianzuoqiaoqi/p/1644461.html
Copyright © 2020-2023  润新知