【问题标题】:The file format and extension of 'file.xls' don't match with fileSaver.js“file.xls”的文件格式和扩展名与 fileSaver.js 不匹配
【发布时间】:2020-08-21 15:04:45
【问题描述】:

我想将 html 表格保存在 excel 文件中,我使用 fileSaver 进行 angular。但是当我下载文件并尝试打开它时,我从 excel 收到一个烦人的弹出窗口,上面写着

“'report.xls' 的文件格式和扩展名不匹配。该文件可能已损坏或不安全。除非您信任其来源,否则不要打开它。仍然要打开它吗?”

$scope.exportExcel = function(){

    var data, table;
    table = document.getElementById('tableReport').innerHTML;
    data = new Blob([table], {
        type: 'application/vnd.ms-excel;charset=charset=utf-8'
    });
    return FileSaver.saveAs(data, 'report.xls');
};

如何修复此弹出窗口?谢谢。

【问题讨论】:

  • 该格式的正确扩展名是 .htm 而不是 .xls
  • @musa:谢谢你的回答,但我想在 excel 中提取它而不是 html
  • 它是 html,并且 excel 需要该类型文件的 .htm 扩展名。指定扩展名不会将数据从一种格式转换为另一种格式
  • 我发现这个答案很有帮助stackoverflow.com/a/50819212/414744

标签: javascript angularjs excel blob filesaver.js


【解决方案1】:

我也有类似的问题。

我发现我忘记在我的 HTTP 请求中将 responseType 设置为 blob。 这似乎是正确读取二进制数据所必需的。

例子:

$http({
    url: 'your/webservice',
    method: "POST",
    data: json, //this is your json data string
    headers: {
       'Content-type': 'application/json'
    },
    responseType: 'blob'
}).success(function (data, status, headers, config) {
    var blob = new Blob([data], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"});
    var objectUrl = URL.createObjectURL(blob);
    window.open(objectUrl);
}).error(function (data, status, headers, config) {
    //upload failed
});

代码来自this answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-07
    • 2021-10-03
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    相关资源
    最近更新 更多