Xpages,将视图保存到excel文件中

我想将search报告保存到excel文件中,但保存的扩展名不是.xsp。

我使用下面的代码:

<?xml version="1.0" encoding="UTF-8"?> <xp:view xmlns:xp="http://www.ibm.com/xsp/core" rendered="false"> <xp:this.afterRenderResponse><![CDATA[#{javascript: var exCon = facesContext.getExternalContext(); var writer = facesContext.getResponseWriter(); var response = exCon.getResponse(); var myView:NotesView = database.getView('vwSearch'); var viewNav:NotesViewNavigator = myView.createViewNav(); var viewEnt:NotesViewEntry = viewNav.getFirst(); print("2") response.setContentType("application/vnd.ms-excel"); response.setHeader("Cache-Control", "no-cache"); writer.write("<table>"); writer.write("<thead><tr>"); writer.write("<td><b>Column1Header</b></td>"); writer.write("<td><b>Column2Header</b></td>"); writer.write("<td><b>Column3Header</b></td>"); writer.write("<td><b>Column4Header</b></td>"); writer.write("<td><b>Column5Header</b></td>"); writer.write("</tr></thead>"); while (viewEnt != null) { writer.write("<tr>"); writer.write("<td>" + viewEnt.getColumnValues()[0] + "</td>"); writer.write("<td>" + viewEnt.getColumnValues()[1] + "</td>"); writer.write("<td>" + viewEnt.getColumnValues()[2] + "</td>"); writer.write("<td>" + viewEnt.getColumnValues()[3] + "</td>"); writer.write("<td>" + viewEnt.getColumnValues()[4] + "</td>"); writer.write("</tr>"); viewEnt = viewNav.getNext(viewEnt); } writer.write("</table>"); writer.endDocument()}]]></xp:this.afterRenderResponse> </xp:view> 

我使用这个代码从一个pdf …这不是我自己的创作,也许有什么不对。

谢谢,

弗洛林

添加一行

 response.setHeader("Content-Disposition", "attachment; filename=yourfile.xls"); 

要么

 response.setHeader("Content-Disposition", "inline; filename=yourfile.xls"); 

使用“内联”,浏览器将尝试在浏览器中打开文件,而“附件”将强制下载。

这有什么问题?

 var exCon = facesContext.getExternalContext(); var writer = facesContext.getResponseWriter(); var response = exCon.getResponse(); var myView:NotesView = database.getView('vwSearch'); myView.FTSearch("sessionScope.search"); var viewNav:NotesViewNavigator = myView.createViewNav(); var viewEnt:NotesViewEntry = viewNav.getFirst(); response.setContentType("application/vnd.ms-excel"); response.setHeader("Cache-Control", "no-cache"); response.setHeader("Content-Disposition", "attachment; filename=raport.xls"); writer.write("<table>"); writer.write("<thead><tr>"); writer.write("<td><b>Nume</b></td>"); writer.write("<td><b>Ora Intrare</b></td>"); writer.write("<td><b>Ora Iesire</b></td>"); writer.write("<td><b>Timp</b></td>"); writer.write("<td><b>Timp 2</b></td>"); writer.write("<td><b>Data Creare</b></td>"); writer.write("<td><b>Email</b></td>"); writer.write("<td><b>Telefon</b></td>"); writer.write("</tr></thead>"); while (viewEnt != null) { writer.write("<tr>"); writer.write("<td>" + viewEnt.getColumnValues()[0] + "</td>"); writer.write("<td>" + viewEnt.getColumnValues()[1].toJavaDate().getHours()+":"+viewEnt.getColumnValues()[1].toJavaDate().getMinutes() + "</td>"); writer.write("<td>" + viewEnt.getColumnValues()[2].toJavaDate().getHours()+":"+viewEnt.getColumnValues()[2].toJavaDate().getMinutes() + "</td>"); writer.write("<td>" + viewEnt.getColumnValues()[3] + "</td>"); writer.write("<td>" + "08:00" + "</td>"); writer.write("<td>" + viewEnt.getColumnValues()[4].toJavaDate() + "</td>"); writer.write("<td>" + viewEnt.getColumnValues()[5] + "</td>"); writer.write("<td>" + viewEnt.getColumnValues()[6] + "</td>"); writer.write("</tr>"); viewEnt = viewNav.getNext(viewEnt); } writer.write("</table>"); writer.endDocument() 

即使我使用:myView.FTSearch(“Jeff”); 它不会只显示杰夫的文件…为什么?

不知道是否要一步执行search和导出全部内容,但始终可以修改视图select公式并刷新视图。 然后为用户提供一个导出button,以遵循Knut所说的修改当前代码的步骤。 我已经在之前的项目中完成了这项工作,我在Excel中打开导出并简单地保存为逗号分隔的文件。 在另一个项目中,我打电话给一个Xagent,它在beforeRenderResponse中的代码在单击button后在Excel中打开。 只是其他的select。