2016-09-21 18 views
1

當我從視圖中將Xpages中的數據導出爲ex​​cel時,excel的前幾行顯示的只是尖括號,然後是真實數據。下面是代碼片段。將數據從Xpages導出到Excel時模糊行

var exCon = facesContext.getExternalContext(); 
var writer = facesContext.getResponseWriter(); 
var response = exCon.getResponse(); 

response.setContentType("application/vnd.ms-excel"); 
response.setHeader("Cache-Control", "no-cache"); 
response.setHeader("Content-Disposition","attachment; filename=export.xls"); 

writer.write("<html>"); 
writer.write("<head>"); 
writer.write("<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>") 
writer.write("</head>"); 
writer.write("<body>"); 
// set-up the table header 
writer.write("<table>"); 
writer.write("<thead><tr>"); 

//Loop over view columns 
var totalColumns = vwCurrent.getColumnCount(); 
for(var x=1;x<=totalColumns;x++) { 
var column:NotesViewColumn = vwCurrent.getColumn(x); 
writer.write("<td><b>" + column.getTitle() + "</b></td>"); 
} 
writer.write("</tr></thead>"); 

// loop returned docs 
var docCurrent:NotesDocument = vwCurrent.getFirstDocument(); 

//Variables for Multivalued Columns 
var multiValueColSize = 0; 
var multiValueColIndex = 1; //Initialized to 1 as first value is just an indicator 

while(null != docCurrent){ 
    var docNext:NotesDocument = vwCurrent.getNextDocument(docCurrent); 

    // output data... 
    writer.write("<tr>"); 
    // get columns, use view to format data ;-) 
    var vectColumns:java.util.Vector = docCurrent.getColumnValues(); 
    for(intIndex = 0; intIndex < vectColumns.size(); intIndex++){ 
     var colValue = vectColumns.get(intIndex); 
     /*Calculated columns*/ 
     switch(@Left(colValue,4)) { 
     case "$PO$": 
      var data = colValue.split(";"); 
      colValue = getStatusDate(data[1], data[2]); 
      break; 

     case "$MO$": 
      var data = colValue.split(";"); 
      // Condition to ensure that, multivalued column with maximum size is set as multiValueColSize 
      if(multiValueColSize < data.length) 
       multiValueColSize = data.length; 
      //condition to ensure we do not get arrayindexOutofBond exception 
      if (multiValueColIndex < data.length){ 
       colValue = data[multiValueColIndex].split("##")[0]; 
      } else { 
       colValue = ""; 
      } 
      break; 
     } 
     writer.write("<td>" + colValue + "</td>"); 
    } 
    writer.write("</tr>"); 

    if (multiValueColSize == 0 || ((multiValueColSize-1) == multiValueColIndex)){ 
     // re-assign next 
     docCurrent.recycle(); 
     docCurrent = docNext; 
     // Re-initialize variables for Multivalued Columns 
     multiValueColSize = 0; 
     multiValueColIndex = 1; 
    } else { 
     //increment the index by 1 to populate next values in the list 
     multiValueColIndex = multiValueColIndex + 1; 
    } 
} 

// close the table and the document 
writer.write("</table>"); 

writer.write("<body>"); 
writer.write("</html>"); 
writer.endDocument() 

Snipped of Excel

我在哪裏做錯了嗎?任何線索?

+0

2註釋:如果你使用了一個thead,你也應該使用一個tbody。其次:刪除標題,將其轉化爲Excel並查看瀏覽器的說明 - >或使用捲曲,捲曲是你的朋友(然後你可以離開標題) – stwissel

+0

我嘗試了兩種方法,但沒有幫助。但是,我能夠找出造成問題的原因。這是一個多元化的領域,它在正確的觀點中出現,但寫入excel會產生錯誤。所以我只是在視圖中使用@Implode,錯誤消失了。無論如何感謝您的時間。 –

回答

0

這是這是造成問題的多值字段。當在視圖中看到它是正確的逗號分隔,但是當數據寫入excel時,同樣是造成問題。因此,我在視圖中使用了@Implode,並且錯誤得到了解決。

1

我會在openntf上使用poi4xpages項目,而不是嘗試打印出html excel文件。如果使用Excel,某些版本的Excel將出現錯誤。

https://poi4xpages.openntf.org/