Export to Excel JSF and PrimeFaces
我正在尝试下载在运行时创建的CSV文件。此链接对excel非常有用,我需要对CSV执行相同操作。 HSSFWorkbook
用于Excel,但我使用FileWriter
表示CSV。我需要使用一行而不是workbook.write(externalContext.getResponseOutputStream());
我不能使用writer.write(externalContext.getResponseOutputStream());
writer是FileWriter
变量,并且不接受outputStream作为参数。
答案 0 :(得分:2)
在我看来,你有两个问题:
如果您不想写入文件,则不应该有FileWriter
- 您需要为您的用例选择正确的Writer抽象类实现(在这里,您需要选择写入OutputStream
而不是File
)的那个。
您尝试使用Writer#write(...)
HSSFWorkbook#write(java.io.OutputStream)
,但他们根本不会做同样的事情。在HSSFWorkbook中,write方法将工作簿的内容写入某个OutputStream;该参数告诉您要编写的方法 where 。在Writer中,write方法将一些东西写入writer本身;该参数告诉方法你想写什么。
根据您从HSSFWorkbook写入的链接,以类似方式编写CSV可能如下所示:
public void getReportData() throws IOException {
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
externalContext.setResponseContentType("text/csv");
externalContext.setResponseHeader("Content-Disposition", "attachment; filename=\"my.csv\"");
OutputStream out = externalContext.getResponseOutputStream());
Writer writer = new OutputStreamWriter(out);
// Let's write the CSV content
try {
writer.write("Line number,Col 1,Col 2");
writer.write("1,Value 1,Value 2");
writer.write("2,Value 3,Value4");
} finally {
if (writer != null {
// Closing the writer also flushes it, and does the same to the underlying OutputStream
writer.close();
}
}
facesContext.responseComplete();
}
答案 1 :(得分:0)
您可以使用的整个工作副本;
String csvFileName = "mydoc.csv";
FileWriter writer = new FileWriter(csvFileName);
int columnNameSize = activeTab.getColumnNames().size();
for (int i = 0; i < columnNameSize; i++) {
writer.append(activeTab.getColumnNames().get(i));
if (i != (columnNameSize - 1)) {
if (delimiterType.equalsIgnoreCase(TAB_DELIMITER_VALUE_NAME)) {
writer.append('\t');
} else {
writer.append(delimiterType);
}
}
}
writer.append("\n");
for (DBData[] temp : activeTab.getTabularData()) {
int tempSize = temp.length;
for (int k = 0; k < tempSize; k++) {
writer.append(temp[k].toFullString());
if (k != (tempSize - 1)) {
if (delimiterType.equalsIgnoreCase(TAB_DELIMITER_VALUE_NAME)) {
writer.append('\t');
} else {
writer.append(delimiterType);
}
}
}
writer.append("\n");
}
writer.flush();
writer.close();
InputStream stream = new BufferedInputStream(new FileInputStream(csvFileName));
exportFile = new DefaultStreamedContent(stream, "application/csv", csvFileName);