programing

HTML 테이블을 Excel로 내보낼 때 UTF-8 인코딩

subpage 2023. 7. 3. 22:54
반응형

HTML 테이블을 Excel로 내보낼 때 UTF-8 인코딩

자바스크립트를 사용하여 HTML 테이블을 Excel로 내보내려고 합니다.이것은 자바스크립트 코드입니다.

<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]--></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> 

이것은 나의 머리글입니다.

<meta http-equiv="content-type" content="application/vnd.ms-excel;" charset="UTF-8">
<meta charset="UTF-8">

이것은 제 테이블입니다.

<table id="tblExport">
   <tr>
      <td>José</td>
      <td>María</td>
   </tr>
</table>

그리고 이것이 내보내기를 트리거하는 버튼입니다.

<input type="button" onclick="tableToExcel('tblExport', 'W3C Example Table')" value="Export to Excel">

UTF-8 문자를 에나 ii처럼 제대로 내보낼 수 없습니다.HTML 테이블을 엔티티로 변환하지 않고 UTF8로 OOCal로 가져오기를 시도하지만 작동하지 않습니다.MS-Excel 2010과 Win7 64비트를 가지고 있습니다.

UTF-8 문자를 올바르게 내보내려면 어떻게 해야 합니까?

감사합니다!

첫 번째: 헤더 형식이 잘못되었습니다.다음과 같아야 합니다.

<meta http-equiv="content-type" content="application/vnd.ms-excel; charset=UTF-8">

그리고 두 번째:Excel에 대한 문자 집합 정보가 포함되어 있기 때문에 템플릿에 포함되어 있어야 합니다.

<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"><meta http-equiv="content-type" content="application/vnd.ms-excel; charset=UTF-8"><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))
          }
        })()
</script> 

내용 문자열 앞에 UTF-8 BOM 정의를 추가할 수 있습니다.

function ExportToExcel() {
    var BOM = "\uFEFF";
    var htmltabel = document.getElementById("tabella_finale");
    var html = htmltabel.outerHTML;
    window.open('data:application/vnd.ms-excel,'+ encodeURI(BOM + html));
}

@Axel Richter의 답변에 따라 기본 파일 이름을 변경하려면 다음을 시도하십시오.

var link = document.createElement('a');
link.download = 'filename.xls';
...
link.href = uri + base64(format(template, ctx));
link.click();
...

window.location을 바꿉니다.링크 있는 href.href

function exportData(report_id){
    var blob = new Blob([document.getElementById(report_id).innerHTML], {
        type: "text/plain;charset=utf-8;"
    });
    saveAs(blob, "Report.xls");
}

테이블 데이터를 일반 텍스트로 사용하고 인코딩 문제 없이 Excel로 저장

위에 언급된 존경심을 다시 인용하겠습니다.메타 태그 코드를 헤드 태그 안에 포함해야 합니다.

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta charset="utf-8" />
<!--This is what you should include-->
<meta http-equiv="content-type" content="application/vnd.ms-excel; charset=UTF-8">
<!---->
<title>Ver Listado Pago</title>
<link href="/Images/Decretos.ico" rel="shortcut icon" type="image/x-icon" />
<meta name="viewport" content="width=device-width" />
<link href="/Content/site.css" rel="stylesheet" />
<link href="~/Content/booostrap/bootstrap.min.css" rel="stylesheet" />
<link href="~/Content/booostrap/bootstrap-theme.css" rel="stylesheet" />
<link href="~/Content/booostrap/bootstrap-theme.min.css" rel="stylesheet" />

이것은 저에게 효과가 있었습니다.하지만 IE와 WIN10은 xls 확장 때문에 다운로드를 위한 충돌이 있습니다.그러나 특수 문자의 문제는 수정되었습니다.

구글 검색 후 솔루션 편집 파일/tableExport/tableExport.js line 280을 찾았습니다.

var base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))) } // New base64

// var base64data = "base64," + $.base64.encode(excelFile); OLD LINE
var base64data = "base64," + base64(excelFile); // New line with new base64

그게 다야

변수에 아래 코드를 사용합니다.

var uri = 'data:application/vnd.ms-excel;charset=UTF-8;base64,'

산출량

언급URL : https://stackoverflow.com/questions/25730008/encoding-utf-8-when-exporting-html-table-to-excel

반응형