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

时间:2014-05-15 20:36:29

标签: excel xpages

我有一个按钮,可以从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();

3 个答案:

答案 0 :(得分:1)

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

您也可以将css分配给您的to 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();

答案 1 :(得分:1)

它会进行更多调查,但我建议使用Apache POI写入Excel。它不像表格方法那样使用Excel 2007+抛出安全警报。它有更多用于设置样式的特定API。 HSSF类是你想要的(代表可怕的SpreadSheet格式!)。

答案 2 :(得分:0)

尝试添加: - )

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