3 POI的入門操做
3.1 搭建環境
<dependencies> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>4.0.1</version> </dependency> </dependencies>
3.2 POI結構說明
- HSSF提供讀寫Microsoft Excel XLS格式檔案的功能。
- XSSF提供讀寫Microsoft Excel OOXML XLSX格式檔案的功能。
- HWPF提供讀寫Microsoft Word DOC格式檔案的功能。
- HSLF提供讀寫Microsoft PowerPoint格式檔案的功能。
- HDGF提供讀Microsoft Visio格式檔案的功能。
- HPBF提供讀Microsoft Publisher格式檔案的功能。
- HSMF提供讀Microsoft Outlook格式檔案的功能。
3.3 API介紹
3.4 基本操做
3.4.1 建立Excel
public class PoiTest01 { //測試建立excel文件 public static void main(String[] args) throws Exception { //1.建立workbook工做簿 Workbook wb = new XSSFWorkbook(); //2.建立表單Sheet Sheet sheet = wb.createSheet("test"); //3.文件流 FileOutputStream fos = new FileOutputStream("E:\\test.xlsx"); //4.寫入文件 wb.write(fos); fos.close(); } }
3.4.2 建立單元格
//測試建立單元格 public static void main(String[] args) throws Exception { //1.建立workbook工做簿 Workbook wb = new XSSFWorkbook(); //2.建立表單Sheet Sheet sheet = wb.createSheet("test"); //3.建立行對象,從0開始 Row row = sheet.createRow(3); //4.建立單元格,從0開始 Cell cell = row.createCell(0); //5.單元格寫入數據 cell.setCellValue("傳智播客"); //6.文件流 FileOutputStream fos = new FileOutputStream("E:\\test.xlsx"); //7.寫入文件 wb.write(fos); fos.close(); }
3.4.3 設置格式
//建立單元格樣式對象 CellStyle cellStyle = wb.createCellStyle(); //設置邊框 cellStyle.setBorderBottom(BorderStyle.DASH_DOT);//下邊框 cellStyle.setBorderTop(BorderStyle.HAIR);//上邊框 //設置字體 Font font = wb.createFont();//建立字體對象 font.setFontName("華文行楷");//設置字體 font.setFontHeightInPoints((short)28);//設置字號 cellStyle.setFont(font); //設置寬高 sheet.setColumnWidth(0, 31 * 256);//設置第一列的寬度是31個字符寬度 row.setHeightInPoints(50);//設置行的高度是50個點 //設置居中顯示 cellStyle.setAlignment(HorizontalAlignment.CENTER);//水平居中 cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中 //設置單元格樣式 cell.setCellStyle(cellStyle); //合併單元格 CellRangeAddress region =new CellRangeAddress(0, 3, 0, 2); sheet.addMergedRegion(region);
3.4.4 繪製圖形
//繪製圖形 public static void main(String[] args) throws Exception { //1.建立workbook工做簿 Workbook wb = new XSSFWorkbook(); //2.建立表單Sheet Sheet sheet = wb.createSheet("test"); //讀取圖片流 FileInputStream stream=new FileInputStream("e:\\logo.jpg"); byte[] bytes= IOUtils.toByteArray(stream); //讀取圖片到二進制數組 stream.read(bytes); //向Excel添加一張圖片,並返回該圖片在Excel中的圖片集合中的下標 int pictureIdx = wb.addPicture(bytes,Workbook.PICTURE_TYPE_JPEG); //繪圖工具類 CreationHelper helper = wb.getCreationHelper(); //建立一個繪圖對象 Drawing<?> patriarch = sheet.createDrawingPatriarch(); //建立錨點,設置圖片座標 ClientAnchor anchor = helper.createClientAnchor(); anchor.setCol1(0);//從0開始 anchor.setRow1(0);//從0開始 //建立圖片 Picture picture = patriarch.createPicture(anchor, pictureIdx); picture.resize(); //6.文件流 FileOutputStream fos = new FileOutputStream("E:\\test.xlsx"); //7.寫入文件 wb.write(fos); fos.close(); }
3.4.5 加載Excel
public class PoiTest06 { //單元格樣式 public static void main(String[] args) throws Exception { //1.建立workbook工做簿 Workbook wb = new XSSFWorkbook("E:\\demo.xlsx"); //2.獲取sheet 從0開始 Sheet sheet = wb.getSheetAt(0); int totalRowNum = sheet.getLastRowNum(); Row row = null; Cell cell = null; //循環全部行 for (int rowNum = 3; rowNum <sheet.getLastRowNum(); rowNum++) { row = sheet.getRow(rowNum); StringBuilder sb = new StringBuilder(); //循環每行中的全部單元格 for(int cellNum = 2; cellNum < row.getLastCellNum();cellNum++) { cell = row.getCell(cellNum); sb.append(getValue(cell)).append("-"); } System.out.println(sb.toString()); } } //獲取數據 private static Object getValue(Cell cell) { Object value = null; switch (cell.getCellType()) { case STRING: //字符串類型 value = cell.getStringCellValue(); break; case BOOLEAN: //boolean類型 value = cell.getBooleanCellValue(); break; case NUMERIC: //數字類型(包含日期和普通數字) if(DateUtil.isCellDateFormatted(cell)) { value = cell.getDateCellValue(); }else{ value = cell.getNumericCellValue(); } break; case FORMULA: //公式類型 value = cell.getCellFormula(); break; default: break; } return value; } }
本文同步分享在 博客「cwl_java」(CSDN)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。java