2016-09-21 1 views
1

Когда я экспортирую данные для Excel в 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

2 замечания: если вы используете thead, вы также должны использовать tbody. Во-вторых: удалите заголовок, который превращает его в Excel, и посмотрите, что должен сказать браузер -> или используйте curl, curl - ваш друг (тогда вы можете оставить заголовок) – stwissel

+0

Я пробовал оба, но это не помогает. Тем не менее, я могу выяснить, что вызывает проблему. Это было многозначное поле, которое выглядело правильно, но в то время, когда вы писали, чтобы excel выдавал ошибку. Поэтому я просто использовал @Implode в представлении, и ошибка исчезла. Спасибо в любом случае за ваше время. –

ответ

0

Это мульти поле значения, которое вызывает проблему. Когда он был замечен в представлении, он выглядел как раз запятая, но когда данные были написаны для Excel, то это вызывало проблему. Поэтому я использовал @Implode в представлении, и ошибка была решена.

1

Я бы использовал проект poi4xpages на openntf istead, пытаясь распечатать html файл excel. Некоторые версии Excel выдадут ошибки, если они используются.

https://poi4xpages.openntf.org/

Смежные вопросы