2013-05-14 3 views
3

HTML 표를 CSV 파일로 저장하는 중입니다. 이상적으로 이것은 크로스 브라우저 여야하며 인터넷 익스플로러를 제외한 모든 기능을 수행 할 수 있습니다. 그러나 나는 명백한 부품을 작동 시켰습니다. 남아있는 것은 자바 스크립트에서 작동중인 CSV 파일을 가져올 수 없다는 것입니다. 바이트 순서 표시가 다운로드하려는 데이터 앞에 추가되기 때문입니다.자바 스크립트 인터넷 익스플로러 바이트 순서 표

IE에서 csv 파일을 비롯한 모든 항목을 다운로드하여 16 진수 편집기를 사용하여 원시 파일을 확인한 결과 Internet Explorer에서 다운로드 한 파일에 유니 코드 문자 "FFFE"가 추가되었는지 확인할 수 있습니다.

아래 코드를 참조하십시오. saveTable은 테이블 내에 "<a>"노드를 사용합니다.

누구든지 내가이 문제를 잘 모르고 해결할 수 있다면 감사할만한 해결책을 제시 할 수 있습니다. 내 허구를 조금이라도 용서해주세요, 전에 이런 성격의 사이트를 사용한 적이 없다고 생각합니다. 따라서 더 자세한 정보를 제공해야하는 경우 알려 주시면 최선을 다해 여기에 올리겠습니다.

function findTable(node) { // Finds a nodes parent table. 
    return (node.nodeName !== "TABLE") ? findTable(node.parentNode) : node; 
} 

function saveTable(node) { 
    var csv = []; 
    var table = findTable(node); 
    var rows = table.getElementsByTagName("tr"); 
    var header = []; 
    var csv = []; 
    for (var i = 0; i < rows.length; i++) { 
    if (i == 0) { 
     // Do csv stuff. 
     var dates = rows[i].getElementsByTagName("th"); 
     for (var j = 0; j < dates.length; j++) 
     (j == 0) ? header.push("") : header.push(dates[j].innerHTML); 
     csv.push(header.join(",")); 
    } 
    else { 
     var rowArray = []; 
     var jobName = rows[i].getElementsByTagName("th")[0].innerHTML; 
     var times = rows[i].getElementsByTagName("td"); 
     rowArray.push(jobName); 
     for (var k = 0; k < times.length; k++) 
     rowArray.push(times[k].innerHTML); 
     csv.push(rowArray.join(",")); 
    } 
    } 

    node.setAttribute("href", "data:text/csv;charset=utf-8," + csv.join("%0A")); 
    var fileName = "spreadsheet_data-" + (new Date).getTime() + ".csv"; 

    if (node.download == "") 
    node.setAttribute("download", fileName); 
    else { 
    alert("Handle IE here!"); 
    var bom = "\uFFFE"; 
    var doc = document.open("application/octet-stream", "_blank"); 
    var data = csv.join("\r\n"); 
    doc.charset = "UTF-8"; 
    doc.write(data.replace(bom, "")); 
    doc.focus(); 
    doc.execCommand('SaveAs', false, fileName); 
    doc.close(); 
    } 
} 

표 예, 그것은 내가 나 자신을 위해 선택한 것입니다 방법은 아니지만, 테이블이 다른 종류의 소프트웨어에 의해 생성되는 방법입니다.

<table id='results' border='1'> 
<tr><th><a href='#' onClick='saveTable(this);' id='download_link'>Download data</a></th><th>2013/05/09</th><th>2013/05/10</th><th>2013/05/10</th><th>2013/05/10</th><th>2013/05/10</th></tr> 
<tr> 
<th>\PDF\EXOVIGN.PDF</th><td>8.853</td><td>9.050</td><td>8.807</td><td>8.827</td><td>8.835</td></tr> 
</table> 
+0

질문에 최소한의 HTML을 추가하여 제발 뭔가를 제공해 주시겠습니까? 우리는 테이블에 한 행의 데이터 만 필요하며 어떤 스타일링도 필요하지 않습니다. –

+0

WS2003에서 IE8을 사용하여 확장명을 ".csv"에서 ".txt"로 변경하여 저장해야합니다 (핫픽스를 적용하지 않으려 고합니다. http://support.microsoft.com/kb/929863). . 나는'data.replace'의 유무에 관계없이 파일의 시작 부분에 BOM을 얻지 못했습니다. 오늘 가정용 컴퓨터 용 광대역이 오늘 저녁에 다시 작동한다면 W7/IE10에서 테스트 할 수 있습니다. –

+0

이 방법이 작동하는지 확인할 수 있지만 사용자가 파일 이름을 바꿀 필요는 없습니다. 주위에 방법이 있습니까? –

답변

1

클라이언트 측에서 절대적으로 요구 사항이 없다면 서버에서 파일을 보내는 데 많은 번거 로움을 덜 수 있습니다.

관련 문제