POI操做Excel經常使用方法總結 .

1、 POI簡介 
            Apache POI是Apache軟件基金會的開放源碼函式庫,POI提供API給Java程序對Microsoft Office格式檔案讀和寫的功能。 

2、 HSSF概況 
            HSSF 是Horrible SpreadSheet Format的縮寫,經過HSSF,你能夠用純Java代碼來讀取、寫入、修改Excel文件。HSSF 爲讀取操做提供了兩類API:usermodel和eventusermodel,即「用戶模型」和「事件-用戶模型」。

3、 POI EXCEL文檔結構類 
            HSSFWorkbook excel文檔對象 

            HSSFSheet excel的sheet HSSFRow excel的行 

            HSSFCell excel的單元格 HSSFFont excel字體 

            HSSFName 名稱 HSSFDataFormat 日期格式 

            HSSFHeader sheet頭 

            HSSFFooter sheet尾 

            HSSFCellStyle cell樣式 

            HSSFDateUtil 日期 

            HSSFPrintSetup 打印 

            HSSFErrorConstants 錯誤信息表 

4、 EXCEL經常使用操做方法 

一、 獲得Excel經常使用對象            
字體

Java代碼  收藏代碼lua

  1. POIFSFileSystem fs=newPOIFSFileSystem(new FileInputStream("d:/test.xls"));     spa

  2. //獲得Excel工做簿對象      excel

  3. HSSFWorkbook wb = new HSSFWorkbook(fs);    orm

  4. //獲得Excel工做表對象      對象

  5. HSSFSheet sheet = wb.getSheetAt(0);     事件

  6. //獲得Excel工做表的行      圖片

  7. HSSFRow row = sheet.getRow(i);    ci

  8. //獲得Excel工做表指定行的單元格      文檔

  9. HSSFCell cell = row.getCell((short) j);    

  10. cellStyle = cell.getCellStyle();//獲得單元格樣式    

  11. POIFSFileSystem fs=newPOIFSFileSystem(new FileInputStream("d:/test.xls"));   

  12. //獲得Excel工做簿對象   

  13. HSSFWorkbook wb = new HSSFWorkbook(fs);  

  14. //獲得Excel工做表對象   

  15. HSSFSheet sheet = wb.getSheetAt(0);   

  16. //獲得Excel工做表的行   

  17. HSSFRow row = sheet.getRow(i);  

  18. //獲得Excel工做表指定行的單元格   

  19. HSSFCell cell = row.getCell((short) j);  

  20. cellStyle = cell.getCellStyle();//獲得單元格樣式  



二、創建Excel經常使用對象 

Java代碼  收藏代碼

  1. HSSFWorkbook wb = new HSSFWorkbook();//建立Excel工做簿對象     

  2. HSSFSheet sheet = wb.createSheet("new sheet");//建立Excel工做表對象       

  3. HSSFRow row = sheet.createRow((short)0); //建立Excel工做表的行     

  4. cellStyle = wb.createCellStyle();//建立單元格樣式     

  5. row.createCell((short)0).setCellStyle(cellStyle); //建立Excel工做表指定行的單元格     

  6. row.createCell((short)0).setCellValue(1); //設置Excel工做表的值    

  7. HSSFWorkbook wb = new HSSFWorkbook();//建立Excel工做簿對象  

  8. HSSFSheet sheet = wb.createSheet("new sheet");//建立Excel工做表對象    

  9. HSSFRow row = sheet.createRow((short)0); //建立Excel工做表的行  

  10. cellStyle = wb.createCellStyle();//建立單元格樣式  

  11. row.createCell((short)0).setCellStyle(cellStyle); //建立Excel工做表指定行的單元格  

  12. row.createCell((short)0).setCellValue(1); //設置Excel工做表的值  



三、設置sheet名稱和單元格內容 

