2015-12-11 21 views
10

這是我用我的生成excel文件的.xls有沒有什麼辦法可以在由js生成的excel文件上設置安全內容?

var tableToExcel = (function() { 
    var uri = 'data:application/vnd.ms-excel ;base64,' 
    , template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>' 
    , base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))) } 
    , format = function(s, c) { return s.replace(/{(\w+)}/g, function(m, p) { return c[p]; }) } 
    return function(table, name) { 
    if (!table.nodeType) table = document.getElementById(table) 
    var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML} 
    window.location.href = uri + base64(format(template, ctx)) 
    } 
})() 

tableToExcel('table', 'Table Title') 

的功能,這是錯誤我得到

Error

+0

您是否檢查錯誤隱含的問題?擴展名.xls和內容類型是否匹配,或者您是否以錯誤的方式設置了它們? – Thorarins

+2

是我還是代碼將創建XLSX文件而不是XLS – Poof

+0

@Proof:如果'Office'version大於或等於'',代碼將創建'HTML'和嵌入'XML'的混合體<! - [if gte mso 9]>'。 'Excel'將接受這個混合文件作爲'* .xls'文件並解析混合物以從中創建工作簿。但它會拋出這個警告。在野外有'JavaScript'解決方案,真正可以讓'XLS'和/或'XLSX'漸變。搜索關鍵字:'javascript create excel xls xlsx'。 –

回答

1

下面的代碼取表,並將其轉換爲excel文件。

注: -功能有第三個參數作爲

var tableToExcel = (function() { 
 
    var uri = 'data:application/vnd.ms-excel;base64,', 
 
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>', 
 
    base64 = function(s) { 
 
     return window.btoa(unescape(encodeURIComponent(s))) 
 
    }, 
 
    format = function(s, c) { 
 
     return s.replace(/{(\w+)}/g, function(m, p) { 
 
     return c[p]; 
 
     }) 
 
    } 
 
    return function(table, name, filename) { 
 
    if (!table.nodeType) table = document.getElementById(table) 
 
    var ctx = { 
 
     worksheet: name || 'Worksheet', 
 
     table: table.innerHTML 
 
    } 
 

 
    document.getElementById("dlink").href = uri + base64(format(template, ctx)); 
 
    document.getElementById("dlink").download = filename; 
 
    document.getElementById("dlink").click(); 
 

 
    } 
 
})()
<table id="newTab"> 
 
    <th>Col 1</th> 
 
    <th>Col 2</th> 
 
    <th>Col 3</th> 
 
    <tr> 
 
    <td>1</td> 
 
    <td>2</td> 
 
    <td>3</td> 
 
    </tr> 
 
    <tr> 
 
    <td>4</td> 
 
    <td>5</td> 
 
    <td>6</td> 
 
    </tr> 
 
    <tr> 
 
    <td>7</td> 
 
    <td>8</td> 
 
    <td>9</td> 
 
    </tr> 
 
</table> 
 
<a id="dlink" style="display:none;"></a> 
 

 
<input type="button" onclick="tableToExcel('newTab', 'name', 'newSheet.xls')" value="Table to Excel">

以下錯誤,同時打開下載的文件可能會彈出。

打開文件時出錯。但是,無論如何,點擊「是」即可打開。

Error on opening the file. But it opens by clicking 'Yes' anyways.

和文件成功打開。

File opens successfully.

相關問題