복붙노트

[JQUERY] 나는 웹 페이지에서 Excel로 테이블을 내보낼 수있는 방법 [마감]

JQUERY

나는 웹 페이지에서 Excel로 테이블을 내보낼 수있는 방법 [마감]

해결법


  1. 1.멀리 멀리, Excel로 테이블에서 가장 깨끗한, 가장 쉬운 수출 JQuery와 DataTables 표 도구 플러그인입니다. 당신은 당신이 클립 보드에 프린터에 엑셀, PDF, CSV, 수출을 얻을, 및 코드의 몇 가지 추가 라인과 두 개의 작은 파일과 종류, 필터, 주문 및 페이지 데이터를 포함하는 그리드를 얻을.

    멀리 멀리, Excel로 테이블에서 가장 깨끗한, 가장 쉬운 수출 JQuery와 DataTables 표 도구 플러그인입니다. 당신은 당신이 클립 보드에 프린터에 엑셀, PDF, CSV, 수출을 얻을, 및 코드의 몇 가지 추가 라인과 두 개의 작은 파일과 종류, 필터, 주문 및 페이지 데이터를 포함하는 그리드를 얻을.

    이 필요한 것 모든 코드입니다 :

      $(document).ready( function () {
        $('#example').dataTable( {
            "sDom": 'T<"clear">lfrtip',
            "oTableTools": {
                "sSwfPath": "/swf/copy_cvs_xls_pdf.swf"
            }
        } );
    } );
    

    그래서, 빨리, 더 브라우저의 한계를 배포하지 않으려면 어떤 서버 측 언어는 필요하지 않습니다, 그리고 무엇보다도 매우 쉽게 이해 할 수 있습니다. 그것은 윈 - 윈입니다. 이 제한을 않는 한 가지는하지만, 열 엄격한 형식입니다.

    서식 및 색상이 절대 dealbreakers 경우, 내가 찾은 유일한 100 % 신뢰할 수있는, 크로스 브라우저 방법은 코드에서 적절한 Excel 파일을 처리하는 서버 측 언어를 사용하는 것입니다. 선택의 내 솔루션 PHPExcel 그것은 내가 지금까지 긍정적으로 당신이 그것을 아무것도하지만, HTML을 제공하지 않을 때 모든 브라우저에서 엑셀의 현대 버전으로 서식과 수출을 처리하는 것으로 나타났습니다 유일한 하나입니다. 내가하지만, 그것은 확실히 최초의 솔루션처럼 쉬운 일이 아닙니다, 또한 자원 돼지의 비트입니다 명확히하자. 그러나, 플러스 측에 또한 출력은 PDF로 직접뿐만 아니라 수 있습니다. 당신이 도착하면, 그것은, 그냥 작품마다 구성했습니다.

    UPDATE - 9 월 (15), 2016 TableTools는 "버튼"이 도구는 이전 TableTools 확장과 같은 기능을 수행라는 새로운 플러그인에 찬성 중단하지만, 된 것은 설치 FAR 쉽게 그들이 현대적인 브라우저 HTML5 다운로드를 사용합니다, 기능과 HTML5 표준을 지원하지 않는 브라우저에 대한 원래 플래시 다운로드에 폴백합니다. 나는 2011 년이 응답을 게시 한 이후 많은 의견에서 볼 수 있듯이, TableTools의 주요 약점이었다 해결. 나는 아직도 개발자와 사용자 모두, 단순히 많은 양의 데이터를 처리하기위한 충분한 DataTables을 권장하지 않습니다.


  2. 2.오래 전, 나는 우리가 엑셀 콘텐츠 형식을 보내는 경우 Excel에서 테이블과 HTML 파일을 열 것이라는 점을 발견했다. 문서를 위의 고려 :

    오래 전, 나는 우리가 엑셀 콘텐츠 형식을 보내는 경우 Excel에서 테이블과 HTML 파일을 열 것이라는 점을 발견했다. 문서를 위의 고려 :

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
      <title>Java Friends</title>
    </head>
    <body>
      <table style="font-weight: bold">
        <tr style="background-color:red"><td>a</td><td>b</td></tr>
        <tr><td>1</td><td>2</td></tr>
      </table>    
    </body>
    </html>
    

    나는 그것을에서 다음 북마크를 실행 :

    javascript:window.open('data:application/vnd.ms-excel,'+document.documentElement.innerHTML);
    

    사실 나는 그것이 엑셀 파일로 다운로드 할 수 있어요. 그러나, 나는 예상 결과를 얻을하지 않았다 - 파일은 OpenOffice.org Writer를 오픈했다. 그건 내 문제 : 나는 더 잘하려고하지 수 있도록 내가이 컴퓨터에 엑셀이 없습니다. 오늘 작동하는지 정말 말할 수 있도록 또한,이 트릭은 이전 버전의 브라우저와 MS 오피스의 골동품 버전 6 년 전 어느 정도 일했다.

    어쨌든, 위의 문서에서 이론적으로 Excel 파일로 전체 문서를 다운로드 할 버튼을 추가 :

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
      <title>Java Friends</title>
    </head>
    <body>
      <table style="font-weight: bold">
        <tr style="background-color:red"><td>a</td><td>b</td></tr>
        <tr><td>1</td><td>2</td></tr>
        <tr>
          <td colspan="2">
            <button onclick="window.open('data:application/vnd.ms-excel,'+document.documentElement.innerHTML);">
                Get as Excel spreadsheet
            </button>
          </td>
        </tr>
      </table>    
    </body>
    </html>
    

    파일에 저장하고 버튼을 클릭합니다. 이 일을하거나하지 않을 경우 심지어는 작동하지 않았다 말하는에 대한 의견을 물어 그래서 내가 알고 싶어요.


  3. 3.다음 클라이언트 측에서 당신이 XSL의 MIME 타입을 사용하여 파일을 열고 데이터 URI를 사용하거나 파일을 보낼 수 있습니다 원하는 XML 포함 된 문자열을 만들기 위해 (OpenXML을 이전) 이전 Excel 2003의 XML 형식을 사용할 수 있습니다 "응용 프로그램 / vnd.ms-엑셀의 Content-Type"서버 측에서 엑셀 마임을 사용하여 클라이언트에.

    다음 클라이언트 측에서 당신이 XSL의 MIME 타입을 사용하여 파일을 열고 데이터 URI를 사용하거나 파일을 보낼 수 있습니다 원하는 XML 포함 된 문자열을 만들기 위해 (OpenXML을 이전) 이전 Excel 2003의 XML 형식을 사용할 수 있습니다 "응용 프로그램 / vnd.ms-엑셀의 Content-Type"서버 측에서 엑셀 마임을 사용하여 클라이언트에.


  4. 4.Excel에서 추가 프로그래밍없이 거의 모든 웹 페이지에서 데이터를 검색하자 "웹 쿼리"라는 작은 알려진 기능이 있습니다.

    Excel에서 추가 프로그래밍없이 거의 모든 웹 페이지에서 데이터를 검색하자 "웹 쿼리"라는 작은 알려진 기능이 있습니다.

    웹 쿼리는 basicly Excel 및 복사 워크 시트에 수신 된 데이터 (및 선택적으로 서식)의 일부 또는 전부를 내부에서 직접 HTTP 요청을 실행합니다.

    당신이 웹 쿼리를 정의한 후에는 심지어 엑셀을 떠나지 않고 언제든지 새로 고칠 수 있습니다. 파일로 실제로 "수출"데이터와 그것을 저장하지 않아도 - 당신은 오히려 단지 데이터베이스에서 같은 데이터를 새로 고칠 것입니다.

    당신은 등 특정 필터 기준에 대한 당신 엑셀 프롬프트함으로써 URL 매개 변수를 사용할 수있다 ...

    그러나 지금까지 발견 한 단점은 다음과 같습니다 :

    다음은 Excel에서 웹 쿼리를 만드는 방법에 대한 질문입니다. 이 웹 페이지에서 외부 데이터를 얻을 수있는 방법에 대해 마이크로 소프트 도움말 사이트에 링크


  5. 5.이것은 어쩌면 자바 스크립트로 변경 할 수있는 PHP는 있지만 :

    이것은 어쩌면 자바 스크립트로 변경 할 수있는 PHP는 있지만 :

    <?php>
    $colgroup = str_repeat("<col width=86>",5);
    $data = "";
    $time = date("M d, y g:ia");
    $excel = "<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\">
    <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
    <html>
    <head>
    <meta http-equiv=\"Content-type\" content=\"text/html;charset=utf-8\" />
    <style id=\"Classeur1_16681_Styles\">
    .xl4566 {
    color: red;
    }
    </style>
    </head>
    <body>
    <div id=\"Classeur1_16681\" align=center x:publishsource=\"Excel\">
    <table x:str border=0 cellpadding=0 cellspacing=0 style=\"border-collapse: collapse\">
    <colgroup>$colgroup</colgroup>
    <tr><td class=xl2216681><b>Col1</b></td><td class=xl2216681><b>Col2</b></td><td class=xl2216681 ><b>Col3</b></td><td class=xl2216681 ><b>Col4</b></td><td class=xl2216681 ><b>Col5</b></td></tr>
    <tr><td class=xl4566>1</td><td>2</td><td>3</td><td>4</td><td>5</td></tr>
    </table>
    </div>
    </body>
    </html>";
      $fname = "Export".time().".xls";
      $file = fopen($fname,"w+");
      fwrite($file,$excel);
      fclose($file);
      header('Content-Type: application/vnd.ms-excel');
      header('Content-Disposition: attachment; filename="'.basename($fname).'"');
      readfile($fname);
      unlink($fname); ?>    
    

  6. 6.첫째, 나는 Excel에서 사용자의 인스턴스가 그것을 집어 들고 있음을 수출 HTML과 희망을 시도 권하고 싶지 않다. 이 솔루션은 문제가 매킨토시 클라이언트와의 호환성 등 문제의 파일이 지정된 형식이 아닌 것을 사용자에게 오류를 던지고으로 가득 찬 것을 내 경험. 가장 방탄, 사용자 친화적 인 솔루션은 실제 Excel 파일을 구축하고 사용자에게 그 다시 보내 라이브러리를 사용하여 서버 측이다. 다음 최고의 솔루션과 더 보편적 인 해결책은 Open XML 형식을 사용하는 것입니다. 나는 엑셀 이전 버전의 몇 가지 희귀 호환성 문제로 실행했지만 전체적으로 이것은 당신에게 맥을 포함하여 엑셀의 모든 버전에서 작동하는 솔루션을 제공해야합니다.

    첫째, 나는 Excel에서 사용자의 인스턴스가 그것을 집어 들고 있음을 수출 HTML과 희망을 시도 권하고 싶지 않다. 이 솔루션은 문제가 매킨토시 클라이언트와의 호환성 등 문제의 파일이 지정된 형식이 아닌 것을 사용자에게 오류를 던지고으로 가득 찬 것을 내 경험. 가장 방탄, 사용자 친화적 인 솔루션은 실제 Excel 파일을 구축하고 사용자에게 그 다시 보내 라이브러리를 사용하여 서버 측이다. 다음 최고의 솔루션과 더 보편적 인 해결책은 Open XML 형식을 사용하는 것입니다. 나는 엑셀 이전 버전의 몇 가지 희귀 호환성 문제로 실행했지만 전체적으로 이것은 당신에게 맥을 포함하여 엑셀의 모든 버전에서 작동하는 솔루션을 제공해야합니다.

    오픈 XML


  7. 7.모질라는 여전히 기본 64 URI를 지원합니다. 이것은 당신이 자바 스크립트를 사용하여 동적 바이너리 컨텐츠를 구성 할 수 있습니다 :

    모질라는 여전히 기본 64 URI를 지원합니다. 이것은 당신이 자바 스크립트를 사용하여 동적 바이너리 컨텐츠를 구성 할 수 있습니다 :

    <a href="data:application/vnd.ms-excel<base64 encoded binary excel content here>"> download xls</a>
    

    엑셀 파일이 매우 공상이 아닌 경우 (더 도표, 공식, macroses는) 그런 다음, 파일의 형식 및 작성 바이트 파고없는 64 기수로 인코딩하고 HREF에 넣을 수 있습니다

    인용하다 https://developer.mozilla.org/en/data_URIs


  8. 8."그냥"을 (이다 : 테이블의 HTML 코드) HTML 테이블을 복사하여 클립 보드에 이것은 실제로 당신이 생각하는 것보다 더 간단합니다. 엑셀 HTML 테이블을 디코딩하는 방법을 알고; 심지어 속성을 유지하려고합니다.

    "그냥"을 (이다 : 테이블의 HTML 코드) HTML 테이블을 복사하여 클립 보드에 이것은 실제로 당신이 생각하는 것보다 더 간단합니다. 엑셀 HTML 테이블을 디코딩하는 방법을 알고; 심지어 속성을 유지하려고합니다.

    어려운 부분은 자바 스크립트에서 클립 보드에 액세스하는 표준 방법이 없기 때문에 "클립 보드에 테이블을 복사"입니다. - 성배 자바 스크립트와 시스템 클립 보드에 액세스 :이 블로그 게시물을 참조?

    이제 모든 당신이 필요가 HTML로 테이블입니다. 내가 jQuery를하고, HTML () 방법을 제안한다.


  9. 9.이 코드는 그래서 IE를 사용하는 것입니다 당신이 모든 사용자를 알고있는 상황에서 유용하다 IE이다 (일부 기업 환경, 예를 들어, 같은.)

    이 코드는 그래서 IE를 사용하는 것입니다 당신이 모든 사용자를 알고있는 상황에서 유용하다 IE이다 (일부 기업 환경, 예를 들어, 같은.)

    <script Language="javascript">
    function ExportHTMLTableToExcel()
    {
       var thisTable = document.getElementById("tbl").innerHTML;
       window.clipboardData.setData("Text", thisTable);
       var objExcel = new ActiveXObject ("Excel.Application");
       objExcel.visible = true;
    
       var objWorkbook = objExcel.Workbooks.Add;
       var objWorksheet = objWorkbook.Worksheets(1);
       objWorksheet.Paste;
    }
    </script>
    

  10. 10.가정 :

    가정 :

    Windows 용 솔루션 :

    IE의 창을 열고에 액세스 할 수있는 파이썬 코드 : ( ': // HTTP') theurl 변수는 URL을 포함

    ie = Dispatch("InternetExplorer.Application")
    ie.Visible = 1
    ie.Navigate(theurl)
    

    참고 : 페이지에 직접 액세스 할 수 없습니다 만, 로그인, 당신은 파이썬과 사용자 동작을 양식 데이터를 입력하고 에뮬레이션하여이 문제를 처리 할 필요가있는 경우

    여기에 예입니다

    from win32com.client import Dispatch
    ie.Document.all('username').value=usr
    ie.Document.all('password').value=psw
    

    웹 페이지에서 데이터의 검색을 위해 같은 방법으로. 이제 ID 'EL1'와 데이터를 포함하는 요소를 가정 해 봅시다. 변수에 요소 텍스트를 검색

    el1 = ie.Document.all('el1').value
    

    데이터가 파이썬 변수에 다음 때 파이썬을 사용하여 유사한 방식으로 엑셀 화면을 열 수 있습니다 :

    from win32com.client import Dispatch
    xlApp = Dispatch("Excel.Application")
    xlWb = xlApp.Workbooks.Open("Read.xls")
    xlSht = xlWb.WorkSheets(1)
    xlSht.Cells(row, col).Value = el1
    

    Mac 용 솔루션 :

    단지 팁 : 사용 AppleScript로 - 그것은 win32com.client 파견 간단하고 유사한 API를 가지고

    리눅스를위한 솔루션 :

    java.awt.Robot은 내가 애플 스크립트로 간단하게 그 캔 작업에 대해 알고 있음을 리눅스에 대한 클릭, 키 누름 (바로 가기 키를 사용할 수 있습니다)하지만 없음 API를 가지고이 작동 할 수


  11. 11.간단한 구글 검색까지이 상태 :

    간단한 구글 검색까지이 상태 :

    당신이 할 수없는 경우, 그는 대체 '드래그 앤 드롭'방식을 제공합니다 :

    http://www.mrkent.com/tools/converter/


  12. 12.그리고 지금 더 나은 방법이있다.

    그리고 지금 더 나은 방법이있다.

    자바 스크립트의 OpenXML SDK.

    https://openxmlsdkjs.codeplex.com/


  13. 13.하나의 솔루션은 모든 브라우저에서 사용할 수 있지만이를 automaticly을 할 수있는 실제적인 방법은 두 가지가 있습니다. 우선 당신은 엑셀 시트를 구축하기 위해 오픈 XML 사양을 사용해야합니다. 이전 버전의 Office 버전이 형식도 사용할 수 있도록 사용 가능한 Microsoft에서 무료 플러그인이 있습니다. 오픈 XML은 두 가지 방법이 서버 측 또는 클라이언트 측 명백하다 사무실 2007 년부터 표준입니다.

    하나의 솔루션은 모든 브라우저에서 사용할 수 있지만이를 automaticly을 할 수있는 실제적인 방법은 두 가지가 있습니다. 우선 당신은 엑셀 시트를 구축하기 위해 오픈 XML 사양을 사용해야합니다. 이전 버전의 Office 버전이 형식도 사용할 수 있도록 사용 가능한 Microsoft에서 무료 플러그인이 있습니다. 오픈 XML은 두 가지 방법이 서버 측 또는 클라이언트 측 명백하다 사무실 2007 년부터 표준입니다.

    클라이언트 측 구현을 사용하면 데이터에 데이터 대신 단지 URL을 저장할 수 있도록 CSS의 새로운 표준. 이것은 당신이 어떤 servercall, 단지 데이터와 일부 자바 스크립트를 필요가없는 사촌 가장 좋은 방법이 될 수 있습니다. 살인 단점은 마이크로 소프트가 현재의 IE에서 그것의 모든 부분 (나는 IE9 모르는) 버전을 지원하지 않는다는 것입니다. 마이크로 소프트는 이미지로 데이터를 제한하지만 우리는 문서가 필요합니다. 파이어 폭스에서 그것은 매우 잘 작동합니다. 나를 위해 IE는 죽이고 점이었다.

    다른 방법은 사용자에게 서버 측 구현입니다. 모든 언어의 오픈 XML의 많은 구현이 있어야합니다. 당신은 하나를 그랩 할 필요가있다. 대부분의 경우 문서 발생할 수있는 뷰 모델을 수정하는 가장 간단한 방법이 될 것이다 그러나 확실히 당신은 서버에 클라이언트 측의 뒷면에서 모든 데이터를 전송하고 동일한 기능을 수행 할 수 있습니다.


  14. 14.

       function normalexport() {
    
           try {
               var i;
               var j;
               var mycell;
               var tableID = "tblInnerHTML";
               var drop = document.getElementById('<%= ddl_sections.ClientID %>');
               var objXL = new ActiveXObject("Excel.Application");
               var objWB = objXL.Workbooks.Add();
               var objWS = objWB.ActiveSheet;
               var str = filterNum(drop.options[drop.selectedIndex].text);
               objWB.worksheets("Sheet1").activate; //activate dirst worksheet
               var XlSheet = objWB.activeSheet; //activate sheet
               XlSheet.Name = str; //rename
    
    
               for (i = 0; i < document.getElementById("ctl00_ContentPlaceHolder1_1").rows.length - 1; i++) {
                   for (j = 0; j < document.getElementById("ctl00_ContentPlaceHolder1_1").rows(i).cells.length; j++) {
                       mycell = document.getElementById("ctl00_ContentPlaceHolder1_1").rows(i).cells(j);
    
                       objWS.Cells(i + 1, j + 1).Value = mycell.innerText;
    
                       //                                                objWS.Cells(i + 1, j + 1).style.backgroundColor = mycell.style.backgroundColor;
                   }
               }
    
               objWS.Range("A1", "L1").Font.Bold = true;
               //                objWS.Range("A1", "L1").Font.ColorIndex = 2;
               //                 objWS.Range("A1", "Z1").Interior.ColorIndex = 47;
    
               objWS.Range("A1", "Z1").EntireColumn.AutoFit();
    
               //objWS.Range("C1", "C1").ColumnWidth = 50;
    
               objXL.Visible = true;
    
           } catch (err) {
               alert("Error. Scripting for ActiveX might be disabled")
               return
           }
           idTmr = window.setInterval("Cleanup();", 1);
    
       }
    
    
       function filterNum(str) {
    
           return str.replace(/[ / ]/g, '');
       }
    
  15. from https://stackoverflow.com/questions/5524143/how-can-i-export-tables-to-excel-from-a-webpage by cc-by-sa and MIT license