簡單Excel表格上傳下載,POI


一、廢話

Excel表格是office軟件中的一員,幾乎是使用次數最多的辦公軟件。所以在java進行企業級應用開發的時候經常會用到對應的上傳下載便利辦公。

目前,比較常用的實現Java導入、導出Excel的技術有兩種Jakarta POI和Java Excel。

我最近使用的是POI進行上傳下載。

官方主頁http://poi.apache.org/index.html,API文檔http://poi.apache.org/apidocs/index.html

 

二、正事

HSSF(用於操作Excel的組件)提供給用戶使用的對象在rg.apache.poi.hssf.usermodel包中,有以下幾種對象:

HSSFWorkbook                      excel的文檔對象

HSSFSheet                         excel的表單

HSSFRow                           excel的行

HSSFCell                          excel的格子單元

HSSFFont                          excel字體

HSSFDataFormat                    日期格式

HSSFHeader                        sheet頭

HSSFFooter                        sheet尾(只有打印的時候才能看到效果)

HSSFCellStyle                       cell樣式

HSSFDateUtil                        日期

HSSFPrintSetup                      打印

HSSFErrorConstants                  錯誤信息表

 

其實Excel表格的操作類似於前端的TABLE操作:

HSSFWorkbook→HSSFSheet →HSSFRow→HSSFCell  

(工作文檔對象→列表單對象 →行對象→列對象)  

然后可以插入文字,設置格式,設置字體等處理

 

下面演示一個小小的示范

 1 //文件源對象
 2 POIFSFileSystem fs=null;
 3 //工作文檔對象
 4 HSSFWorkbook wb=null;
 5 //工作表單對象
 6 HSSFSheet sheet=null;
 7 
 8 fs=new POIFSFileSystem(new FileInputStream("D:/P1200/P1200/WebRoot/excel/"+filename+".xls"));
 9 wb = new HSSFWorkbook(fs);
10 //獲取第一個表單
11 sheet =wb.getSheetAt(0);
12 //獲取第一行
13 HSSFRow row = sheet.getRow(0);
14 //獲取第一行的第一列
15 HSSFCell cell = row.getCell(0);
16 //為得到的單元格對象賦值
17 cell.setCellValue("隨意");

操作過程中需要記得幾個要點:

第一:你操作的對象是建立在java中的對象所以最后要是用如下IO流進行實現

1 FileOutputStream fileOut = new FileOutputStream("D:/P1200/P1200/WebRoot/excel/"+filename+".xls");
2 wb.write(fileOut);

第二:注意每一個對象類似數組:也就是說起點是0;

第三:setCellValue()這個方法現在是不推薦使用;

 

 

現在給出一個SpringMVC上傳實例;

@RequestMapping("/report")
    public String report(@RequestParam("Excle")MultipartFile file,HttpServletRequest request){
                //設置文件名,由系統時間生成比較難沖突,用來保存上傳記錄
        String fileName=System.currentTimeMillis()+".xls";
        String path = request.getSession().getServletContext().getRealPath("reportExcle");
                  //創建文檔對象
        File targetFile = new File(path,fileName);
                  //異常字符串
        String EXCEPTION_PersonMsg=null;
                   //文檔對象實例化
        if(!targetFile.exists()){
            targetFile.mkdirs();//遞歸創建父目錄
        }
        try {
            file.transferTo(targetFile);
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }                                                            
        
         

        HSSFWorkbook wb=null;
        try {
            POIFSFileSystem fs=new POIFSFileSystem(new FileInputStream("d:/P1200/P1200/WebRoot/reportExcle/"+fileName)); 
            wb = new HSSFWorkbook(fs);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        
        //得到Excel工作表對象    
                HSSFSheet sheet = wb.getSheetAt(0);   

        
        //校驗可以不用看自己另外寫
      
        
        //與數據庫進行交互
     //通過循環遍歷表中每行
for(i=1;i<sheet.getLastRowNum();i++){ Personalmsg bean=new Personalmsg(); HSSFRow row = sheet.getRow(i);
//通過循環遍歷行中每列
for(int j=0;j<5;j++){ HSSFCell cell = row.getCell((short)j); System.out.println(cell); if(j==1&&cell!=null&&!cell.toString().trim().equals("")){ bean.setPersonMsgs(cell.toString()); } if(j==2&&cell!=null&&!cell.toString().trim().equals("")){ bean.setPersonMsgNote(cell.toString()); } if(j==3&&cell!=null&&!cell.toString().trim().equals("")){ bean.setPrice(Double.parseDouble(cell.toString())); } if(j==4){ bean.setPersonMsgDate(new Date()); bean.setStatus(1); System.out.println(bean); XXXXXXXX.save(bean); } } } return "redirect:/test/PersonMsg/tolist.spring"; }

在使用上傳過程中可以把上傳文件直接轉換成IO流不用保存源文件

在上傳過程中應該避免以ajax技術提交文件,因為會與MultipartFile沖突導致找不到對應的Requestmapping

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM