2014-09-02 77 views
0

我有以下代碼HTML表格導出到Excel:HTML到Excel:數據格式改變

function exportToExcel(tableID) 
{ 
    var detailsTable= document.getElementById(tableID); 
    var oExcel = new ActiveXObject("Excel.Application"); 
    var oBook = oExcel.Workbooks.Add; 
    var oSheet = oBook.Worksheets(1); 
    for (var y=0;y<detailsTable.rows.length;y++) 
    { 
     for (var x=0;x<detailsTable.rows(y).cells.length;x++) 
     { 
      oSheet.Cells(y+1,x+1)= detailsTable.rows(y).cells(x).innerText; 
     } 
    } 

    oExcel.Visible = true; 
    oExcel.UserControl = true; 
    oExcel.Columns.AutoFit(); 
    oExcel.Rows.Autofit(); 
} 

出口工作,但Excel將改變在某些情況下的日期。而不是DD/MM/YYYY它會更改爲MM/DD/YYYY。

例如:在HTML中日期爲29/05/2014(DD/MM/YYYY),在Excel中日期爲29/05/2014(DD/MM/YYYY)。在HTML中,日期爲2014年2月7日(DD/MM/YYYY),日期爲07/02/2014(MM/DD/YYYY),這最後一種情況是錯誤的。

嘗試沒有格式化的JavaScript日期幸運:

var now = new Date(); 
now.format("dd/mm/yyyy"); 

嘗試使用NumberFormat的不幸運:

oExcel.Cells(y+1,x+1).NumberFormat = "DD/MM/YYYY"; 

試圖用風格在TD不幸運:

style="mso-number-format:"dd\/mm\/yyyy" 

UPDATE:

添加(作爲測試):

oSheet.Cells(y+1,x+1).NumberFormat = "[$-F800]dddd, mmmm dd, yyyy" 

內側的第二for,實際上格式化日期。正如我所看到的,在這一點上日期已經是錯誤的了。我的意思是,表格中顯示的是07/11/2014(dd/mm/yyyy),並在出口顯示11/07/2014(mm/dd/yyyy)

+0

你可以試試'oExcel.Cells(y + 1,x + 1).NumberFormat = 14;'看看是否有效? – 2014-11-28 19:36:18

+0

我會稍後再試。謝謝。 – Khrys 2014-11-29 11:02:05

+0

好吧,它在單元格中插入「14」,格式化日期爲dd/mm/yyyy帶來的結果好像是mm/dd/yyyy – Khrys 2014-12-02 19:53:19

回答

0

這是我用來轉換的不同方法html表格以csv和excel.Its平臺獨立即工程還ActiveXObject不可用。所以代碼如下,希望它可以幫助你。

你的表的代碼應該有以下結構:

  <table> 
      <thead> 
       <tr class="list"> 
        <th>Column Header</th> 
        <th>Column Header</th> 
        <th>Column Header</th> 
       </tr> 
      </thead> 
      <tbody> 

        <tr class="list"> 
         <td>11</td> 
         <td style="background: #33cc00;">11</td> 
         <td>22</td> 
        </tr> 

        <tr class="list odd"> 
         <td>22</td> 
         <td style="background: #33cc00;">22</td> 
         <td>22</td> 
        </tr> 



      </tbody> 
     </table> 

注意,只是分配類名列表,你在Excel文件中所需的行。

然後jQuery的一部分

 $u("#btnXLS").click(function(){ 

      var xls = jQuery(".list").map(function(a,i){ 
       return $u.trim($u(this).text()).split(/\s*\n\s*/).join("\t"); 
      }).toArray().join("\r\n"); 
      download(xls, "All_Data.xls", "application/vnd.ms-excel"); 

     }); 

和下載功能如下

 function download(strData, strFileName, strMimeType) 
     { 
      var D = document, 
      a = D.createElement("a"); 
      var Data="Date :-"+Date(); 
      Data +="\n\n"+strData; 
      strData =Data; 
      strFileName=strFileName.substr(0,strFileName.indexOf('.')); 
      strFileName +=Date(); 
      if(strMimeType.indexOf("text/csv") >= 0) 
       strFileName +=".csv"; 
      else 
       strFileName +=".xls"; 
      strMimeType= strMimeType || "application/octet-stream"; 
      if (window.MSBlobBuilder) { //IE10+ routine 
       var bb = new MSBlobBuilder(); 
       bb.append(strData); 
       return navigator.msSaveBlob(bb, strFileName); 
      } /* end if(window.MSBlobBuilder) */ 
      if ('download' in a) { //html5 A[download] 
       if(!window.URL){ 
        a.href= window.URL.createObjectURL(new Blob([strData])); 

      }else{ 
        a.href = "data:" + strMimeType + "," + encodeURIComponent(strData); 
      } 

       a.setAttribute("download", strFileName); 
       a.innerHTML = "downloading..."; 
       D.body.appendChild(a); 
       setTimeout(function() { 
        a.click(); 
        D.body.removeChild(a); 
       }, 66); 
       return true; 
      } /* end if('download' in a) */ 
      //do iframe dataURL download (old ch+FF): 
      var f = D.createElement("iframe"); 
      D.body.appendChild(f); 
      f.src = "data:" + strMimeType + "," + encodeURIComponent(strData); 

      setTimeout(function() { 
       D.body.removeChild(f); 
      }, 333); 
      return true; 
     } /* end download() */ 
+0

稍後再試。我即將放棄我使用的代碼,因爲它只適用於IE。我正要尋找一個獨立的瀏覽器解決方案。謝謝。 – Khrys 2014-11-29 11:03:39

+0

這裏是jsfiddle'http:// jsfiddle.net/ecjuyoyc /' – 2014-11-29 11:17:15

+0

謝謝。它在IE11中不起作用,在Firefox中下載文件,但在Excel中它提醒用戶文件不同。打開文件,所有數據都在第一列。我使用的解決方案非常好,因爲它可以打開excel,數據不會提醒用戶。我們可以用相同的行爲來解決您的問題嗎?謝謝 – Khrys 2014-11-29 11:28:51

0

這可能不是你想要的,但我有一個很好的格式化的表格顯示數據的Web應用程序,如果他們想要在Excel中,我只是寫一個完全相同的數據到一個新的頁面,但更改標題爲MIME類型的Excel,它的作品非常漂亮!獲取格式,顏色等。很好地顯示標題。只是一個想法。