使用javascript将base64数据从json响应转换为ms excel文件

使用javascript将base64数据从json响应转换为ms excel文件,javascript,jquery,Javascript,Jquery,我看到过很多类似于我的用例w/angular和其他服务器端平台的问题,但不适用于纯javascript 我有一个应用程序,其中我执行$.ajax并对API执行get调用,该API返回以前转换的excel文件(excel到base64);我需要将此base64数据重新转换回原始格式,即转换为Excel文件。我试图追溯将excel转换为base64所采取的步骤,将其中一些步骤颠倒过来,但无法生成原始文件。正在生成excel文件,但该文件仍包含base64数据,因此打开时会出现错误并处于损坏状态。 还

我看到过很多类似于我的用例w/angular和其他服务器端平台的问题,但不适用于纯javascript

我有一个应用程序,其中我执行$.ajax并对API执行get调用,该API返回以前转换的excel文件(excel到base64);我需要将此base64数据重新转换回原始格式,即转换为Excel文件。我试图追溯将excel转换为base64所采取的步骤,将其中一些步骤颠倒过来,但无法生成原始文件。正在生成excel文件,但该文件仍包含base64数据,因此打开时会出现错误并处于损坏状态。 还有其他人成功地做到了这一点吗

下面是我的代码和fiddle链接:(我没有在这里添加base64 json数据(responseData),因为它很大,但它在fiddle上)


jshiddle link:

Ah在更好地阅读您的问题之后,您需要
…base64,“+bindata
不是
…base64,bindata
@kaido-你是说另一个js函数来转换base64?“我不是在跟踪你……”罗杰多格,如果你真的按照凯伊多说的去做,你的问题应该得到解决。伊斯梅尔——我不知道他说的“你需要……base64,+bindata不是……base64,bindata”是什么意思在上面的评论中。他在说什么?。。。我没有JSFIDLE帐户,因此无法创建这么长的代码段,但我的意思是,在您的
DownloadExcel
函数中,您将页面的href字面设置为
“data:application/vnd.ms excel;base64,bindata”
,您需要的是
window.location.href=“data:application/vnd.ms excel;base64,”+responseData
,以便数据成为此href的一部分。现在先别管这个Blob了。啊,在更好地阅读了你的问题之后,你需要
…base64,“+bindata
不是
…base64,bindata
@kaido-你是说另一个js函数来转换base64?“我不是在跟踪你……”罗杰多格,如果你真的按照凯伊多说的去做,你的问题应该得到解决。伊斯梅尔——我不知道他说的“你需要……base64,+bindata不是……base64,bindata”是什么意思在上面的评论中。他在说什么?。。。我没有JSFIDLE帐户,因此无法创建这么长的代码段,但我的意思是,在您的
DownloadExcel
函数中,您将页面的href字面设置为
“data:application/vnd.ms excel;base64,bindata”
,您需要的是
window.location.href=“data:application/vnd.ms excel;base64,”+responseData
,以便数据成为此href的一部分。暂时忘掉那团吧。
var bindata = window.atob(responseData);
function DownloadExcel() {
  window.location.href = "data:application/vnd.ms-excel;base64, bindata"
}
var blob = new Blob([responseData], {type: 'application/vnd.ms-excel'});
if (window.navigator && window.navigator.msSaveBlob) {
    window.navigator.msSaveBlob(blob);
}
else {
    var objectUrl = URL.createObjectURL(blob);
    window.open(objectUrl);
}