2011-07-27 105 views
0

我已經使用jxls.jar庫將數據導出爲ex​​cel格式並以* .xls格式存儲在文件中。 我怎樣才能打開或促進對話框打開或使用的servlet 完成寫入處理之後將該文件保存到文件中的所有proccess寫入到文件中單獨的函數完成..如何通過servlet打開Excel文件

回答

2

據我所知,你有Excel文件爲File對象,並要提供這作爲一個下載到客戶端。您需要將Content-Disposition標題設置爲attachment以讓客戶端顯示另存爲對話。您還需要設置Content-Type標頭,以便讓客戶知道它是什麼文件類型,以便它最終可以將正確的應用程序與它關聯,以便終端用戶希望立即打開它。最後,設置Content-Length標題最好是因爲它改善了服務性能(否則Servlet API將回退到需要更多字節和處理時間的分塊編碼)。

設置正確的標題後,只需要將InputStreamFile寫入到HttpServletResponseOutputStream即可。

private static final int DEFAULT_BUFFER_SIZE = 8192; // 8KB. 
// ... 

File file = createExcelFileSomehow(); 
// ... 

response.reset(); 
response.setBufferSize(DEFAULT_BUFFER_SIZE); 
response.setHeader("Content-Type", "application/vnd.ms-excel"); 
response.setHeader("Content-Length", String.valueOf(file.length())); 
response.setHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + "\""); 

BufferedInputStream input = null; 
BufferedOutputStream output = null; 

try { 
    input = new BufferedInputStream(new FileInputStream(file), DEFAULT_BUFFER_SIZE); 
    output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE); 

    byte[] buffer = new byte[DEFAULT_BUFFER_SIZE]; 
    for (int length; (length = input.read(buffer)) > -1;) { 
     output.write(buffer, 0, length); 
    } 
} finally { 
    if (output != null) try { output.close(); } catch (IOException ignore) {} 
    if (input != null) try { input.close(); } catch (IOException ignore) {} 
} 
0

此代碼段應該可以幫助您。當您在IE瀏覽器中以內聯方式給予內容處置時,它將在不提示對話框的情況下打開Excel。

response.setContentType("application/vnd.ms-excel"); 
response.setHeader("Content-disposition","inline;fileName=" + fileName); 
final java.io.OutputStream os = response.getOutputStream(); 

調用createExcel功能通過OutputStream對象

 
os.flush(); 
os.close();