2013-02-27 116 views
0

我正在創建一個web應用程序,我想在結果中顯示一個excel圖標。當用戶點擊圖標時,它應該在客戶端機器上打開一個電子表格,其中有一些數據由服務器發送(客戶端將安裝excel)。如何在客戶端創建一個excel電子表格

我寫了一些代碼來從webservice在我的本地機器上創建excel。

public class App 
{ 
    public static void main(String[] args) 
{ 
    try { 
    URL oracle = new URL("http://someService.com"); 
    URLConnection yc =null; 
     yc = oracle.openConnection(); 
      //Get the workbook instance for XLS file 

      HSSFWorkbook workbook = new HSSFWorkbook(); 
      HSSFSheet sheet = workbook.createSheet("Sample sheet"); 
      BufferedReader in = new BufferedReader(
        new InputStreamReader(
        yc.getInputStream())); 
      String inputLine; 
      int rowNum =0; 
       while ((inputLine = in.readLine()) != null) { 
        Row row = sheet.createRow(rowNum++); 
        String[] coloumns = inputLine.split("\t"); 
        int cellNum =0; 
        for(String coloumn: coloumns){ 
         coloumn. 
          Cell cell = row.createCell(cellNum++); 
          cell.setCellValue(coloumn); 
        } 
        System.out.println(inputLine); 
     } 
       in.close(); 
       FileOutputStream out = 
         new FileOutputStream(new File("C:\\libraries\\new.xls")); 
       workbook.write(out); 
       out.close(); 
       System.out.println("Excel written successfully.."); 

     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 




    } 
    } 

這工作得很好。 它所做的只是讀取來自Web服務的數據,並在C:\ libraries \ new.xls的機器中創建電子表格。

現在,如果我在網絡應用程序,我想打開客戶機上的電子表格。我不必保存表格。只需打開數據。

如何使用Web服務中的這些數據在客戶機上打開電子表格?

編輯

這是我的新的服務器代碼:

@RequestMapping(value = "/Excel") 
    public void getFile(HttpServletResponse response){ 
     OutputStream out =null; 
     try { 
      out = response.getOutputStream(); 
     } catch (IOException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 
     response.setContentType("application/x-ms-excel"); 
     try { 
       URL oracle = new URL("http://someService.com"); 
       URLConnection yc =null; 
        yc = oracle.openConnection(); 
         //Get the workbook instance for XLS file 
        IOUtils.copy(yc.getInputStream(),out); 
        out.flush(); 
          System.out.println("Excel written successfully.."); 

        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 

} 

所以現在我跑的Web應用程序和什麼都沒有發生?我應該在前端做些什麼來調用這個流。

+1

你需要有這樣一個servlet或類似的,而不是一個主要方法裏面。你使用的是什麼應用程序服務器/框架?你應該從那裏開始。 – 2013-02-27 19:39:25

+0

我使用的是spring mvc – javaMan 2013-02-27 19:40:26

+0

上面的代碼只是一些代碼來驗證apache poi是否可以完成這項工作。它的確如此。現在我想將其遷移到我的網絡應用程序。但無法弄清楚。我如何在客戶機上調用excel? – javaMan 2013-02-27 19:43:20

回答

2

你可以做這樣的事情一個Spring MVC的控制器內將文件發送到客戶端的計算機:

@RequestMapping(value = "/myexcelreport") 
public void getFile( 
    HttpServletResponse response) { 
    OutputStream out=response.getOutputStream(); 
    response.setContentType("application/x-ms-excel"); 
    ... Same code a before, just use out instead of a FileOutputStream , and don't close out. 
    out.flush(); 

} 
+0

所以,現在我可以直接發送從web服務接收到的輸入流。我有點困惑。你能解釋什麼ü用「,而不是使用FileOutputStream中 – javaMan 2013-02-27 20:03:57

+0

出來的意思是你的代碼看起來是正確的第一眼。當客戶點擊他們的瀏覽器的URL會發生什麼?你得到的服務器上例外日誌?在客戶端上的錯誤? – 2013-02-27 21:44:30

+0

任何錯誤。我不明白爲什麼這會工作。因爲我複製的InputStream輸出流。但它是什麼之後做的事情。我應該做的事情告訴前端做什麼?我的意思是這流將如何前端。 – javaMan 2013-02-27 22:05:19

相關問題