如何使用servlet作为可下载的excel文件 [英] How to make it as downloadable excel file using servlets
问题描述
我正在读取一个txt文件并将其写入excel文件,但在将其作为可下载的excel文件时,它不会将任何数据写入excel并显示此消息
I am reading a txt file and writing it into excel file, but while making it as downloadable excel file it is not writing any data to excel and giving showing this message
下载到excel中的逻辑
logic for downloading into 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:
For writing the data to 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();
}
}
所以请给出解决方案它是可下载的。谢谢
So please give solution to make as it as downloadable.Thanks
推荐答案
您的 writeDataToExcelFile
方法写入Excel数据转换成FileOutputStream - 这不连接到响应OutputStream。
Your writeDataToExcelFile
method writes the Excel data into a FileOutputStream - this is not connected to the response OutputStream.
您应该更新 writeDataToExcelFile
方法以包含另一个参数:
You should update the writeDataToExcelFile
method to include another parameter:
private void writeDataToExcelFile(String string,
ArrayList<ArrayList<String>> excelData,
OutputStream outputStream)
并写入数据,更改为:
myWorkBook.write(outputStream);
然后应该允许myWorkBook对象回写到浏览器。
This should then permit the myWorkBook object to write back to the browser.
另外,将调用该方法的行更改为:
Also, change the line that calls the method to:
writeDataToExcelFile("praveen",exceldata, response.getOutputStream());
这篇关于如何使用servlet作为可下载的excel文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!