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 中简单多。

 

--效果 

原文地址:https://www.cnblogs.com/xianzuoqiaoqi/p/1644461.html