POI匯入Excel中文API文件
一、 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 plaincopyprint?
- POIFSFileSystem fs=newPOIFSFileSystem(new FileInputStream("d:/test.xls"));
- //得到Excel工作簿物件
- HSSFWorkbook wb = new HSSFWorkbook(fs);
- //得到Excel工作表物件
- HSSFSheet sheet = wb.getSheetAt(0);
- //得到Excel工作表的行
- HSSFRow row = sheet.getRow(i);
- //得到Excel工作表指定行的單元格
- HSSFCell cell = row.getCell((short) j);
- cellStyle = cell.getCellStyle();//得到單元格樣式
2、建立Excel常用物件
[c-sharp] view plaincopyprint?
- HSSFWorkbook wb = new HSSFWorkbook();//建立Excel工作簿物件
- HSSFSheet sheet = wb.createSheet("new sheet");//建立Excel工作表物件
- HSSFRow row = sheet.createRow((short)0); //建立Excel工作表的行
- cellStyle = wb.createCellStyle();//建立單元格樣式
- row.createCell((short)0).setCellStyle(cellStyle); //建立Excel工作表指定行的單元格
- row.createCell((short)0).setCellValue(1); //設定Excel工作表的值
3、設定sheet名稱和單元格內容
[c-sharp] view plaincopyprint?
- wb.setSheetName(1, "第一張工作表",HSSFCell.ENCODING_UTF_16);
- cell.setEncoding((short) 1);
- cell.setCellValue("單元格內容");
4、取得sheet的數目
[c-sharp] view plaincopyprint?
- wb.getNumberOfSheets()
5、 根據index取得sheet物件
[c-sharp] view plaincopyprint?
- HSSFSheet sheet = wb.getSheetAt(0);
6、取得有效的行數
[c-sharp] view plaincopyprint?
- int rowcount = sheet.getLastRowNum();
7、取得一行的有效單元格個數
[c-sharp] view plaincopyprint?
- row.getLastCellNum();
8、單元格值型別讀寫
- cell.setCellType(HSSFCell.CELL_TYPE_STRING); //設定單元格為STRING型別
- cell.getNumericCellValue();//讀取為數值型別的單元格內容
9、設定列寬、行高
- sheet.setColumnWidth((short)column,(short)width);
- row.setHeight((short)height);
10、新增區域,合併單元格
- Region region = new Region((short)rowFrom,(short)columnFrom,(short)rowTo
- ,(short)columnTo);//合併從第rowFrom行columnFrom列
- sheet.addMergedRegion(region);// 到rowTo行columnTo的區域
- //得到所有區域
- sheet.getNumMergedRegions()
11、儲存Excel檔案
- FileOutputStream fileOut = new FileOutputStream(path);
- wb.write(fileOut);
12、根據單元格不同屬性返回字串數值
- public String getCellStringValue(HSSFCell cell) {
- String cellValue = "";
- switch (cell.getCellType()) {
- case HSSFCell.CELL_TYPE_STRING://字串型別
- cellValue = cell.getStringCellValue();
- if(cellValue.trim().equals("")||cellValue.trim().length()<=0)
- cellValue=" ";
- break;
- case HSSFCell.CELL_TYPE_NUMERIC: //數值型別
- cellValue = String.valueOf(cell.getNumericCellValue());
- break;
- case HSSFCell.CELL_TYPE_FORMULA: //公式
- cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
- cellValue = String.valueOf(cell.getNumericCellValue());
- break;
- case HSSFCell.CELL_TYPE_BLANK:
- cellValue=" ";
- break;
- case HSSFCell.CELL_TYPE_BOOLEAN:
- break;
- case HSSFCell.CELL_TYPE_ERROR:
- break;
- default:
- break;
- }
- return cellValue;
- }
13、常用單元格邊框格式
- HSSFCellStyle style = wb.createCellStyle();
- style.setBorderBottom(HSSFCellStyle.BORDER_DOTTED);//下邊框
- style.setBorderLeft(HSSFCellStyle.BORDER_DOTTED);//左邊框
- style.setBorderRight(HSSFCellStyle.BORDER_THIN);//右邊框
- style.setBorderTop(HSSFCellStyle.BORDER_THIN);//上邊框
14、設定字型和內容位置
- HSSFFont f = wb.createFont();
- f.setFontHeightInPoints((short) 11);//字號
- f.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);//加粗
- style.setFont(f);
- style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//左右居中
- style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//上下居中
- style.setRotation(short rotation);//單元格內容的旋轉的角度
- HSSFDataFormat df = wb.createDataFormat();
- style1.setDataFormat(df.getFormat("0.00%"));//設定單元格資料格式
- cell.setCellFormula(string);//給單元格設公式
- style.setRotation(short rotation);//單元格內容的旋轉的角度
15、插入圖片
- //先把讀進來的圖片放到一個ByteArrayOutputStream中,以便產生ByteArray
- ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
- BufferedImage bufferImg = ImageIO.read(new File("ok.jpg"));
- ImageIO.write(bufferImg,"jpg",byteArrayOut);
- //讀進一個excel模版
- FileInputStream fos = new FileInputStream(filePathName+"/stencil.xlt");
- fs = new POIFSFileSystem(fos);
- //建立一個工作薄
- HSSFWorkbook wb = new HSSFWorkbook(fs);
- HSSFSheet sheet = wb.getSheetAt(0);
- HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
- HSSFClientAnchor anchor = new HSSFClientAnchor(0,0,1023,255,(short) 0,0,(short)10,10);
- patriarch.createPicture(anchor , wb.addPicture(byteArrayOut.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));
16、調整工作表位置
- HSSFWorkbook wb = new HSSFWorkbook();
- HSSFSheet sheet = wb.createSheet("format sheet");
- HSSFPrintSetup ps = sheet.getPrintSetup();
- sheet.setAutobreaks(true);
- ps.setFitHeight((short)1);
- ps.setFitWidth((short)1);
17、設定列印區域
- HSSFSheet sheet = wb.createSheet("Sheet1");
- wb.setPrintArea(0, "$A$1:$C$2");
18、標註腳註
- HSSFSheet sheet = wb.createSheet("format sheet");
- HSSFFooter footer = sheet.getFooter()
- footer.setRight( "Page " + HSSFFooter.page() + " of " + HSSFFooter.numPages() );
19、在工作單中清空行資料,調整行位置
- HSSFWorkbook wb = new HSSFWorkbook();
- HSSFSheet sheet = wb.createSheet("row sheet");
- // Create various cells and rows for spreadsheet.
- // Shift rows 6 - 11 on the spreadsheet to the top (rows 0 - 5)
- sheet.shiftRows(5, 10, -5);
20、選中指定的工作表
- HSSFSheet sheet = wb.createSheet("row sheet");
- heet.setSelected(true);
21、工作表的放大縮小
- HSSFSheet sheet1 = wb.createSheet("new sheet");
- sheet1.setZoom(1,2); // 50 percent magnification
22、頭注和腳註
- HSSFSheet sheet = wb.createSheet("new sheet");
- HSSFHeader header = sheet.getHeader();
- header.setCenter("Center Header");
- header.setLeft("Left Header");
- header.setRight(HSSFHeader.font("Stencil-Normal", "Italic") +
- HSSFHeader.fontSize((short) 16) + "Right w/ Stencil-Normal Italic font and size 16");
23、自定義顏色
- HSSFCellStyle style = wb.createCellStyle();
- style.setFillForegroundColor(HSSFColor.LIME.index);
- style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
- HSSFFont font = wb.createFont();
- font.setColor(HSSFColor.RED.index);
- style.setFont(font);
- cell.setCellStyle(style);
24、填充和顏色設定
- HSSFCellStyle style = wb.createCellStyle();
- style.setFillBackgroundColor(HSSFColor.AQUA.index);
- style.setFillPattern(HSSFCellStyle.BIG_SPOTS);
- HSSFCell cell = row.createCell((short) 1);
- cell.setCellValue("X");
- style = wb.createCellStyle();
- style.setFillForegroundColor(HSSFColor.ORANGE.index);
- style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
- cell.setCellStyle(style);
25、強行重新整理單元格公式
- HSSFFormulaEvaluator eval=new HSSFFormulaEvaluator((HSSFWorkbook) wb);
- private static void updateFormula(Workbook wb,Sheet s,int row){
- Row r=s.getRow(row);
- Cell c=null;
- FormulaEcaluator eval=null;
- if(wb instanceof HSSFWorkbook)
- eval=new HSSFFormulaEvaluator((HSSFWorkbook) wb);
- else if(wb instanceof XSSFWorkbook)
- eval=new XSSFFormulaEvaluator((XSSFWorkbook) wb);
- for(int i=r.getFirstCellNum();i
- c=r.getCell(i);
- if(c.getCellType()==Cell.CELL_TYPE_FORMULA)
- eval.evaluateFormulaCell(c);
- }
- }
說明:FormulaEvaluator提供了evaluateFormulaCell(Cell cell)方法,計算公式儲存結果,但不改變公式。而evaluateInCell(Cell cell) 方法是計算公式,並將原公式替換為計算結果,也就是說該單元格的型別不在是Cell.CELL_TYPE_FORMULA而是Cell.CELL_TYPE_NUMBERIC。HSSFFormulaEvaluator提供了靜態方法evaluateAllFormu
laCells(HSSFWorkbook wb) ,計算一個Excel檔案的所有公式,用起來很方便。
-------------------------------------------poi 方法總結-------------------------------------------------------------------
-.設定不顯示excel網格線
sheet.setDisplayGridlines(false);其中sheet是Sheet物件
2.設定excel單元格中的內容換行
cellStyle.setWrapText(true);其中cellStyle是WorkBook建立的CellStyle物件,然後將cellStyle設定到要換行的Cell物件,最後在要換行的物件(一般為字串)加入"/r/n"。如
topTile.append("/r/n" +"cellContent");
3.單元格的合併
sheet.addMergedRegion(new CellRangeAddress(0, 4, 0, 2));本示例為合併4行2列
4.設定頁首和頁尾的頁數
HSSFHeader header = sheet.getHeader();
header.setCenter("Center Header");
header.setLeft("Left Header");
header.setRight(HSSFHeader.font("Stencil-Normal", "Italic") +
HSSFHeader.fontSize((short) 16) + "Right w/ Stencil-Normal Italic font and size 16");
HSSFFooter footer = (HSSFFooter )sheet.getFooter()
footer.setRight( "Page " + HSSFFooter.page() + " of " + HSSFFooter.numPages() );
5.使得一個Sheet適合一頁
sheet.setAutobreaks(true);
6.設定放大屬性(Zoom被明確為一個分數,例如下面的75%使用3作為分子,4作為分母)
sheet.setZoom(3,4);
7.設定列印
HSSFPrintSetup print = (HSSFPrintSetup) sheet.getPrintSetup();
print.setLandscape(true);//設定橫向列印
print.setScale((short) 70);//設定列印縮放70%
print.setPaperSize(HSSFPrintSetup.A4_PAPERSIZE);//設定為A4紙張
print.setLeftToRight(true);//設定列印順序先行後列,預設為先列行
print.setFitHeight((short) 10);設定縮放調整為10頁高
print.setFitWidth((short) 10);設定縮放調整為寬高
sheet.setAutobreaks(false);
if (i != 0 && i % 30 == 0)
sheet.setRowBreak(i);//設定每30行分頁列印
8.反覆的行和列(設定列印標題)
HSSFWorkbook wb = new HSSFWorkbook();
wb.setRepeatingRowsAndColumns(0, 0, 12, 1, 6);//設定1到12列,行1到6每一頁重複列印
9.調整單元格寬度
sheet.setAutobreaks(true);
sheet.setColumnWidth((short)i,colsWidth[i]); //設定單元格長度
sheet.autoSizeColumn((short) i);//自動根據長度調整單元格長度
相關文章
- Java POI匯入Excel檔案JavaExcel
- Java之POI操作Excel表-匯入匯出JavaExcel
- POI 匯出ExcelExcel
- poi的excel匯出Excel
- Springboot操作Poi進行Excel匯入Spring BootExcel
- 不想用POI?幾行程式碼完成Excel匯出匯入行程Excel
- 使用工具類 使用poi匯入匯出excel報表Excel
- 一文搞定POI,再也不怕excel匯入匯出了Excel
- Apache POI處理Excel文件ApacheExcel
- java poi 匯出excel加密JavaExcel加密
- Java之POI操作,封裝ExcelUtil實現Excel匯入匯出Java封裝Excel
- POI操作Excel文件-中級篇Excel
- POI操作Excel文件-基礎篇Excel
- poi 匯出Excel java程式碼ExcelJava
- poi--excel --匯出例項Excel
- springboot poi匯出excel表格Spring BootExcel
- POI匯出excel檔案加水印Excel
- SpringBoot實現Excel匯入匯出,好用到爆,POI可以扔掉了!Spring BootExcel
- POI的使用及匯出excel報表Excel
- 騰訊文件怎樣匯出excel表格 騰訊文件如何匯出excelExcel
- Poi 匯入格式轉換
- 解決Java POI 匯出Excel時檔名中文亂碼,相容瀏覽器JavaExcel瀏覽器
- 將Excel檔案匯入資料庫(POI+Excel+MySQL+jsp頁面匯入)第一次優化Excel資料庫MySqlJS優化
- 【原創】POI匯入匯出工具類
- 匯出Excel或word文件Excel
- Excel匯入匯出-(poi)簡單封裝兩個類,拿來就可以用Excel封裝
- vue excel匯入匯出VueExcel
- excel匯入工具Excel
- Angular Excel 匯入與匯出AngularExcel
- Excel匯入匯出神器(Java)ExcelJava
- POI 操作Excel 整理Excel
- Apache POI 操作ExcelApacheExcel
- Apache POI 建立 ExcelApacheExcel
- poi匯出的excel的數字小數位過多?Excel
- Maatwebsite\Excel匯入用法WebExcel
- C#匯入EXCELC#Excel
- 匯入excel檔案Excel
- maatwebsite/excel": "^3.1 匯入excel 問題WebExcel