【问题标题】:Export html to Excel : when try to open file it gives prompt like file is corrupted将 html 导出到 Excel:当尝试打开文件时,它会提示文件已损坏
【发布时间】:2015-07-30 07:56:59
【问题描述】:

我正在使用浏览器上的 javascript 代码将 html 表导出到 excel。 一切都完成了,但是当我尝试在 microsoft excel 中打开文件时,它会给出如下提示:

"Excel 无法打开文件 'filename.xlsx',因为文件扩展名的文件格式无效。请确认文件没有损坏,并且文件扩展名与文件格式匹配。是否要现在打开文件吗?”

如果我按是,它工作正常,所有数据都会在 excel 中正确显示。

我想删除这个提示。

我的 JavaScript 代码是

function fnExcelReport()
{
var tab_text="<table border='2px'><tr bgcolor='#87AFC6'>";
var textRange; var j=0;
tab = document.getElementById('headerTable'); // id of table

for(j = 0 ; j < tab.rows.length ; j++) 
{     
    tab_text=tab_text+tab.rows[j].innerHTML+"</tr>";
    //tab_text=tab_text+"</tr>";
}

tab_text=tab_text+"</table>";
tab_text= tab_text.replace(/<A[^>]*>|<\/A>/g, "");//remove if u want links in your table
tab_text= tab_text.replace(/<img[^>]*>/gi,""); // remove if u want images in your table
tab_text= tab_text.replace(/<input[^>]*>|<\/input>/gi, ""); // reomves input params

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,"data.xls");
}  
 else{}             
    var a = document.createElement('a');
    a.href = 'data:application/vnd.ms-excel,' +  encodeURIComponent(tab_text);
    a.download = 'rxe_data' + '.xls';
    a.click();
}

【问题讨论】:

  • 您会收到提示,因为您正在打开一个扩展名为 .xls 的 HTML 文件,而不是本机 .xls 文件。在您的情况下,Excel 可以理解内容,因此您可以看到该文件。如果您尝试重命名扩展名为 .xls 的 .pdf 文件,您将收到相同的消息,但在打开文件时不会得到相同的结果。
  • thanx @wf4 这个信息,我明白了你的意思,但是有什么办法让我没有得到这个提示吗?
  • 如果它用于网络下载,那么这将取决于您使用的服务器语言,例如PHP、C# 等Google Search
  • @wf4 我在服务器端使用 java,但如果我能在客户端做就太好了,因为所有事情都完成了,问题就是这个提示。
  • 你可以试试SheetJS。可以参考我的回答here

标签: javascript excel export-to-excel


【解决方案1】:

最后似乎无法绕过此警报。如果我将 HTML 代码转换为在 excel 中打开的 excel 数据,那么我实现了服务器端代码来生成纯 excel 并将其返回给客户端而不是 HTML 数据。

【讨论】:

    【解决方案2】:

    据我了解,您实际上并没有构建 .xls 文件。您只是在创建一个扩展名为 .xls 的 HTML 文件。那不一样。 Excel 似乎仍然可以读取您的 HTML,但它会警告您,因为文件格式和扩展名不匹配。

    如果您想构建真正的 xls 文件,请查看执行此操作的各种库,例如: https://github.com/SheetJS/js-xlsx

    【讨论】:

    • 谢谢@mromnia,你能给我一些教程或信息的链接,这样我就可以查看 sheetjs 以从 html 数据或 json 数据创建 excel 文件......我在谷歌上搜索过,但我得到了逆序的东西,比如从 excel 导入数据,但我需要从 html 或 json 数据创建 excel。
    • 我认为在 github 自述文件中解释得非常好。但这也相当复杂。也许尝试制作一个 .csv 文件?这要简单得多,Excel 也会接受它。或者只是创建一个 .html 文件,尽管在大多数 PC 上默认情况下它不会在 Excel 中打开。
    猜你喜欢
    • 2022-01-24
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    相关资源
    最近更新 更多