从Xpages视图导出到Excel并保留网格线

我有一个button,从Xpage导出到Excel的视图。 它工作得很好,但是当用户打开Excel时,没有网格线,我知道他们会吓坏了。 我已经在网上找了一个小时如何把这些,但我找不到。

有谁知道如何做到这一点?

这是我的代码“

var output:string = ""; for(i=0;i < sessionScope.searchDocIDArray.length; i++) { var docId=sessionScope.searchDocIDArray[i]; var doc=database.getDocumentByID(docId); output += "<tr>"; output += "<td>" + doc.getItemValueString("user") + "</td>"; output += "<td>" + doc.getItemValueString("loc") + "</td>"; output += "<td>" + doc.getItemValueString("date") + "</td>"; output += "<td>" + doc.getItemValueString("workCategory") + "</td>"; output += "<td>" + doc.getItemValueString("state") + "</td>"; output += "<td>" + doc.getItemValueString("timeSpent") + "</td>"; output += "<td>" + doc.getItemValueString("notes") + "</td>"; output += "</tr>"; } facesContext.getExternalContext().getResponse().setHeader("Content-disposition", "attachment; filename=TSC Time Spent.xlxs"); facesContext.getExternalContext().getResponse().setHeader("Cache-Control", "no-cache"); facesContext.getResponseWriter().write("<x:WorksheetOptions>") facesContext.getResponseWriter().write("<x:Panes>"); facesContext.getResponseWriter().write("</x:Panes>"); facesContext.getResponseWriter().write("<x:WorksheetOptions>") facesContext.getResponseWriter().write("<table><thead><tr><td><b>User</b></td><td><b>Loc</b></td><td><b>Date</b></td><td><b>Work Category</b></td><td><b>Time Spent</b></td><td><b>Notes</tr></thead>"+output+"</table>"); facesContext.getResponseWriter().endDocument(); 

确保网格线完整的一种方法是导出到csv,而不是使用html标签写出您的内容。

你也可以将css分配给你的td元素,但是边界不会像在excel中原生的那样。

这里是使用csv的一个例子。 这是我在afterRenderResponse中使用的简化版本:

 var exCon = facesContext.getExternalContext(); var writer = facesContext.getResponseWriter(); var response = exCon.getResponse(); var output = ""; var colHeaders = "col1,col2,col3,col4,col5"; // Loop through data set while (doc != null) { output+="\"" + val1 + "\","; output+="\"" + val2 + "\","; output+="\"" + val3 + "\","; output+="\"" + val4 + "\","; output+="\"" + val5 + "\","; output += @Char(13)+@Char(10); // start a new row } response.setContentType("application/csv-tab-delimited-table;charset=utf-8"); response.setHeader("Cache-Control", "no-cache"); response.setHeader("Content-Disposition", "attachment;filename=actionExport.csv"); writer.write(colHeaders+@Char(13)+@Char(10)); // Add the first row as column titles and add line feed writer.write(output+@Char(13)+@Char(10)); // writer.endDocument(); 

这将需要更多的调查,但我会build议寻找使用Apache POI写入Excel。 它不会像Excel表格那样使用Excel 2007+引发安全警报。 它有更多特定的API来设置样式。 HSSF类是你想要的(代表恐怖的电子表格格式!)。

尝试添加这个:-)

 <x:WorksheetOptions> <x:DisplayGridlines/> </x:WorksheetOptions>