HTML导出到Excel – 浏览器直接保存Excel,无法在“查看”模式下使用IE9打开

我使用IE9导出一个HTML表格到Excel,我已经使用下面的JS代码导出我的表,这工作正常,但我面对的问题是,

当点击导出图标时,浏览器直接显示一个saveAs选项,强制用户在打开之前保存excel,不允许打开excel。

我的jsfunction:

 function ExcelReport() { var tab_text = "<table border='2px'><tr border='1px'>"; var tabcol = []; var j = 0; var i=0; var temp; tab = document.getElementById('myTable'); // id of table var col = tab.rows[1].cells.length; tab_text = tab_text + tab.rows[0].innerHTML + "</tr><tr>"; // table title row[0] for (j = 1; j < tab.rows.length; j++) { for(i=0;i<col;i++){ if(j==1){ // table header row[1] tabcol = tabcol + "<td bgcolor='#C6D7EC'>" + tab.rows[j].cells[i].innerHTML + "</td>"; }else{ tabcol = tabcol + "<td>" + tab.rows[j].cells[i].innerHTML + "</td>"; } } if(j==1){ temp = tabcol + "</tr>"; }else{ temp = temp + tabcol + "</tr>"; } tabcol = []; } tab_text = tab_text + temp + "</table>"; var ua = window.navigator.userAgent; var msie = ua.indexOf("MSIE "); if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) // If Internet Explorer { txtArea1.document.open("txt/html", "replace"); txtArea1.document.write(tab_text); txtArea1.document.close(); txtArea1.focus(); sa = txtArea1.document.execCommand("saveAs", true,"MyExcelReport.xls"); } else //other browser not tested on IE 11 sa = window.open('data:application/vnd.ms-excel,'+ encodeURIComponent(tab_text)); return (sa); } 

当导出图标被点击时,它显示这个对话框: 在这里输入图像说明

我需要的是:

在这里输入图像说明

任何人都可以请帮助我从浏览器获取上述对话框。 真的很感谢你的时间和帮助。

由于您使用Java作为后端,因此您需要在后端创buildJava Web Service或者创build适当的Servlet; 无论哪种方式,您将需要更改下面的代码中的jquery ajax调用url参数。

我已经在ASP.Net和IE 9中testing了下面的jQuery代码,它popup了一个对话框来打开或保存下载的文件。 所以这应该符合你的要求。

您可以使用下面的代码,其中导出文件的htmlstring和文件名称将被发布到后端。

  1. 后端servlet或Web服务应该有一个方法,它将采用这两个参数在后端的某个文件夹下创build一个具有unique name文件,并返回所创build文件的完整绝对URL。
  2. 在下面的代码示例中,此方法是名为DownloadFile的Web服务方法。
  3. 当这个后端调用返回时,你将有导出的文件的URL,通过设置窗口的href到这个URL可以很容易地下载。
  4. 另外,请记住,即使将fileName作为parameter passing到后端,您也需要确保将其转换为唯一的文件名。 否则不同的用户可能最终会覆盖对方的文件。
  5. 例如,如果将exportExcel.xls传递给后端,则可以将GUIDstring附加到文件名,以便文件名变为: excelExport_bb1bf56eec4e4bc8b874042d1b5bd7da.xls 。 这将使文件名称始终唯一。

jQuery代码通过发布到后端导出到Excel

  function ExportToExcel() { //create the html to be exported to Excel in any custom manner you like //here it's simply being set to some html string var exportString = "<html><head><style> table, td {border:thin solid black} table {border-collapse:collapse} </style></head><body><table><tr><td>Product</td><td>Customer</td></tr> <tr><td>Product1</td><td>Customer1</td></tr><tr><td>Product2</td><td>Customer2</td> </tr><tr><td>Product3</td><td>Customer3</td></tr><tr><td>Product4</td> <td>Customer4</td></tr></table></body></html>"; //set the file name with or without extension var fileName = "excelExport.xls"; var exportedFile = { filePath: "", deleteFileTimer: null }; //make the ajax call to create the Excel file $.ajax({ url: "http://localhost/disera/ExportWebService/DownloadFile", type: "POST", data: JSON.stringify({ htmlString: exportString, fileName: fileName }), contentType: "application/json", async: true, success: function (data) { window.location.href = data.d; var exportedFile = { filePath: data.d, deleteFileTimer: null }; //the line of code below is not necessary and you can remove it //it's being used to delete the exported file after it's been served //NOTE: you can use some other strategy for deleting exported files or //choose to not delete them DeleteFile(exportedFile); }, error: function (xhr, ajaxOptions, thrownError) { alert("Following error occurred when exporting data to '" + exportedFile.filePath + "' : " + thrownError); } }); } function DeleteFile(exportedFile) { exportedFile.deleteFileTimer = setInterval(function () { $.ajax({ url: "http://localhost/disera/ExportWebService/DeleteFile", type: "POST", data: JSON.stringify({ filePath: exportedFile.filePath }), contentType: "application/json", async: true, success: function (data) { if (data.d === true) { clearInterval(exportedFile.deleteFileTimer); exportedFile.deleteFileTimer = null; exportedFile.filePath = null; exportedFile = null; } }, error: function (xhr, ajaxOptions, thrownError) { // alert("Following error occurred when deleting the exported file '" + // exportedFile.filePath + "' : " + thrownError); } }); }, 30000) }