Java代碼  收藏代碼

  1. wb.setSheetName(1"第一張工做表",HSSFCell.ENCODING_UTF_16);            

  2. cell.setEncoding((short1);        

  3. cell.setCellValue("單元格內容");    

  4. wb.setSheetName(1"第一張工做表",HSSFCell.ENCODING_UTF_16);          

  5. cell.setEncoding((short1);      

  6. cell.setCellValue("單元格內容");   



四、取得sheet的數目 

Java代碼  收藏代碼

  1. wb.getNumberOfSheets()     

  2. wb.getNumberOfSheets()   



五、  根據index取得sheet對象 

Java代碼  收藏代碼

  1. HSSFSheet sheet = wb.getSheetAt(0);    

  2. HSSFSheet sheet = wb.getSheetAt(0);  



六、取得有效的行數 

Java代碼  收藏代碼

  1. int rowcount = sheet.getLastRowNum();    

  2. int rowcount = sheet.getLastRowNum();  



七、取得一行的有效單元格個數 

Java代碼  收藏代碼

  1. row.getLastCellNum();      

  2. row.getLastCellNum();   

  
八、單元格值類型讀寫 

Java代碼  收藏代碼

  1. cell.setCellType(HSSFCell.CELL_TYPE_STRING); //設置單元格爲STRING類型     

  2. cell.getNumericCellValue();//讀取爲數值類型的單元格內容    

  3. cell.setCellType(HSSFCell.CELL_TYPE_STRING); //設置單元格爲STRING類型  

  4. cell.getNumericCellValue();//讀取爲數值類型的單元格內容  



九、設置列寬、行高 

Java代碼  收藏代碼

  1. sheet.setColumnWidth((short)column,(short)width);        

  2. row.setHeight((short)height);      

  3. sheet.setColumnWidth((short)column,(short)width);      

  4. row.setHeight((short)height);   



十、添加區域,合併單元格 

Java代碼  收藏代碼

  1. Region region = new Region((short)rowFrom,(short)columnFrom,(short)rowTo    

  2. ,(short)columnTo);//合併從第rowFrom行columnFrom列     

  3. sheet.addMergedRegion(region);// 到rowTo行columnTo的區域        

  4. //獲得全部區域         

  5. sheet.getNumMergedRegions()     

  6. Region region = new Region((short)rowFrom,(short)columnFrom,(short)rowTo  

  7. ,(short)columnTo);//合併從第rowFrom行columnFrom列  

  8. sheet.addMergedRegion(region);// 到rowTo行columnTo的區域     

  9. //獲得全部區域      

  10. sheet.getNumMergedRegions()   



十一、保存Excel文件 

Java代碼  收藏代碼

  1. FileOutputStream fileOut = new FileOutputStream(path);     

  2. wb.write(fileOut);     

  3. FileOutputStream fileOut = new FileOutputStream(path);   

  4. wb.write(fileOut);   



十二、根據單元格不一樣屬性返回字符串數值 

Java代碼  收藏代碼

  1. public String getCellStringValue(HSSFCell cell) {        

  2.         String cellValue = "";        

  3.         switch (cell.getCellType()) {        

  4.         case HSSFCell.CELL_TYPE_STRING://字符串類型     

  5.            cellValue = cell.getStringCellValue();        

  6.            if(cellValue.trim().equals("")||cellValue.trim().length()<=0)        

  7.                 cellValue=" ";        

  8.             break;        

  9.         case HSSFCell.CELL_TYPE_NUMERIC: //數值類型     

  10.             cellValue = String.valueOf(cell.getNumericCellValue());        

  11.             break;        

  12.         case HSSFCell.CELL_TYPE_FORMULA: //公式     

  13.             cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);        

  14.             cellValue = String.valueOf(cell.getNumericCellValue());        

  15.             break;        

  16.         case HSSFCell.CELL_TYPE_BLANK:        

  17.             cellValue=" ";        

  18.             break;        

  19.         case HSSFCell.CELL_TYPE_BOOLEAN:        

  20.            break;        

  21.         case HSSFCell.CELL_TYPE_ERROR:        

  22.             break;        

  23.         default:        

  24.             break;        

  25.         }        

  26.         return cellValue;        

  27.     }       

  28. public String getCellStringValue(HSSFCell cell) {      

  29.         String cellValue = "";      

  30.         switch (cell.getCellType()) {      

  31.         case HSSFCell.CELL_TYPE_STRING://字符串類型  

  32.             cellValue = cell.getStringCellValue();      

  33.             if(cellValue.trim().equals("")||cellValue.trim().length()<=0)      

  34.                 cellValue=" ";      

  35.             break;      

  36.         case HSSFCell.CELL_TYPE_NUMERIC: //數值類型  

  37.             cellValue = String.valueOf(cell.getNumericCellValue());      

  38.             break;      

  39.         case HSSFCell.CELL_TYPE_FORMULA: //公式  

  40.             cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);      

  41.             cellValue = String.valueOf(cell.getNumericCellValue());      

  42.             break;      

  43.         case HSSFCell.CELL_TYPE_BLANK:      

  44.             cellValue=" ";      

  45.             break;      

  46.         case HSSFCell.CELL_TYPE_BOOLEAN:      

  47.             break;      

  48.         case HSSFCell.CELL_TYPE_ERROR:      

  49.             break;      

  50.         default:      

  51.             break;      

  52.         }      

  53.         return cellValue;      

  54.     }     




