web-dev-qa-db-ja.com

HTMLテーブルをExcelにエクスポートするJavascript

ユーザーが[エクスポート]ボタンをクリックしたときに、ページのHTMLテーブルをExcelにエクスポートする必要があります。ここで、Firefoxで動作するスタックオーバーフローに関する解決策を見つけました。

FirefoxブラウザーのJavaScriptでダイナミックHTMLテーブルをExcelにエクスポート

現在、ここで使用している言語で一般的なö、ü、öのような特殊文字は処理されないため、問題なくそれらを正常にエクスポートできる方法を誰かが知っているかどうかを尋ねたいですか?

ここに私のコードがあります:

 function tabletoExcel(table, name) {
    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]; }); };
        if (!table.nodeType) table = document.getElementById(table);
        var ctx = { worksheet: name || 'Worksheet', table: table.innerHTML };
        window.location.href = uri + base64(format(template, ctx));

}
28
Tulips

追加する場合:

<meta http-equiv="content-type" content="text/plain; charset=UTF-8"/>

ドキュメントの先頭で、期待どおりに動作を開始します。

<script type="text/javascript">
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]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></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))
  }
})()
</script>

更新済みFiddleこちら。

46
Candide

UTF 8変換および通貨記号のエクスポートの場合、これを使用します。

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 version="1.0" encoding="UTF-8" standalone="yes"?><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))
  }
})()
4
Jay

ShieldUIの Excelにエクスポート 機能は、すべての特殊文字をすでにサポートしているはずです。

1