目前,比較常用的實現Java導入、導出Excel的技術有兩種Jakarta POI和Java Excel直接上代碼:
一,POI
POI是apache的項目,可對微軟的Word,Excel,Ppt進行操作,包括office2003和2007,Excl2003和2007。poi現在一直有更新。所以現在主流使用POI。
xls:
pom:
1
2
3
4
5
6
7
8
9
10
|
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version> 3.9 </version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version> 2.2 </version> </dependency> |
導出:
- public class PoiCreateExcel {
- public static void main(String[] args) {
- // 創建表頭
- String[] title = {"id","name","sex"};
- //創建Excel工作薄
- HSSFWorkbook workbook = new HSSFWorkbook();
- //創建一個工作表sheet
- HSSFSheet sheet = workbook.createSheet();
- //創建第一行
- HSSFRow row = sheet.createRow(0);
- HSSFCell cell = null;
- // 插入第一行
- for (int i = 0; i < title.length; i++) {
- cell = row.createCell(i);
- cell.setCellValue(title[i]);
- }
- // 追加數據
- for (int i = 1; i < 10; i++) {// 這里的int 起始是1 也就是第二行開始
- HSSFRow nexTrow = sheet.createRow(i);
- HSSFCell cell2 = nexTrow.createCell(0);
- cell2.setCellValue("a"+i);
- cell2 = nexTrow.createCell(1);
- cell2.setCellValue("user");
- cell2 = nexTrow.createCell(2);
- cell2.setCellValue("男");
- }
- // 創建一個文件
- File file = new File("d:/poi.xls");
- try {
- file.createNewFile();
- // 將內容存盤
- FileOutputStream stream = FileUtils.openOutputStream(file);
- workbook.write(stream);
- stream.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
導入:
- public class PoiReadExcel {
- public static void main(String[] args) {
- // 引入需要解析的文件
- File file = new File("d:/poi.xls");
- try {
- // 創建Excel 讀取文件內容
- HSSFWorkbook workbook = new HSSFWorkbook(FileUtils.openInputStream(file));
- /**
- * 第一種方式讀取Sheet頁
- */
- // HSSFSheet sheet = workbook.getSheet("Sheet0");
- /**
- * 第二種方式讀取Sheet頁
- */
- HSSFSheet sheet = workbook.getSheetAt(0);
- int firstRowNum = 0;// 起始行第0行
- int lasrRowNum = sheet.getLastRowNum();// 一直讀到最后一行
- for (int i = 0; i < lasrRowNum; i++) {
- HSSFRow row = sheet.getRow(i);
- // 獲取當前最后單元格列號
- int lastCellNum = row.getLastCellNum();
- for (int j = 0; j < lastCellNum; j++) {
- HSSFCell cell = row.getCell(j);
- String value = cell.getStringCellValue();// 注意! 如果Excel 里面的值是String 那么getStringCellValue 如果是其他類型 則需要修改
- System.out.print(value + " ");
- }
- System.out.println();
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
xlsx:
pom:
- <!-- poi高版本額外包 -->
- <dependency>
- <groupId>org.apache.poi</groupId>
- <artifactId>poi-examples</artifactId>
- <version>3.9</version>
- </dependency>
- <dependency>
- <groupId>org.apache.poi</groupId>
- <artifactId>poi-excelant</artifactId>
- <version>3.9</version>
- </dependency>
- <dependency>
- <groupId>org.apache.poi</groupId>
- <artifactId>poi-ooxml</artifactId>
- <version>3.9</version>
- </dependency>
- <dependency>
- <groupId>org.apache.poi</groupId>
- <artifactId>poi-ooxml-schemas</artifactId>
- <version>3.9</version>
- </dependency>
- <dependency>
- <groupId>org.apache.poi</groupId>
- <artifactId>poi-scratchpad</artifactId>
- <version>3.9</version>
- </dependency>
導出:
- public class PoiCreateExcel {
- public static void main(String[] args) {
- // 創建表頭
- String[] title = {"id","name","sex"};
- //創建Excel工作薄
- XSSFWorkbook workbook = new XSSFWorkbook();
- //創建一個工作表shheet
- Sheet sheet = workbook.createSheet();
- //創建第一行
- Row row = sheet.createRow(0);
- Cell cell = null;
- // 插入第一行
- for (int i = 0; i < title.length; i++) {
- cell = row.createCell(i);
- cell.setCellValue(title[i]);
- }
- // 追加數據
- for (int i = 1; i < 10; i++) {// 這里的int 起始是1 也就是第二行開始
- Row nexTrow = sheet.createRow(i);
- Cell cell2 = nexTrow.createCell(0);
- cell2.setCellValue("a"+i);
- cell2 = nexTrow.createCell(1);
- cell2.setCellValue("user");
- cell2 = nexTrow.createCell(2);
- cell2.setCellValue("男");
- }
- // 創建一個文件
- File file = new File("d:/poi.xlsx");// 這里可以修改成高版本的
- try {
- file.createNewFile();
- // 將內容存盤
- FileOutputStream stream = FileUtils.openOutputStream(file);
- workbook.write(stream);
- stream.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
導入:
- public class PoiReadExcel {
- public List<Double> readExcels(InputStream is)throws Exception{
- List<Double> xlsxList = new ArrayList<Double>();
- try {
- if(is ==null){
- throw new IOException("文件不正確!");
- }
- Workbook workbook = WorkbookFactory.create(is);
- FormulaEvaluator fe = workbook.getCreationHelper().createFormulaEvaluator();
- //獲取第一張表
- Sheet sheet = workbook.getSheetAt(0);
- if(sheet == null){
- throw new IOException("傳入的excel的第一張表為空!");
- }
- for(int rowNum = 0;rowNum <= sheet.getLastRowNum(); rowNum++){
- Row row = sheet.getRow(rowNum);
- if(row != null){
- //獲得當前行的開始列
- int firstCellNum = row.getFirstCellNum();
- //獲得當前行的列數
- int lastCellNum = row.getPhysicalNumberOfCells();
- String result = "";
- //循環當前行
- for(int cellNum = firstCellNum; cellNum < lastCellNum;cellNum++){
- Cell cell = row.getCell(cellNum);
- double value = 0;
- String valueString = cell.getStringCellValue();
- if(null!=fe.evaluate(cell)){
- value = fe.evaluate(cell).getNumberValue();
- }
- //result = result + cellNum + ":"+value + "----";
- result = result + cellNum + ":"+valueString + "----";
- }
- System.out.println(result + " ");
- }
- }
- is.close();
- } catch (FileNotFoundException e) {
- throw new Exception("文件不正確!");
- }
- return xlsxList;
- }
- public static void main(String[] args) throws Exception {
- InputStream is = new FileInputStream("d:/poi.xlsx");
- PoiReadExcel re = new PoiReadExcel();
- re.readExcels(is);
- }
- }
二,JXL
JXL只能對Excel進行操作,屬于比較老的框架,它只支持到Excel 95-2000的版本。現在已經停止更新和維護。
pom:
- <!-- jxl -->
- <dependency>
- <groupId>net.sourceforge.jexcelapi</groupId>
- <artifactId>jxl</artifactId>
- <version>2.6.10</version>
- </dependency>
導出:
- public class JxlCreateExcel {
- public static void main(String[] args) {
- // 首先設置表格第一行 表格頭名稱 也就是列名
- String [] title = {"id","name","sex"};
- // 創建Excel文件 存入路徑
- File file = new File("d:/jxl.xls");
- try {
- file.createNewFile();
- // 創建工作薄
- WritableWorkbook workbook = Workbook.createWorkbook(file);
- // 創建sheet
- WritableSheet sheet = workbook.createSheet("sheet1",0);
- // 添加數據
- Label label = null;
- // 第一行設置列名
- for (int i = 0; i < title.length; i++) {
- label = new Label(i,0,title[i]);
- sheet.addCell(label);
- }
- // 追加數據 從第二行開始 i從1開始
- for (int i = 1; i < 9; i++) {
- label = new Label(0,i,"id:"+i);
- sheet.addCell(label);
- label = new Label(1,i,"user");
- sheet.addCell(label);
- label = new Label(2,i,"男");
- sheet.addCell(label);
- }
- // 寫入 并在最后關閉流
- workbook.write();
- workbook.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
導入:
- public class JxlReadExcel {
- public static void main(String[] args) {
- try {
- // 創建 Workbook
- Workbook workbook = Workbook.getWorkbook(new File("d:/jxl.xls"));
- // 獲取工作表sheet
- Sheet sheet = workbook.getSheet(0);
- // 獲取數據
- for (int i = 0; i < sheet.getRows(); i++) {// 獲取行
- for (int j = 0; j < sheet.getColumns(); j++) {// 獲取列
- Cell cell = sheet.getCell(j,i);
- System.out.print(cell.getContents() + " ");// 得到單元格的內容
- }
- System.out.println();
- }
- workbook.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
到此,代碼可直接部署運行,希望可以幫助到你~
總結
到此這篇關于Java實現導入導出Excel文件的方法(poi,jxl)的文章就介紹到這了,更多相關java實現導入導出excel文件內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/qq_45150222/article/details/105012569