2016-09-21 2 views
1

보기에서 Xpages로 데이터를 내보낼 때 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

비고 : 당신이 thead를 사용한다면, 당신도 tbody를 사용해야합니다. 둘째 : 엑셀로 변환하는 헤더를 제거하고 브라우저가 무엇을 말해야하는지 살펴보십시오 -> 또는 컬 사용, 컬은 친구입니다 (헤더를 남길 수 있습니다) – stwissel

+0

둘 다 시도했지만 도움이되지 않습니다. 그러나 문제의 원인을 파악할 수 있습니다. 보기에 적절하게 나타나지만 오류를 발생시키는 데 탁월한 글쓰기를하는 다차원 필드였습니다. 그래서 나는보기에서 @Implode를 사용했고 오류는 사라졌습니다. 어쨌든 고맙습니다. –

답변

0

이 문제를 일으키는 다중 값 필드이다. 보기에서 볼 때 제대로 쉼표로 구분되어 나오기 시작했지만 데이터가 Excel로 작성되면 문제가 발생했습니다. 따라서보기에서 @Implode를 사용하고 오류가 해결되었습니다.

1

나는 openntf istead에서 poi4xpages 프로젝트를 사용하여 html Excel 파일을 출력하려고합니다. 이 버전을 사용하면 일부 버전의 Excel에서 오류가 발생합니다.

https://poi4xpages.openntf.org/

관련 문제