Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xpages,将视图保存到excel文件中_Excel_View_Xpages - Fatal编程技术网

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

Xpages,将视图保存到excel文件中,excel,view,xpages,Excel,View,Xpages,我想将搜索报告保存到excel文件中,但它是以.xsp扩展名而不是excel保存的 我使用以下代码: <?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 = facesCon

我想将搜索报告保存到excel文件中,但它是以.xsp扩展名而不是excel保存的

我使用以下代码:

<?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中的代码。。。这不是我自己创造的,也许是出了问题

谢谢

Florin

添加一行

response.setHeader("Content-Disposition", "attachment; 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()
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”);
setHeader(“缓存控制”、“无缓存”);
setHeader(“内容处置”、“附件;文件名=raport.xls”);
作者:写(“”);
作者:写(“”);
作家。写(“Nume”);
作家。写作(“Ora intrale”);
作家。写作(“Ora Iesire”);
作者:编写(“Timp”);
writer.write(“TIMP2”);
writer.write(“数据凭证”);
作者:写信(“电子邮件”);
作家、作家(“Telefon”);
作者:写(“”);
while(viewEnt!=null){
作者:写(“”);
writer.write(“+viewEnt.getColumnValues()[0]+”);
write(“+viewEnt.getColumnValues()[1].toJavaDate().getHours()+”:“+viewEnt.getColumnValues()[1].toJavaDate().getMinutes()+”);
write(“+viewEnt.getColumnValues()[2].toJavaDate().getHours()+”:“+viewEnt.getColumnValues()[2].toJavaDate().getMinutes()+”);
writer.write(“+viewEnt.getColumnValues()[3]+”);
writer.write(“+”08:00“+”);
write(“+viewEnt.getColumnValues()[4].toJavaDate()+”);
writer.write(“+viewEnt.getColumnValues()[5]+”);
writer.write(“+viewEnt.getColumnValues()[6]+”);
作者:写(“”);
viewEnt=viewNav.getNext(viewEnt);
}
作者:写(“”);
writer.endDocument()
即使我使用: myView.FTSearch(“杰夫”);
它不会只显示带有Jeff的文档。。。为什么?

不确定是否要在一个步骤中执行搜索并全部导出,但您始终可以修改视图选择公式并刷新视图。然后向用户提供一个导出按钮,以按照Knut所说的步骤修改当前代码。我在以前的一个项目中这样做过,我在Excel中打开了导出,并简单地保存为逗号分隔的文件。在另一个项目中,我调用了一个Xagent,它在beforeRenderResponse中有代码,可以在单击按钮后在Excel中打开。只有其他选项。

如何从视图转换数据类型?因为我有一列显示数据/时间,我只希望时间显示在excel中。您可以使用
dateTime.setAnyDate()
-它从dateTime值中删除日期部分。或者,使用
.toJavaDate
将其转换为Java日期,并使用格式化程序获取时间。如何仅在搜索后导出文档?如何仅获取搜索视图中的文档?您需要在getView()行之后添加
myView.FTSearch(“yourSearch”)
。始终执行视图选择公式。您只能获得符合选择公式的文档。我理解您的问题,您希望在该视图上由.FTSearch执行额外的“子”搜索。有关此方法的更多信息,请参阅Notes文档Florin,您可能需要稍微清理一下代码。将.getColumnValues()赋给变量一次,并避免writer.write中的字符串串联。将缺少的.recycle()更改行添加到
myView.FTSearch(sessionScope.search)(不带引号),因为您要搜索sessionScope.search的值,而不是字符串“sessionScope.search”.Ups,刚刚意识到NotesViewNavigator忽略了FTSearch。您必须将代码更改为.getFirstDocument()和.getNextDocument(),或者使用NotesViewEntryCollection。您可以对其运行FTSearch。使用getFirstDoc和getNextDoc代替getFirst和getNext,它只返回一个文档。
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()