1三、經常使用單元格邊框格式 

Java代碼  收藏代碼

  1. HSSFCellStyle style = wb.createCellStyle();        

  2. style.setBorderBottom(HSSFCellStyle.BORDER_DOTTED);//下邊框          

  3. style.setBorderLeft(HSSFCellStyle.BORDER_DOTTED);//左邊框          

  4. style.setBorderRight(HSSFCellStyle.BORDER_THIN);//右邊框          

  5. style.setBorderTop(HSSFCellStyle.BORDER_THIN);//上邊框      

  6. HSSFCellStyle style = wb.createCellStyle();      

  7. style.setBorderBottom(HSSFCellStyle.BORDER_DOTTED);//下邊框       

  8. style.setBorderLeft(HSSFCellStyle.BORDER_DOTTED);//左邊框       

  9. style.setBorderRight(HSSFCellStyle.BORDER_THIN);//右邊框       

  10. style.setBorderTop(HSSFCellStyle.BORDER_THIN);//上邊框    




1四、設置字體和內容位置 

Java代碼  收藏代碼

  1. HSSFFont f  = wb.createFont();        

  2. f.setFontHeightInPoints((short11);//字號         

  3. f.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);//加粗         

  4. style.setFont(f);        

  5. style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//左右居中         

  6. style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//上下居中         

  7. style.setRotation(short rotation);//單元格內容的旋轉的角度         

  8. HSSFDataFormat df = wb.createDataFormat();        

  9. style1.setDataFormat(df.getFormat("0.00%"));//設置單元格數據格式         

  10. cell.setCellFormula(string);//給單元格設公式         

  11. style.setRotation(short rotation);//單元格內容的旋轉的角度     

  12. HSSFFont f  = wb.createFont();      

  13. f.setFontHeightInPoints((short11);//字號      

  14. f.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);//加粗      

  15. style.setFont(f);      

  16. style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//左右居中      

  17. style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//上下居中      

  18. style.setRotation(short rotation);//單元格內容的旋轉的角度      

  19. HSSFDataFormat df = wb.createDataFormat();      

  20. style1.setDataFormat(df.getFormat("0.00%"));//設置單元格數據格式      

  21. cell.setCellFormula(string);//給單元格設公式      

  22. style.setRotation(short rotation);//單元格內容的旋轉的角度   




1五、插入圖片 

