【问题标题】:Create simple xlsx (excel file ) from javascript or Jquery从 javascript 或 Jquery 创建简单的 xlsx (excel 文件)
【发布时间】:2017-11-08 07:59:40
【问题描述】:

这是小提琴https://jsfiddle.net/ym4egje0/

我有两件事要问

  1. 这是在创建一个xls,如何创建一个xlsx文件在IE中不起作用,只能在google chrome中使用,如何使它在IE中起作用?

  2. 我想把 ColumnHead 列标题文本和 message1 和 message2 应该是连续的行。

必须以(.)的索引为索引来切分行。

HTML

<input id="btnExport" type="button" value = "Generate File" />

JS/Jquery

$("#btnExport").click(function (e) { 

var ColumnHead = "Column Header Text";
var Messages = "\n message1.\n message2.";
   window.open('data:application/vnd.ms-excel,' + Messages);
    e.preventDefault();

});

【问题讨论】:

  • 对于 xlsx 使用 data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 我希望它会工作。
  • 现在下载没有任何文件扩展名。如何制作 .xlsx,除了下载之外,我还可以给出任何特定名称
  • 你可以试试这个帖子吗? stackoverflow.com/questions/15567086/…
  • 它的表,我不需要那么大的表,IE 解决方案不适合我
  • 它在 chrome jsfiddle.net/ym4egje0/1 中下载文件扩展名检查来自 stackoverflow.com/questions/2937465/… 的类似问题

标签: javascript jquery html excel


【解决方案1】:

看看这个小提琴来解决你的问题。它将为 Google chrome 和 IE 创建文件

https://jsfiddle.net/shaswatatripathy/fo4ugmLp/1/

HTML

<input type="button" id="test" onClick="fnExcelReport();" value="download" />

<div id='MessageHolder'></div>

<a href="#" id="testAnchor"></a>

JS

var tab_text;
var data_type = 'data:application/vnd.ms-excel';


function CreateHiddenTable(ListOfMessages)
{
var ColumnHead = "Column Header Text";
var TableMarkUp='<table id="myModifiedTable" class="visibilityHide"><thead><tr><td><b>'+ColumnHead+'</b></td>  </tr></thead><tbody>';

for(i=0; i<ListOfMessages.length; i++){
    TableMarkUp += '<tr><td>' + ListOfMessages[i] +'</td></tr>';
}
TableMarkUp += "</tbody></table>";
$('#MessageHolder').append(TableMarkUp);
}

function fnExcelReport() {
var Messages = "\n message1.\n message2.";
var ListOfMessages = Messages.split(".");

CreateHiddenTable(ListOfMessages);

    tab_text = '<html xmlns:x="urn:schemas-microsoft-com:office:excel">';
    tab_text = tab_text + '<head><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet>';

    tab_text = tab_text + '<x:Name>Error Messages</x:Name>';

    tab_text = tab_text + '<x:WorksheetOptions><x:Panes></x:Panes></x:WorksheetOptions></x:ExcelWorksheet>';
    tab_text = tab_text + '</x:ExcelWorksheets></x:ExcelWorkbook></xml></head><body>';

    tab_text = tab_text + "<table border='1px'>";
    tab_text = tab_text + $('#myModifiedTable').html();;
    tab_text = tab_text + '</table></body></html>';

    data_type = 'data:application/vnd.ms-excel';

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

    if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {
        if (window.navigator.msSaveBlob) {
            var blob = new Blob([tab_text], {
                type: "application/csv;charset=utf-8;"
            });
            navigator.msSaveBlob(blob, 'Test file.xls');
        }
    } else {
    console.log(data_type);
console.log(tab_text);
      $('#testAnchor')[0].click()
    }
$('#MessageHolder').html("");
}
$($("#testAnchor")[0]).click(function(){
console.log(data_type);
console.log(tab_text);
  $('#testAnchor').attr('href', data_type + ', ' + encodeURIComponent(tab_text));
        $('#testAnchor').attr('download', 'Test file.xls');
});

CSS

.visibilityHide
{
  visibility:hidden;
}

【讨论】:

  • 这太棒了。我唯一的评论是我在尝试打开它时收到以下错误......“'Test file.xls'的文件格式和扩展名不匹配。文件可能已损坏或不安全。除非你相信它的来源,不要打开它。你还是要打开它吗?”。如果我单击“是”,它工作正常。关于如何完全防止它的任何想法?
  • @rooch84 我还是没找到解决办法
  • 您收到该警告是因为您并没有真正生成 Excel 文件。即使代码发送 Excel mime 类型并向文件添加 .xls 扩展名,但实际上该文件是带有一些 Excel 特定代码的 HTML 文件(注意输出开头的 &lt;html)。为避免该错误,您必须生成一个真实的(二进制)Excel 文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-15
  • 2017-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-24
相关资源
最近更新 更多