目标是把table转换成Excel,
思路是把页面的表格用html()获取,用ajax传给后台处理成一个HTML文件再传回来,
插入到动态生成的iframe框架中,下载下来,
代码:
<html xmlns:x="urn:schemas-microsoft-com:office:excel"> <head> <meta http-equiv="content-type" content="application/ms-excel; charset=gb2312"> <!--[if gte mso 9]> <xml> <x:ExcelWorkbook> <x:ExcelWorksheets> <x:ExcelWorksheet> <x:Name>sheetName</x:Name> <x:WorksheetOptions> <x:Print> <x:ValidPrinterInfo ></x:ValidPrinterInfo> </x:Print> </x:WorksheetOptions> </x:ExcelWorksheet> </x:ExcelWorksheets> 后台处理后返回的HTML格式数据: </x:ExcelWorkbook> </xml> <![endif]--> </head> <body> <table> <tbody> <tr><th>交易日期</th><th>总订单数</th><th>交易总额</th><th>完成订单数</th><th>完成总额</th><th>撤单总订单数</th><th>撤单总额</th></tr> <tr><td>2017-12-05</td><td>7414</td><td>1483.6</td><td>7414</td><td>1483.6</td><td>0</td><td>0</td></tr> <tr><td>2017-12-04</td><td>5649</td><td>770.9</td><td>5649</td><td>770.9</td><td>0</td><td>0</td></tr> <tr><th>合计行</th><th>总计13063单</th><th>总计2254.50元</th><th>总计13063单</th><th>总计2254.50元</th><th>总计0单</th><th>总计0.00元</th></tr> </tbody> </table> </body> </html>
ajax代码:
$.ajax({ type: 'post', url: 'ajax_aspx.aspx?' + param, contentType: "application/json", data: { 'TD': tabledata }, async: false, success: function (msg) {
1, var _frame = $('<iframe id="Export-modal-content" scrolling="no" border="0" frameborder="0" name="Export-frame"></iframe>'); _frame.write(msg); _frame.appendTo('body'); //alert(msg); }, error: function () { alert("可以个屁"); } });
上面的插入方式不行,直接走不通,下面2种走通了,但是没下载(谷歌浏览器),
2,
var _frame = $('<iframe id="Export-modal-content" scrolling="no" border="0" frameborder="0" name="Export-frame">' + msg + '</iframe>'); _frame.appendTo('body');
3, var _frame = $('<iframe id="Export-modal-content" scrolling="no" border="0" frameborder="0" name="Export-frame" srcdoc=' + msg +'></iframe>'); _frame.appendTo('body');
第一种是百度找的,貌似要在HTML上预先有iframe才行,
2和3是w3school里找到的灵感。
****************
直接把iframe的src设置成ajax的路径,用参数获取数据拼接成table就能下,
var _frame = $('<iframe id="Export-modal-content" src="/ajax_aspx.aspx?' + param + '" scrolling="no" border="0" frameborder="0" name="Export-frame" />'); _frame.appendTo('body');
咋办,就差这最后一步了,求大神帮帮忙,谢谢。
你到底要干什么?
使用JS可以访问和控制IFRAME里几乎所有东西
就是把一个HTML数据插入到iframe然后下载成Excel文件
@Anmen:
在服务器上生成EXCEL,直接下载给用户保存就行了。不需要IFRAME
@西漠以西:
HttpContext.Current.Response.Clear(); HttpContext.Current.Response.Buffer = true; HttpContext.Current.Response.Charset = "gb2312"; HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName + "_" + DateTime.Now.ToString("yyMMddHHmmss") + Utils.GetRandomString(4, 4, "0123456789") + ".xls"); HttpContext.Current.Response.ContentType = "application/ms-excel"; HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312"); HttpContext.Current.Response.Write("<meta http-equiv=\"content-type\" content=\"application/ms-excel; charset=gb2312\"/>" + sHtml); HttpContext.Current.Response.End();
sHtml是一个用table和html元素拼接的字符串,这样直接在ajax返回一个HTML页面过来,没有下载成Excel。。。
@Anmen: 你需要学习怎样使用c#、.NET、asp.net 在服务器上生成一个EXCEL文件并直接下载给用户。
你还需要学习怎样使用c#、.NET生成EXCEL文件并向它里面写入数据。
抛弃你上面的代码。
@Anmen: 在博客园里搜索 : asp.net 生成EXCEL
@西漠以西: 好的,谢谢