如何使用servlet将其作为可下载的excel文件

我正在阅读一个txt文件,并将其写入到excel文件中,但是将其作为可下载的excel文件时,它不会写入任何数据来优化并显示此消息 警告消息,同时打开xls文件

下载到excel的逻辑

response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-Disposition", "attachment; filename=sampleName.xls"); String path = getServletContext().getRealPath(file); File file = new File(path); System.out.println("File:" + file); FileInputStream is = new FileInputStream(uploadFilePath + File.separator + file.getName()); try { InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); ArrayList<ArrayList<String>> exceldata = new ArrayList<ArrayList<String>>(); ArrayList<String> headerRow = new ArrayList<String>(); headerRow.add("Date and Time"); headerRow.add("NMEA Message Type"); headerRow.add("Fragments in the message"); headerRow.add("Fragments no"); headerRow.add("AIS MessageType"); headerRow.add("Repeat Indicator"); headerRow.add("MMSI Number"); headerRow.add("AIS Version"); headerRow.add("IMO Number"); headerRow.add("Navigational status"); headerRow.add("Rate Of Turn(ROT)"); headerRow.add("Speed Over Ground(SOG)"); headerRow.add("Position Accuracy(PA)"); headerRow.add("Longitude"); headerRow.add("Latitude"); headerRow.add("Course Over Ground(COG)"); headerRow.add("Heading(HDG)"); headerRow.add("Time Stamp"); exceldata.add(headerRow); String strLine; while ((strLine = br.readLine()) != null) { System.out.println(strLine); exceldata.add(decodeAisData(strLine)); } writeDataToExcelFile("praveen",exceldata); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { is.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } 

为了将数据写入excel:

 private void writeDataToExcelFile(String string, ArrayList<ArrayList<String>> excelData) { HSSFWorkbook myWorkBook = new HSSFWorkbook(); String sheetName = ""; sheetName = "Document-" + 0; HSSFSheet mySheet = myWorkBook.createSheet(sheetName); HSSFRow myRow = null; HSSFCell myCell = null; for (int rowNum = 0; rowNum < excelData.size(); rowNum++) { ArrayList<String> rowData = excelData.get(rowNum); myRow = mySheet.createRow(rowNum); for (int cellNum = 0; cellNum < rowData.size(); cellNum++) { myCell = myRow.createCell(cellNum); myCell.setCellValue(rowData.get(cellNum)); } } try { FileOutputStream out = new FileOutputStream("my.xls"); myWorkBook.write(out); out.close(); } catch (Exception e) { e.printStackTrace(); } } 

所以请给解决scheme,使其可下载。谢谢

您的writeDataToExcelFile方法将Excel数据写入到FileOutputStream中 – 这没有连接到响应OutputStream。

您应该更新writeDataToExcelFile方法以包含另一个参数:

 private void writeDataToExcelFile(String string, ArrayList<ArrayList<String>> excelData, OutputStream outputStream) 

并写入数据,改为:

 myWorkBook.write(outputStream); 

这应该允许myWorkBook对象回写到浏览器。

此外,将调用该方法的行更改为:

 writeDataToExcelFile("praveen",exceldata, response.getOutputStream()); 

我强烈不鼓励自己实现这个,因为你很可能会忘记一些特殊的情况,例如关于不同的分隔符,特殊字符,…

相反,使用许多现有的库之一。