POI操作Excel常用方法說明

來源於:http://blog.sina.com.cn/s/blog_53fb319801013z3h.html

一、 POI簡介

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

二、 HSSF概況

            HSSF 是Horrible SpreadSheet Format的縮寫,通過HSSF,你可以用純Java代碼來讀取、寫入、修改Excel文件。HSSF 爲讀取操作提供了兩類API:usermodel和eventusermodel,即“用戶模型”和“事件-用戶模型”。

三、 POI EXCEL文檔結構類

            HSSFWorkbook excel文檔對象

            HSSFSheet excel的sheet HSSFRow excel的行

            HSSFCell excel的單元格 HSSFFont excel字體

            HSSFName 名稱 HSSFDataFormat 日期格式

            HSSFHeader sheet頭

            HSSFFooter sheet尾

            HSSFCellStyle cell樣式

            HSSFDateUtil 日期

            HSSFPrintSetup 打印

            HSSFErrorConstants 錯誤信息表

四、 EXCEL常用操作方法

  1、 得到Excel常用對象           

[c-sharp] view plaincopy

  1. POIFSFileSystem fs=newPOIFSFileSystem(new FileInputStream("d:/test.xls"));   
  2. //得到Excel工作簿對象   
  3. HSSFWorkbook wb = new HSSFWorkbook(fs);  
  4. //得到Excel工作表對象   
  5. HSSFSheet sheet = wb.getSheetAt(0);   
  6. //得到Excel工作表的行   
  7. HSSFRow row = sheet.getRow(i);  
  8. //得到Excel工作表指定行的單元格   
  9. HSSFCell cell = row.getCell((short) j);  
  10. cellStyle = cell.getCellStyle();//得到單元格樣式  

 2、建立Excel常用對象

[c-sharp] view plaincopy

  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工作表的值  
3、設置sheet名稱和單元格內容
[c-sharp] view plaincopy
  1. wb.setSheetName(1, "第一張工作表",HSSFCell.ENCODING_UTF_16);          
  2. cell.setEncoding((short) 1);      
  3. cell.setCellValue("單元格內容");  
4、取得sheet的數目 
[c-sharp] view plaincopy
  1. wb.getNumberOfSheets()   
5、  index取得sheet對象
[c-sharp] view plaincopy
  1. HSSFSheet sheet = wb.getSheetAt(0);  
6、取得有效的行數
[c-sharp] view plaincopy
  1. int rowcount = sheet.getLastRowNum();  
7、取得一行的有效單元格個數
[c-sharp] view plaincopy
  1. row.getLastCellNum();    

8、單元格值類型讀寫

[c-sharp] view plaincopy
  1. cell.setCellType(HSSFCell.CELL_TYPE_STRING); //設置單元格爲STRING類型  
  2. cell.getNumericCellValue();//讀取爲數值類型的單元格內容  

 

9、設置列寬、行高

[c-sharp] view plaincopy
  1. sheet.setColumnWidth((short)column,(short)width);      
  2. row.setHeight((short)height);    

 

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

[c-sharp] view plaincopy
  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()   

 

11、保存Excel文件

[c-sharp] view plaincopy
  1. FileOutputStream fileOut = new FileOutputStream(path);   
  2. wb.write(fileOut);   

 

12、根據單元格不同屬性返回字符串數值

[c-sharp] view plaincopy
  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.     }     

 

13、常用單元格邊框格式

[c-sharp] view plaincopy
  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);//上邊框    

 

14、設置字體和內容位置

[c-sharp] view plaincopy
  1. HSSFFont f  = wb.createFont();      
  2. f.setFontHeightInPoints((short) 11);//字號      
  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);//單元格內容的旋轉的角度   

 

15、插入圖片

[c-sharp] view plaincopy
  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,(short) 0,0,(short)10,10);           
  13. patriarch.createPicture(anchor , wb.addPicture(byteArrayOut.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));    

 

16、調整工作表位置

[c-sharp] view plaincopy
  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);   
  

 

17、設置打印區域

[c-sharp] view plaincopy
  1. HSSFSheet sheet = wb.createSheet("Sheet1");     
  2. wb.setPrintArea(0, "$A$1:$C$2");    

 

18、標註腳註

[c-sharp] view plaincopy
  1. HSSFSheet sheet = wb.createSheet("format sheet");     
  2. HSSFFooter footer = sheet.getFooter()     
  3. footer.setRight( "Page " + HSSFFooter.page() + " of " + HSSFFooter.numPages() );   

 

19、在工作單中清空行數據,調整行位置

[c-sharp] view plaincopy
  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(5, 10, -5);    

 

20、選中指定的工作表

[c-sharp] view plaincopy
  1. HSSFSheet sheet = wb.createSheet("row sheet");     
  2. heet.setSelected(true);     

 

21、工作表的放大縮小

 

[c-sharp] view plaincopy
  1. HSSFSheet sheet1 = wb.createSheet("new sheet");     
  2. sheet1.setZoom(1,2);   // 50 percent magnification    

 

22、頭注和腳註

[c-sharp] view plaincopy
  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((short) 16) + "Right w/ Stencil-Normal Italic font and size 16");  

 

23、自定義顏色

[c-sharp] view plaincopy
  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);     

24、填充和顏色設置


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章