基于Java編寫簡單的Excel工具類
Excel工具類
MyExcelUtil.java
package com.asia.common; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.*; import java.util.ArrayList; import java.util.List; public class MyExcelUtil { // 簡單測(cè)試 public static void main(String[] args) { List<List<String>> lists = readExcel("D:\\hao\\工作簿1.xlsx", 0); List<List<String>> dataList = new ArrayList<>(); for (int i = 0; i < lists.size(); i++) { dataList.add(lists.get(i)); System.out.println(lists.get(i)); } } public static List<List<String>> readExcel(String path, int sheetIndex) { List<List<String>> excelDataList = new ArrayList<List<String>>(); try { InputStream inputStream = new FileInputStream(path); File file; // 通過文件流工廠方式來處理,用來防止NotOLE2FileException Workbook workbook = WorkbookFactory.create(inputStream); if (inputStream == null || workbook == null) { return excelDataList; } // 讀取Sheet Sheet sheet = workbook.getSheetAt(sheetIndex); if (sheet == null) { return excelDataList; } // 循環(huán)處理每一行,會(huì)讀取到第一行 int rows = sheet.getPhysicalNumberOfRows(); int minCells = 0; int maxCells = 0; // 獲取最小列數(shù)和最大列數(shù),以第一行為準(zhǔn) if (rows >= 1) { minCells = sheet.getRow(0).getFirstCellNum(); maxCells = sheet.getRow(0).getLastCellNum(); } for (int i = 0; i < rows; i++) { // 得到當(dāng)前行 Row row = sheet.getRow(i); if(null==row) { break; } List<String> rowList = new ArrayList<String>(); for (int j = minCells; j < maxCells; j++) { // 每一個(gè)單元格 Cell cell = row.getCell(j); if (cell == null) { rowList.add(""); } else { rowList.add(cell.toString()); } } excelDataList.add(rowList); } inputStream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return excelDataList; } public static boolean writeExcel(List<String> title, List<List<String>> data, String sheetName, String filePath){ if (filePath == null || !filePath.contains(".")) { return false; } String suffix = filePath.substring(filePath.lastIndexOf(".") + 1); Workbook workbook = null; switch (suffix) { case "xls": workbook = new HSSFWorkbook(); break; case "xlsx": workbook = new XSSFWorkbook(); break; default: return false; } // 在workbook中創(chuàng)建一個(gè)sheet對(duì)應(yīng)excel中的sheet Sheet sheet = workbook.createSheet(sheetName); // 在sheet表中添加表頭第0行,老版本的poi對(duì)sheet的行列有限制 Row row = sheet.createRow(0); // 創(chuàng)建單元格,設(shè)置表頭 int titleSize = title.size(); for (int i = 0; i < titleSize; i++) { Cell cell = row.createCell(i); cell.setCellValue(title.get(i)); } // 寫入數(shù)據(jù) int dataSize = data.size(); for (int i = 0; i < dataSize; i++) { Row row1 = sheet.createRow(i + 1); List<String> rowData = data.get(i); // 創(chuàng)建單元格設(shè)值 for (int i1 = 0; i1 < rowData.size(); i1++) { row1.createCell(i1).setCellValue(rowData.get(i1)); } } File file = new File(filePath); if (file.exists()) { file.delete(); } try { file.createNewFile(); workbook.write(new FileOutputStream(file)); workbook.close(); return true; } catch (IOException e) { e.printStackTrace(); } return false; } }
pom.xml
<dependencies> <!--poi相關(guān)依賴--> <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> <!--poi相關(guān)依賴end--> </dependencies>
到此這篇關(guān)于基于Java編寫簡單的Excel工具類的文章就介紹到這了,更多相關(guān)Java Excel工具類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
線程池運(yùn)用不當(dāng)引發(fā)的一次線上事故解決記錄分析
遇到了一個(gè)比較典型的線上問題,剛好和線程池有關(guān),另外涉及到死鎖、jstack命令的使用、JDK不同線程池的適合場(chǎng)景等知識(shí)點(diǎn),同時(shí)整個(gè)調(diào)查思路可以借鑒,特此記錄和分享一下2024-01-01Spring中FactoryBean的高級(jí)用法實(shí)戰(zhàn)教程
FactoryBean是Spring框架的高級(jí)特性,允許自定義對(duì)象的創(chuàng)建過程,適用于復(fù)雜初始化邏輯,本文給大家介紹Spring中FactoryBean的高級(jí)用法實(shí)戰(zhàn),感興趣的朋友跟隨小編一起看看吧2024-09-09通過Maven進(jìn)行jedis連接redis的實(shí)現(xiàn)
這篇文章主要介紹了通過Maven進(jìn)行jedis連接redis的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-07-07Java+MyBatis+MySQL開發(fā)環(huán)境搭建流程詳解
Java的MyBatis框架提供了強(qiáng)大的數(shù)據(jù)庫操作支持,這里我們先在本地的開發(fā)環(huán)境中上手,來看一下Java+MyBatis+MySQL開發(fā)環(huán)境搭建流程詳2016-06-06Java實(shí)現(xiàn)PDF轉(zhuǎn)為線性PDF詳解
線性化PDF文件是PDF文件的一種特殊格式,可以通過Internet更快地進(jìn)行查看。本文將通過后端Java程序?qū)崿F(xiàn)將PDF文件轉(zhuǎn)為線性化PDF。感興趣的可以了解一下2021-12-12Intellij IDEA下Spring Boot熱切換配置
這篇文章主要介紹了Intellij IDEA下Spring Boot熱切換配置,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08SpringBoot整合Ureport2報(bào)表及常見使用方法
這篇文章主要介紹了SpringBoot整合Ureport2報(bào)表及常見使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01