Java代碼  收藏代碼

  1. //先把讀進來的圖片放到一個ByteArrayOutputStream中,以便產生ByteArray         

  2.       ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();        

  3.       BufferedImage bufferImg = ImageIO.read(new File("ok.jpg"));        

  4.       ImageIO.write(bufferImg,"jpg",byteArrayOut);        

  5. //讀進一個excel模版         

  6. FileInputStream fos = new FileInputStream(filePathName+"/stencil.xlt");         

  7. fs = new POIFSFileSystem(fos);        

  8. //建立一個工做薄         

  9. HSSFWorkbook wb = new HSSFWorkbook(fs);        

  10. HSSFSheet sheet = wb.getSheetAt(0);        

  11. HSSFPatriarch patriarch = sheet.createDrawingPatriarch();        

  12. HSSFClientAnchor anchor = new HSSFClientAnchor(0,0,1023,255,(short0,0,(short)10,10);             

  13. patriarch.createPicture(anchor , wb.addPicture(byteArrayOut.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));      

  14. //先把讀進來的圖片放到一個ByteArrayOutputStream中,以便產生ByteArray      

  15.       ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();      

  16.       BufferedImage bufferImg = ImageIO.read(new File("ok.jpg"));      

  17.       ImageIO.write(bufferImg,"jpg",byteArrayOut);      

  18. //讀進一個excel模版      

  19. FileInputStream fos = new FileInputStream(filePathName+"/stencil.xlt");       

  20. fs = new POIFSFileSystem(fos);      

  21. //建立一個工做薄      

  22. HSSFWorkbook wb = new HSSFWorkbook(fs);      

  23. HSSFSheet sheet = wb.getSheetAt(0);      

  24. HSSFPatriarch patriarch = sheet.createDrawingPatriarch();      

  25. HSSFClientAnchor anchor = new HSSFClientAnchor(0,0,1023,255,(short0,0,(short)10,10);           

  26. patriarch.createPicture(anchor , wb.addPicture(byteArrayOut.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));   




1六、調整工做表位置 

Java代碼  收藏代碼

  1. HSSFWorkbook wb = new HSSFWorkbook();       

  2. HSSFSheet sheet = wb.createSheet("format sheet");       

  3. HSSFPrintSetup ps = sheet.getPrintSetup();       

  4. sheet.setAutobreaks(true);       

  5. ps.setFitHeight((short)1);       

  6. ps.setFitWidth((short)1);     

  7. HSSFWorkbook wb = new HSSFWorkbook();     

  8. HSSFSheet sheet = wb.createSheet("format sheet");     

  9. HSSFPrintSetup ps = sheet.getPrintSetup();     

  10. sheet.setAutobreaks(true);     

  11. ps.setFitHeight((short)1);     

  12. ps.setFitWidth((short)1);   


  

1七、設置打印區域 

Java代碼  收藏代碼

  1. HSSFSheet sheet = wb.createSheet("Sheet1");       

  2. wb.setPrintArea(0"$A$1:$C$2");      

  3. HSSFSheet sheet = wb.createSheet("Sheet1");     

  4. wb.setPrintArea(0"$A$1:$C$2");    



1八、標註腳註 

Java代碼  收藏代碼

  1. HSSFSheet sheet = wb.createSheet("format sheet");       

  2. HSSFFooter footer = sheet.getFooter()       

  3. footer.setRight( "Page " + HSSFFooter.page() + " of " + HSSFFooter.numPages() );     

  4. HSSFSheet sheet = wb.createSheet("format sheet");     

  5. HSSFFooter footer = sheet.getFooter()     

  6. footer.setRight( "Page " + HSSFFooter.page() + " of " + HSSFFooter.numPages() );   



1九、在工做單中清空行數據,調整行位置 

Java代碼  收藏代碼

  1. HSSFWorkbook wb = new HSSFWorkbook();       

  2. HSSFSheet sheet = wb.createSheet("row sheet");       

  3. // Create various cells and rows for spreadsheet.        

  4. // Shift rows 6 - 11 on the spreadsheet to the top (rows 0 - 5)        

  5. sheet.shiftRows(510, -5);      

  6. HSSFWorkbook wb = new HSSFWorkbook();     

  7. HSSFSheet sheet = wb.createSheet("row sheet");     

  8. // Create various cells and rows for spreadsheet.     

  9. // Shift rows 6 - 11 on the spreadsheet to the top (rows 0 - 5)     

  10. sheet.shiftRows(510, -5);    



20、選中指定的工做表 

Java代碼  收藏代碼

  1. HSSFSheet sheet = wb.createSheet("row sheet");       

  2. heet.setSelected(true);       

  3. HSSFSheet sheet = wb.createSheet("row sheet");     

  4. heet.setSelected(true);     




2一、工做表的放大縮小 

Java代碼  收藏代碼

  1. HSSFSheet sheet1 = wb.createSheet("new sheet");       

  2. sheet1.setZoom(1,2);   // 50 percent magnification      

  3. HSSFSheet sheet1 = wb.createSheet("new sheet");     

  4. sheet1.setZoom(1,2);   // 50 percent magnification   




2二、頭注和腳註 

Java代碼  收藏代碼

  1. HSSFSheet sheet = wb.createSheet("new sheet");       

  2. HSSFHeader header = sheet.getHeader();       

  3. header.setCenter("Center Header");       

  4. header.setLeft("Left Header");       

  5. header.setRight(HSSFHeader.font("Stencil-Normal""Italic") +       

  6. HSSFHeader.fontSize((short16) + "Right w/ Stencil-Normal Italic font and size 16");    

  7. HSSFSheet sheet = wb.createSheet("new sheet");     

  8. HSSFHeader header = sheet.getHeader();     

  9. header.setCenter("Center Header");     

  10. header.setLeft("Left Header");     

  11. header.setRight(HSSFHeader.font("Stencil-Normal""Italic") +     

  12. HSSFHeader.fontSize((short16) + "Right w/ Stencil-Normal Italic font and size 16");  



2三、自定義顏色 

Java代碼  收藏代碼

  1. HSSFCellStyle style = wb.createCellStyle();       

  2. style.setFillForegroundColor(HSSFColor.LIME.index);       

  3. style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);       

  4. HSSFFont font = wb.createFont();       

  5. font.setColor(HSSFColor.RED.index);       

  6. style.setFont(font);       

  7. cell.setCellStyle(style);       

  8. HSSFCellStyle style = wb.createCellStyle();     

  9. style.setFillForegroundColor(HSSFColor.LIME.index);     

  10. style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);     

  11. HSSFFont font = wb.createFont();     

  12. font.setColor(HSSFColor.RED.index);     

  13. style.setFont(font);     

  14. cell.setCellStyle(style);    




2四、填充和顏色設置 

Java代碼  收藏代碼

  1. HSSFCellStyle style = wb.createCellStyle();       

  2. style.setFillBackgroundColor(HSSFColor.AQUA.index);       

  3. style.setFillPattern(HSSFCellStyle.BIG_SPOTS);       

  4. HSSFCell cell = row.createCell((short1);       

  5. cell.setCellValue("X");       

  6. style = wb.createCellStyle();       

  7. style.setFillForegroundColor(HSSFColor.ORANGE.index);       

  8. style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);       

  9. cell.setCellStyle(style);     

  10. HSSFCellStyle style = wb.createCellStyle();     

  11. style.setFillBackgroundColor(HSSFColor.AQUA.index);     

  12. style.setFillPattern(HSSFCellStyle.BIG_SPOTS);     

  13. HSSFCell cell = row.createCell((short1);     

  14. cell.setCellValue("X");     

  15. style = wb.createCellStyle();     

  16. style.setFillForegroundColor(HSSFColor.ORANGE.index);     

  17. style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);     

  18. cell.setCellStyle(style);   




2五、強行刷新單元格公式 

Java代碼  收藏代碼

  1. HSSFFormulaEvaluator eval=new HSSFFormulaEvaluator((HSSFWorkbook) wb);      

  2. private static void updateFormula(Workbook wb,Sheet s,int row){       

  3.         Row r=s.getRow(row);       

  4.         Cell c=null;       

  5.         FormulaEcaluator eval=null;       

  6.         if(wb instanceof HSSFWorkbook)       

  7.             eval=new HSSFFormulaEvaluator((HSSFWorkbook) wb);       

  8.         else if(wb instanceof XSSFWorkbook)       

  9.             eval=new XSSFFormulaEvaluator((XSSFWorkbook) wb);       

  10.         for(int i=r.getFirstCellNum();i<r.getLastCellNum();i++){       

  11.             c=r.getCell(i);       

  12.             if(c.getCellType()==Cell.CELL_TYPE_FORMULA)       

  13.                 eval.evaluateFormulaCell(c);       

  14.         }       

  15.     }      

  16. HSSFFormulaEvaluator eval=new HSSFFormulaEvaluator((HSSFWorkbook) wb);    

  17. private static void updateFormula(Workbook wb,Sheet s,int row){     

  18.         Row r=s.getRow(row);     

  19.         Cell c=null;     

  20.         FormulaEcaluator eval=null;     

  21.         if(wb instanceof HSSFWorkbook)     

  22.             eval=new HSSFFormulaEvaluator((HSSFWorkbook) wb);     

  23.         else if(wb instanceof XSSFWorkbook)     

  24.             eval=new XSSFFormulaEvaluator((XSSFWorkbook) wb);     

  25.         for(int i=r.getFirstCellNum();i<r.getLastCellNum();i++){     

  26.             c=r.getCell(i);     

  27.             if(c.getCellType()==Cell.CELL_TYPE_FORMULA)     

  28.                 eval.evaluateFormulaCell(c);     

  29.         }     

  30.     }    





說明:FormulaEvaluator提供了evaluateFormulaCell(Cell cell)方法,計算公式保存結果,但不改變公式。而evaluateInCell(Cell cell) 方法是計算公式,並將原公式替換爲計算結果,也就是說該單元格的類型不在是Cell.CELL_TYPE_FORMULA而是Cell.CELL_TYPE_NUMBERIC。HSSFFormulaEvaluator提供了靜態方法evaluateAllFormu 

laCells(HSSFWorkbook wb) ,計算一個Excel文件的全部公式,用起來很方便。 

相關文章
相關標籤/搜索