2 sanyue sanyue_ 于 2017.09.18 11:06 提问

如何把报表导出为Excel

图片说明

想把这个页面(log+印章)下载成一个Excel。请大家指教

4个回答

showbo
showbo   Ds   Rxr 2017.09.18 11:18
已采纳

可以直接输出html代码,设置好content-disposition为attachment,保存为xls文件,excel也可以处理。但是图片你要连接url地址

 Response.AddHeader("Content-Disposition", "attachment; filename=\"xxxx.xls\";");
Response.Write(html);
showbo
showbo 回复sanyue_: 不过这种导出html的方式打开时会提示格式不一致。按时不妨碍查看内容
2 个月之前 回复
showbo
showbo 回复sanyue_: protected void Page_Load(object sender, EventArgs e) { DataTable dt = new DataTable(); dt.Rows.Add(dt.NewRow()); System.IO.StringWriter sw = new System.IO.StringWriter(); HtmlTextWriter htw = new HtmlTextWriter(sw); rpItem.DataSource = dt; rpItem.DataBind(); rpItem.RenderControl(htw); Response.AddHeader("Content-Disposition", "attachment; filename=\"xxxx.xls\";"); Response.Write(sw.ToString()); Response.Flush(); Response.End(); }
2 个月之前 回复
showbo
showbo 回复sanyue_: 连接里里面就有。你table布局好的话用repeater,RenderControl到HtmlTextWriter就可以了。如<asp:Repeater runat="server" ID="rpItem"><ItemTemplate><table border="1"> <tr><td>11</td><td>12</td></tr> <tr><td>21</td><td>22</td></tr></table></ItemTemplate></asp:Repeater>
2 个月之前 回复
sanyue_
sanyue_ 回复showbo: 想请问下,在后台怎么获取table然后输出? 谢谢了
2 个月之前 回复
showbo
showbo 回复sanyue_: 示例,居于GridView的:http://blog.csdn.net/qiuzhengxiang/article/details/7228165有用记得采纳:)。。
2 个月之前 回复
showbo
showbo 回复sanyue_: 你不是用html的表格做好你那个布局,然后render绑定下数据获取做种的html代码,然后输出
2 个月之前 回复
sanyue_
sanyue_ 直接输出html能不能给个案例,或者更详细一点,谢谢了,感谢
2 个月之前 回复
qq_26433213
qq_26433213   2017.09.18 11:49

filename是你导出excel的名字,content是你页面的table,excel可以识别table标签和很多css样式

         public void ExportToExcel(string filename, string content)
        {
            var res = HttpContext.Current.Response;

            res.Clear();
            res.Buffer = true;
            res.Charset = "UTF-8";
            res.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(filename));
            res.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
            res.ContentType = "application/ms-excel;charset=UTF-8";
            res.Write(content);
            res.Flush();
            res.End();
        }
qq_26433213
qq_26433213 回复sanyue_: 就是字符串啊 “<table>....</table>”
2 个月之前 回复
sanyue_
sanyue_ 我想请教下,页面的table怎么传进去获取然后Response.Write()输出?
2 个月之前 回复
sky__f
sky__f   2017.09.18 12:32

https://github.com/hhurz/tableExport.jquery.plugin 可以使用这个,引入就是js文件就好

sky__f
sky__f 当然,导出pdf也可以的
2 个月之前 回复
sky__f
sky__f <script type="text/javascript" src="libs/js-xlsx/xlsx.core.min.js"></script>两个都要
2 个月之前 回复
sky__f
sky__f <script type="text/javascript" src="libs/FileSaver/FileSaver.min.js"></script>
2 个月之前 回复
sanyue_
sanyue_ 引用这两个文件就好了吗?tableExport.js tableExport.min.js
2 个月之前 回复
sky__f
sky__f   2017.09.18 12:39

第一种:
https://github.com/hhurz/tableExport.jquery.plugin 可以使用这个,引入就是js文件就好,设置type:'csv',fileName:table_id使用方法
第二种 table 导出Excel,个人不是很推荐,导出的是xls但保存有点问题

function method1(tableid) {//整个表格拷贝到EXCEL中
        if(getExplorer()=='ie')
        {
            var curTbl = document.getElementById(tableid);
            var oXL = new ActiveXObject("Excel.Application");

            //创建AX对象excel
            var oWB = oXL.Workbooks.Add();
            //获取workbook对象
            var xlsheet = oWB.Worksheets(1);
            //激活当前sheet
            var sel = document.body.createTextRange();
            sel.moveToElementText(curTbl);
            //把表格中的内容移到TextRange中
            sel.select();
            //全选TextRange中内容
            sel.execCommand("Copy");
            //复制TextRange中内容
            xlsheet.Paste();
            //粘贴到活动的EXCEL中
            oXL.Visible = true;
            //设置excel可见属性

            try {
                var fname = oXL.Application.GetSaveAsFilename("Excel.xls", "Excel Spreadsheets (*.xls), *.xls");
            } catch (e) {
                print("Nested catch caught " + e);
            } finally {
                oWB.SaveAs(fname);

                oWB.Close(savechanges = false);
                //xls.visible = false;
                oXL.Quit();
                oXL = null;
                //结束excel进程,退出完成
                //window.setInterval("Cleanup();",1);
                idTmr = window.setInterval("Cleanup();", 1);

            }

        }
        else
        {
            tableToExcel(tableid,'ss');
        }
    }
    function Cleanup() {
        window.clearInterval(idTmr);
        CollectGarbage();
    }
    var tableToExcel = (function() {
        var uri = 'data:application/vnd.ms-excel;base64,',
        template = '<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"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>',
        base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))) },
        format = function(s, c) {
            return s.replace(/{(\w+)}/g,
            function(m, p) { return c[p]; }) }
                return function(table, name) {
                    if (!table.nodeType) table = document.getElementById(table)
                    var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML}
                    window.location.href = uri + base64(format(template, ctx))
                  }
    })();


Csdn user default icon
上传中...
上传图片
插入图片