① java excel導出到用戶本地
一般來說做下載功能的確是先導到伺服器的一個臨時目錄上的,然後再用一段代碼把這個excel讀出來,並且輸出到response流裡面去,給你一段可以用的代碼
//------------------------------
//step1.保存一個臨時excel到temp目錄下
//------------------------------
//這部分自己實現,我相信你已經實現了
//假設你已經實現了保存一個excel到一個臨時文件夾裡面去
//並且已經生成了一個File指向這個臨時的excel,名叫exportFile
//-------------------------------
//step2.彈出下載對話框
//-------------------------------
if(exportFile==null){
logger.error("生成excel錯誤!exportFile為空");
return;
}
//先建立一個文件讀取流去讀取這個臨時excel文件
FileInputStreamfs=null;
try{
fs=newFileInputStream(exportFile);
}catch(FileNotFoundExceptione){
logger.error("生成excel錯誤!"+exportFile+"不存在!",e);
return;
}
//設置響應頭和保存文件名
HttpServletResponseresponse=ServletActionContext.getResponse();
//這個一定要設定,告訴瀏覽器這次請求是一個下載的數據流
response.setContentType("APPLICATION/OCTET-STREAM");
try{
//這邊的"采購部門本月采購報表.xls"替換成你自己要顯示給用戶的文件名
excelName=URLEncoder.encode("采購部門本月采購報表.xls","UTF-8");
}catch(){
logger.error("轉換excel名稱編碼錯誤!",e1);
}
response.setHeader("Content-Disposition","attachment;filename=""+excelName+""");
//寫出流信息
intb=0;
try{
//這里的response就是你servlet的那個傳參進來的response
PrintWriterout=response.getWriter();
while((b=fs.read())!=-1){
out.write(b);
}
fs.close();
out.close();
logger.debug(sheetName+"文件下載完畢.");
}catch(Exceptione){
logger.error(sheetName+"下載文件失敗!.",e);
}
把這段代碼放到你的servlet的最後一部分
② Java伺服器做Excel導出遇到異常
這個異常產生的常見原因如下:
1、客戶端因為網路原因斷開連接了(例如拔網線)
2、客戶端在伺服器向Response的輸出流寫入內容前就強行中斷了連接(例如在下載框出現之前就點了「停止」按鈕)
3、Excel文件生成的過程太久了,客戶端程序達到超時時間,主動斷開了連接。
4、Nginx之類的負載均衡達到超時時間,斷開了負載均衡伺服器與應用伺服器的連接。
建議:
只要能排除第3、4,就不是程序的問題,就沒事了。
③ java web項目: 一個excel文件以二進制的形式存在資料庫中 如何將它導出並
poi讀取即可。
/**
* 讀取Excel數據內容
* @param InputStream
* @return Map 包含單元格數據內容的Map對象
*/
public Map<Integer, String> readExcelContent(InputStream is) {
Map<Integer, String> content = new HashMap<Integer, String>();
String str = "";
try {
fs = new POIFSFileSystem(is);
wb = new HSSFWorkbook(fs);
} catch (IOException e) {
e.printStackTrace();
}
sheet = wb.getSheetAt(0);
// 得到總行數
int rowNum = sheet.getLastRowNum();
row = sheet.getRow(0);
int colNum = row.getPhysicalNumberOfCells();
// 正文內容應該從第二行開始,第一行為表頭的標題
for (int i = 1; i <= rowNum; i++) {
row = sheet.getRow(i);
int j = 0;
while (j < colNum) {
// 每個單元格的數據內容用"-"分割開,以後需要時用String類的replace()方法還原數據
// 也可以將每個單元格的數據設置到一個javabean的屬性中,此時需要新建一個javabean
// str += getStringCellValue(row.getCell((short) j)).trim() +
// "-";
str += getCellFormatValue(row.getCell((short) j)).trim() + " ";
j++;
}
content.put(i, str);
str = "";
}
return content;
}
④ javaweb 使用freemarker導出Excle,打開之後提示,格式與擴展名不符,點擊「是」,依然可以打開
當然可以打開,擴展名只是用來提示系統選擇什麼軟體打開文件並不會影響文件內容。要解決這個問題只要把下載的文件後綴名和模板後綴設置一致就行了
⑤ javaweb中通過POI生成Excel並彈出下載窗口!
把response的輸出類型設置成
response.setContentType("application/x-download
response.addHeader("Content-Disposition","attachment;filename=myexcel.xls" );
POI結果直接給response的輸出流,就可以了