I use Apache POI to export data in excel format. The import goes well, but when I try to open the document I have this message "Excel has encountered an unreadable content in the document "toto.xls". Would you want to recover the contents of this workbook? If the source of this workbook is reliable click yes. "
我使用Apache POI以excel格式导出数据。导入进展顺利,但当我尝试打开文档时,我收到此消息“Excel在文档中遇到了不可读的内容”toto.xls“。是否要恢复此工作簿的内容?如果此工作簿的来源是可靠的点击是。“
Below is the java code of export excel
以下是export excel的java代码
public void exportExcel() throws IOException {
// Creation workbook vide
XSSFWorkbook workbook = new XSSFWorkbook();
// Creation d'une feuille vierge
XSSFSheet sheet = workbook.createSheet("Participant");
List<toto> totoList = this.getAllToto;
int indiceMap = 2;
Map<String, Object[]> data = new TreeMap<String, Object[]>();
data.put("1", new Object[] { "name", "surname" });
for (TotoBean l : totoList) {
data.put(Integer.toString(indiceMap),
new Object[] { l.getName(), l.getSurname() });
indiceMap++;
}
// Iteration sur la map data et ecriture dans dans la feuille excel
Set<String> keyset = data.keySet();
int rownum = 0;
for (String key : keyset) {
Row row = sheet.createRow(rownum++);
Object[] objArr = data.get(key);
int cellnum = 0;
for (Object obj : objArr) {
Cell cell = row.createCell(cellnum++);
if (obj instanceof String)
cell.setCellValue((String) obj);
else if (obj instanceof Integer)
cell.setCellValue((Integer) obj);
}
}
DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
String dateToday = dateFormat.format(new Date());
// Ecriture du fichier excel comme attachement
ByteArrayOutputStream outByteStream = new ByteArrayOutputStream();
workbook.write(outByteStream);
byte[] outArray = outByteStream.toByteArray();
String fileOut = "Liste-toto[" + this.getCity() + "]"
+ dateToday + ".xlsx";
HttpServletResponse response = (HttpServletResponse) FacesContext
.getCurrentInstance().getExternalContext().getResponse();
response.setContentType("application/vnd.ms-excel");
response.setContentLength(outArray.length);
response.setHeader("Content-Disposition", "attachment; filename=\""
+ fileOut + "\"");
OutputStream outStream = response.getOutputStream();
outStream.write(outArray);
outStream.flush();
outStream.close();
}
2 个解决方案
#1
3
Your problem is the mis-match of these two lines
你的问题是这两行不匹配
XSSFWorkbook workbook = new XSSFWorkbook();
and
response.setContentType("application/vnd.ms-excel");
If you really want to generate a .xls
older-style Excel workbook, you need to change the first line to be HSSFWorkbook
rather than XSSFWorkbook
如果您确实要生成.xls旧式Excel工作簿,则需要将第一行更改为HSSFWorkbook而不是XSSFWorkbook
If you do mean to generate a .xlsx
Excel workbook, then the content type on the second line needs to be the correct .xlsx one, which would be:
如果您的意思是生成.xlsx Excel工作簿,那么第二行上的内容类型必须是正确的.xlsx,这将是:
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
#2
0
You might consider opening it "As Adminstrator". According to this ( https://superuser.com/questions/401714/how-do-i-resolve-the-error-excel-found-unreadable-content-in-filename ) its a work around.
您可以考虑将其打开为“作为管理员”。根据这个(https://superuser.com/questions/401714/how-do-i-resolve-the-error-excel-found-unreadable-content-in-filename)来解决它。
#1
3
Your problem is the mis-match of these two lines
你的问题是这两行不匹配
XSSFWorkbook workbook = new XSSFWorkbook();
and
response.setContentType("application/vnd.ms-excel");
If you really want to generate a .xls
older-style Excel workbook, you need to change the first line to be HSSFWorkbook
rather than XSSFWorkbook
如果您确实要生成.xls旧式Excel工作簿,则需要将第一行更改为HSSFWorkbook而不是XSSFWorkbook
If you do mean to generate a .xlsx
Excel workbook, then the content type on the second line needs to be the correct .xlsx one, which would be:
如果您的意思是生成.xlsx Excel工作簿,那么第二行上的内容类型必须是正确的.xlsx,这将是:
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
#2
0
You might consider opening it "As Adminstrator". According to this ( https://superuser.com/questions/401714/how-do-i-resolve-the-error-excel-found-unreadable-content-in-filename ) its a work around.
您可以考虑将其打开为“作为管理员”。根据这个(https://superuser.com/questions/401714/how-do-i-resolve-the-error-excel-found-unreadable-content-in-filename)来解决它。