• jqgrid mvc 导出excel


      这段时间由于项目需要,需有个共通的导出功能,刚开始通过网上查看资料采用了 jqgrid 中很普遍的导出方式,这里就不说了,感兴趣的可以看看http://blog.csdn.net/fover717/article/details/8178346(jqgrid 表格数据导出),因为自己是初次接触jqgrid 项目,就采用了这种导出方式,经测试发现确实存在 只能在IE 系列的浏览器上才行;

       于是就试着看在前台能直接改动该方法,发现思路无法进行,接着就想通过ajax调用后台方法进行导出 (而这也是这几天一直走不通的败笔),刚开始考虑最笨的方法:就是通过调用excel控件 的方法,试着将结果生成的excel方法存储在自己定死了的路径下面;实现这一步后,就想能不能将存储路径改为人为选择的路径,这网上方法很多,但大部分都是将服务端查询出的数据 通过 dataset 、datagrid、GridView,datatable  等方式进行转换成 xml、html 后下载,而我也试了很多种 基本上都通过了,却没提供 下载的提示;

    最后发现是 不能用ajax做下载,用location.href=xxx等 类似操作就你能实现;

    总结:1. 导出已实现:注意 不能用ajax做下载,用location.href=xxx就行了; 2.导出具体实现方法很多,但合适的才是最好的:此采用了 将数据转换为DataTable 后转换为html流 进行导出,可设置列字段类型;详细见面代码; 3.mvc 中 可以用 @Html.ActionLink("导出数据", "ExportData") 调用导出函数ExportData(); 4.控制 文件名包含中文防止乱码的方法: System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8); 5.导出excel 大概流程:   a.从数据库获取相关数据;   b.生成相应的 html 数据流(个人欣赏html数据流)或在服务端生成excel文件;   c.数据流传递到客户端提供下载;6.思路是关键,平时的积累很重要啊。

     System.Data.DataTable dt = new System.Data.DataTable();
                    dt.Columns.Add("订单号");
                    dt.Columns.Add("派车时间");
                    dt.Columns.Add("起始地");
                    dt.Columns.Add("目的地");
                    dt.Columns.Add("产品编码");
                    dt.Columns.Add("产品名称");
                    dt.Columns.Add("责任人");
                    dt.Columns.Add("预计车次");
                    dt.Columns.Add("车牌号");
                    dt.Columns.Add("任务车次");
                    dt.Columns.Add("运输车次");
                    dt.Columns.Add("完成率");
                    foreach (var item in list)
                    {
                        DataRow dr = dt.NewRow();
                        dr["订单号"] = item.订单号;
                        dr["派车时间"] = item.派车时间;
                        dr["起始地"] = item.起始地;
                        dr["目的地"] = item.目的地;
                        dr["产品编码"] = item.产品编码;
                        dr["产品名称"] = item.产品名称;
                        dr["责任人"] = item.责任人;
                        dr["预计车次"] = item.预计车次;
                        dr["车牌号"] = item.车牌号;
                        dr["任务车次"] = item.任务车次;
                        dr["运输车次"] = item.运输车次;
                        dr["完成率"] = item.完成率;
                        dt.Rows.Add(dr);
                    }
                    //设置导出列类型
                    StringBuilder content = new StringBuilder();
                    int i = 0;
                    int cl = dt.Columns.Count;
                    foreach (DataRow row in dt.Rows)
                    {
                        for (i = 0; i < cl; i++)
                        {
                            //头加tr
                            if (i == 0)
                                content.Append("<tr align='center' >");
                            object obj = row[dt.Columns[i].Caption];
                            Type type = obj.GetType();
                            if (dt.Columns[i].Caption == "订单号")
                            {
                                content.AppendFormat("<td style='vnd.ms-excel.numberformat:@'>{0}</td>", obj);
                            }
                            else
                            {
                                content.AppendFormat("<td>{0}</td>", obj);
                            }
                            //尾加/tr
                            if (i == cl - 1)
                                content.Append("</tr>");
                        }
                    }
    
                    ExportHelper.StreamExport(strFileName, dt, content.ToString());
      //DataTable 转换为html 导出
            public static bool StreamExport(string fileName, System.Data.DataTable dt, string strtd)
            {
                if (fileName == string.Empty)
                {
                    return false;
                }
                StringBuilder content = new StringBuilder();
                int i = 0;
                int cl = dt.Columns.Count;
                content.Append("<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:excel' xmlns='http://www.w3.org/TR/REC-html40'>");
                content.Append("<head><title></title><meta http-equiv='Content-Type' content=\"text/html; charset=gb2312\">");
                //注意:[if gte mso 9]到[endif]之间的代码,用于显示Excel的网格线,若不想显示Excel的网格线,可以去掉此代码
                content.Append("<!--[if gte mso 9]>");
                content.Append("<xml>");
                content.Append(" <x:ExcelWorkbook>");
                content.Append("  <x:ExcelWorksheets>");
                content.Append("   <x:ExcelWorksheet>");
                content.Append("    <x:Name>" + fileName + "</x:Name>");
                content.Append("    <x:WorksheetOptions>");
                content.Append("      <x:Print>");
                content.Append("       <x:ValidPrinterInfo />");
                content.Append("      </x:Print>");
                content.Append("    </x:WorksheetOptions>");
                content.Append("   </x:ExcelWorksheet>");
                content.Append("  </x:ExcelWorksheets>");
                content.Append("</x:ExcelWorkbook>");
                content.Append("</xml>");
                content.Append("<![endif]-->");
                content.Append("</head><body><table> ");
                //标题
                content.Append("<tr align='center'><td colspan='" + dt.Columns.Count + "'><strong>" + fileName + "</strong></td></tr>");
                //content.Append("<tr align='center'></tr>");
                content.Append("<tr align='center'> <td colspan='" + dt.Columns.Count + "'>");
                content.Append("<table border='1' >");
                content.Append("<tr align='center' >");
                for (i = 0; i < cl; i++)
                {
                    content.Append("<td>" + dt.Columns[i].Caption.ToString() + "</td>");
                }
                content.Append("</tr>");
                           content.Append(strtd);
                content.Append("</table></td></tr>");
                content.Append("</table></body></html>");
    
                content.Replace("&nbsp;", "");
                System.Web.HttpContext.Current.Response.Clear();
                System.Web.HttpContext.Current.Response.Buffer = true;
                System.Web.HttpContext.Current.Response.ContentType = "application/ms-excel";
                //System.Web.HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                System.Web.HttpContext.Current.Response.Charset = "GB2312";
                System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
                fileName = System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);
                System.Web.HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment; filename=" + fileName);
                System.Web.HttpContext.Current.Response.Write(content.ToString());
                System.Web.HttpContext.Current.Response.End();
                return true;
            }
     

      

  • 相关阅读:
    CSS
    html5
    XHTML
    HTML
    git 教程 --git revert 命令
    Git 教程 --git merge 命令
    git 教程 --git reset 命令
    git 教程 --git cherry-pick 命令
    git 教程 --git stash命令
    git 教程 --git diff功能
  • 原文地址:https://www.cnblogs.com/xiaozou1018/p/2987294.html
Copyright © 2020-2023  润新知