Apache POI是Apache軟件基金會的開放源碼函式庫,POI提供API給Java程序對Microsoft Office格式檔案讀和寫的功能。 字體
HSSF是Horrible SpreadSheet Format的縮寫,經過HSSF,你能夠用純Java代碼來讀取、寫入、修改Excel文件。HSSF爲讀取操做提供了兩類API:usermodel和eventusermodel,即「用戶模型」和「事件-用戶模型」。 lua
HSSFWorkbook excel文檔對象 spa
HSSFSheet excel的sheet HSSFRow excel的行 excel
HSSFCell excel的單元格 HSSFFont excel字體 orm
HSSFName 名稱 對象
HSSFDataFormat 日期格式 事件
HSSFHeader sheet頭 圖片
HSSFFooter sheet尾 ci
HSSFCellStyle cell樣式 文檔
HSSFDateUtil 日期
HSSFPrintSetup 打印
HSSFErrorConstants 錯誤信息表
POIFSFileSystem fs = new POIFSFileSystem(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();
// 設置單元格爲STRING類型
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
// 讀取爲數值類型的單元格內容
cell.getNumericCellValue();
九、設置列寬、行高
sheet.setColumnWidth((short)column,(short)width);
row.setHeight((short)height);
十、添加區域,合併單元格
// 合併從第rowFrom行columnFrom列到rowTo行columnTo的區域
Region region = new Region((short)rowFrom,(short)columnFrom,(short)rowTo,(short)columnTo);
sheet.addMergedRegion(region);
// 獲得全部區域
sheet.getNumMergedRegions();
十一、保存Excel文件
FileOutputStream fileOut = new FileOutputStream(path);
wb.write(fileOut);
十二、根據單元格不一樣屬性返回字符串數值
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;
}
1三、經常使用單元格邊框格式
HSSFCellStyle style = wb.createCellStyle();
style.setBorderBottom(HSSFCellStyle.BORDER_DOTTED); // 下邊框
style.setBorderLeft(HSSFCellStyle.BORDER_DOTTED); // 左邊框
style.setBorderRight(HSSFCellStyle.BORDER_THIN); // 右邊框
style.setBorderTop(HSSFCellStyle.BORDER_THIN); // 上邊框
1四、設置字體和內容位置
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); // 單元格內容的旋轉的角度
1五、插入圖片
// 先把讀進來的圖片放到一個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));
1六、調整工做表位置
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);
1七、設置打印區域
HSSFSheet sheet = wb.createSheet("Sheet1");
wb.setPrintArea(0, "$A$1:$C$2");
HSSFSheet sheet = wb.createSheet("format sheet");
HSSFFooter footer = sheet.getFooter()
footer.setRight( "Page " + HSSFFooter.page() + " of " + HSSFFooter.numPages() );
1九、在工做單中清空行數據,調整行位置
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);
2一、工做表的放大縮小
HSSFSheet sheet1 = wb.createSheet("new sheet");
sheet1.setZoom(1,2); // 50 percent magnification
2二、頭注和腳註
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");
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);
2四、填充和顏色設置
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);
2五、強行刷新單元格公式
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<r.getLastCellNum();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提供了靜態方法evaluateAllFormulaCells(HSSFWorkbook wb) ,計算一個Excel文件的全部公式,用起來很方便。