Java POI 相關文檔
簡介
POI是“Point of Information”的縮寫
基本功能
結構:
HSSF - 提供讀寫Microsoft Excel格式檔案的功能。
XSSF - 提供讀寫Microsoft Excel OOXML格式檔案的功能。
HWPF - 提供讀寫Microsoft Word格式檔案的功能。
HSLF - 提供讀寫Microsoft PowerPoint格式檔案的功能。
HDGF - 提供讀寫Microsoft Visio格式檔案的功能。
範文示範
建立Excel 文檔
示例1将示範如何利用Jakarta POI API 建立Excel 文檔。
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;
import java.io.FileOutputStream;
public class CreateXL {
public static String outputFile = "D:\\test.xls";
public static void main(String argv[]) {
try {
// 建立新的Excel 工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
// 在Excel工作簿中建一工作表,其名為預設值
// 如要建立一名為"效益名額"的工作表,其語句為:
// HSSFSheet sheet = workbook.createSheet("效益名額");
HSSFSheet sheet = workbook.createSheet();
// 在索引0的位置建立行(最頂端的行)
HSSFRow row = sheet.createRow((short)0);
//在索引0的位置建立單元格(左上端)
HSSFCell cell = row.createCell((short)0);
// 定義單元格為字元串類型
cell.setCellType(HSSFCell.CELL_TYPE_STRING);//已過時
// 在單元格中輸入一些内容
cell.setCellValue("增加值");
// 建立一輸出檔案流
FileOutputStream fOut = new FileOutputStream(outputFile);
// 把相應的Excel 工作簿存盤
workbook.write(fOut);
fOut.flush();
// 操作結束,關閉檔案
fOut.close();
System.out.println("檔案生成...");
} catch (Exception e) {
System.out.println("已運作 xlCreate() : " + e);
}
}
}
讀取Excel文檔中的資料
示例2将示範如何讀取Excel文檔中的資料。假定在D盤JTest目錄下有一個檔案名為test1.xls的Excel檔案。
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;
import java.io.FileInputStream;
public class ReadXL {
public static String fileToBeRead = "D:\\test1.xls";
public static void main(String argv[]) {
try {
// 建立對Excel工作簿檔案的引用
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(fileToBeRead));
// 建立對工作表的引用。
// 本例是按名引用(讓我們假定那張表有着預設名"Sheet1")
HSSFSheet sheet = workbook.getSheet("Sheet1");
// 也可用getSheetAt(int index)按索引引用,
// 在Excel文檔中,第一張工作表的預設索引是0,
// 其語句為:HSSFSheet sheet = workbook.getSheetAt(0);
// 讀取左上端單元
HSSFRow row = sheet.getRow(0);
HSSFCell cell = row.getCell((short)0);
// 輸出單元内容,cell.getStringCellValue()就是取所在單元的值
System.out.println("左上端單元是: " + cell.getStringCellValue());
} catch (Exception e) {
System.out.println("已運作xlRead() : " + e);
}
}
}
設定單元格格式
在這裡,我們将隻介紹一些和格式設定有關的語句,我們假定workbook就是對一個工作簿的引用。在Java中,第一步要做的就是建立和設定字型和單元格的格式,然後再應用這些格式:
1、建立字型,設定其為紅色、粗體:
HSSFFont font = workbook.createFont();
font.setColor(HSSFFont.COLOR_RED);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
2、建立格式
HSSFCellStyle cellStyle= workbook.createCellStyle();
cellStyle.setFont(font);
3、應用格式
HSSFCell cell = row.createCell((short) 0);
cell.setCellStyle(cellStyle);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellValue("标題 ");
4、處理WORD文檔
import java.io. * ;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;
public class TestPoi {
public TestPoi() {}
public static void main(String args[])throws Exception{
FileInputStream in = new FileInputStream("D:\\a.doc");
WordExtractor extractor = new WordExtractor();
String str = extractor.extractText(in);
//System.out.println("the result length is"+str.length());
System.out.println(str);
}
}
EXCEL常用操作方法
1、得到Excel常用對象
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常用對象
3、設定sheet名稱和單元格内容
wb.setSheetName(1, "第一張工作表",HSSFCell.ENCODING_UTF_16);
cell.setEncoding((short) 1);
cell.setCellValue("單元格内容");
4、取得sheet的數目
wb.getNumberOfSheets();
5、 根據index取得sheet對象
HSSFSheet sheet = wb.getSheetAt(0);
6、取得有效的行數
int rowcount = sheet.getLastRowNum();
7、取得一行的有效單元格個數
row.getLastCellNum();
8、單元格值類型讀寫
//設定單元格為STRING類型
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
//讀取為數值類型的單元格内容
cell.getNumericCellValue();
9、設定列寬、行高
sheet.setColumnWidth((short)column,(short)width);
row.setHeight((short)height);
10、添加區域,合并單元格
//合并從第rowFrom行columnFrom列
Region region = new Region((short)rowFrom,(short)columnFrom,(short)rowTo ,(short)columnTo);
// 到rowTo行columnTo的區域
sheet.addMergedRegion(region);
//得到所有區域
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);
POI:https://blog.csdn.net/qq_36841482/article/details/102883188
easypoi:http://easypoi.mydoc.io/
easyExcel:https://alibaba-easyexcel.github.io/index.html