日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java操作excel

發布時間:2023/12/8 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java操作excel 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
使用Java操作excel可以使用兩種方式: 關于表格導入導出,市面上比較知名的開源就是 Apache 的POI 和 阿里巴巴的 EasyExcel了。EasyExcel 也是對 POI 的改進和封裝, 更加好用。 1:POI是Apache 的開源項目,由Java編寫的跨平臺 Java API,可操作Microsoft Office。借助POI,可以方便的生成數據報表,數據批量上傳,數據備份等工作。但是將文件數據一次性全部加載到內存可能導致OOM。 2:EasyExcel 能大大減少內存占用的主要原因是在解析 Excel 時沒有將文件數據一次性全部加載到內存中,而是從磁盤上一行行讀取數據,逐個解析。


加入依賴:

<!-- xls 03版本的&lt;!&ndash; https://mvnrepository.com/artifact/org.apache.poi/poi &ndash;&gt;<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.9</version></dependency>&lt;!&ndash; xls 07版本的 &ndash;&gt;<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.9</version></dependency>--><!--日期格式化的工具--><!-- https://mvnrepository.com/artifact/joda-time/joda-time --><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.10.1</version></dependency>

poi簡單操作excel

package com.dongmu;import com.sun.corba.se.spi.orbutil.threadpool.Work; 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.xssf.usermodel.XSSFWorkbook; import org.joda.time.DateTime;import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream;public class TestExcelWrite {public static void main(String[] args) throws Exception { // Workbook workbook = new HSSFWorkbook();//xls // Workbook workbook = new XSSFWorkbook();//xlsx// write(workbook,"D:\\word文檔\\電子版練習冊\\JAVA\\15:easyExcelAndPOI\\Excel\\07版本.xlsx");read();}public static void write(Workbook workbook,String path) throws Exception {/*創建一共表*/Sheet sheet = workbook.createSheet("冬木學習技術棧掌握表");/*創建一行*/Row row1 = sheet.createRow(0);/*創建一個單元格*/Cell cell = row1.createCell(0);/*設置單元格的內容*/cell.setCellValue("學習的內容");cell = row1.createCell(1);cell.setCellValue("java操作ecxel");Row row2 = sheet.createRow(1);cell = row2.createCell(0);cell.setCellValue("學習的時間");cell = row2.createCell(1);cell.setCellValue(new DateTime().toString("yyyy-MM-dd HH:mm:ss"));FileOutputStream fileOutputStream = new FileOutputStream(path);workbook.write(fileOutputStream);fileOutputStream.flush();fileOutputStream.close();}public static void read() throws Exception{ // FileInputStream stream = new FileInputStream("D:\\word文檔\\電子版練習冊\\JAVA\\15:easyExcelAndPOI\\Excel\\07版本.xlsx");FileInputStream stream = new FileInputStream("D:\\word文檔\\電子版練習冊\\JAVA\\15:easyExcelAndPOI\\Excel\\03版本.xls");// Workbook workbook = new XSSFWorkbook(stream);Workbook workbook = new HSSFWorkbook(stream);Sheet sheet = workbook.getSheetAt(0);Row row = sheet.getRow(0);Cell cell = row.getCell(0);String stringCellValue = cell.getStringCellValue();System.out.println(stringCellValue);} }

批量地讀取excel表中的數據:

package com.dongmu;import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.helpers.XSSFFormulaUtils;import java.io.FileInputStream;public class TestExcelRead {public static void main(String[] args) throws Exception {FileInputStream inputStream = new FileInputStream("D:\\word文檔\\武漢理工大學\\過去文件夾\\通信1904班云動會參賽情況.xlsx");Workbook workbook = new XSSFWorkbook(inputStream);Sheet sheet = workbook.getSheetAt(0);Row row = sheet.getRow(2);int physicalNumberOfCells = row.getPhysicalNumberOfCells();for (int i = 0; i < physicalNumberOfCells; i++) {Cell cell = row.getCell(i);String stringCellValue = cell.getStringCellValue();System.out.print(stringCellValue+"| ");}System.out.println("一共"+physicalNumberOfCells+"列。");int physicalNumberOfRows = sheet.getPhysicalNumberOfRows();for (int i = 4; i < physicalNumberOfRows; i++) {Row row1 = sheet.getRow(i);int physicalNumberOfCells1 = row1.getPhysicalNumberOfCells();for (int i1 = 0; i1 < physicalNumberOfCells1; i1++) {Cell cell = row1.getCell(i1);if (cell!=null){int cellType = cell.getCellType();switch (cellType){ // case XSSFCell.case XSSFCell.CELL_TYPE_STRING:System.out.print(cell.getStringCellValue()+"| ");break;case XSSFCell.CELL_TYPE_BLANK:System.out.print("空值| ");break;case XSSFCell.CELL_TYPE_BOOLEAN:System.out.print(cell.getBooleanCellValue()+"| ");break;case XSSFCell.CELL_TYPE_FORMULA:FormulaEvaluator formulaEvaluator = new XSSFFormulaEvaluator((XSSFWorkbook) workbook);//獲得計算公式String cellFormula = cell.getCellFormula();CellValue evaluate = formulaEvaluator.evaluate(cell);String s = evaluate.formatAsString();System.out.print(s+"| ");break;case XSSFCell.CELL_TYPE_NUMERIC:if (HSSFDateUtil.isCellDateFormatted(cell)){System.out.print(cell.getDateCellValue()+"| ");}else {cell.setCellType(XSSFCell.CELL_TYPE_STRING);System.out.print(cell.getStringCellValue()+"| ");}break;case XSSFCell.CELL_TYPE_ERROR:System.out.print("數據類型錯誤| ");break;}} // System.out.println();}System.out.println();}} }

使用EasyExcel操作excel
加入依賴

<dependencies><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.5</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.22</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version></dependency>

1:寫數據

創建一個實體類對應excel表中的字段數據 package com.dongmu.easyExcel;import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelProperty; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter;import java.util.Date;@Getter @Setter @EqualsAndHashCode public class DemoData {@ExcelProperty("字符串標題")private String string;@ExcelProperty("日期標題")private Date date;@ExcelProperty("數字標題")private Double doubleData; // * 忽略這個字段@ExcelIgnoreprivate String ignore; } 將這個實體類保存的數據封裝在一個list集合中 private static List<DemoData> data() {List<DemoData> list = ListUtils.newArrayList();for (int i = 0; i < 10; i++) {DemoData data = new DemoData();data.setString("字符串" + i);data.setDate(new Date());data.setDoubleData(0.56);list.add(data);}return list;} 編寫程序寫出數據到excel @Testpublic void simpleWrite() {// 注意 simpleWrite在數據量不大的情況下可以使用(5000以內,具體也要看實際情況),數據量大參照 重復多次寫入// 寫法1 JDK8+// since: 3.0.0-beta1String fileName = "D:\\word文檔\\電子版練習冊\\JAVA\\15:easyExcelAndPOI\\Excel\\easyTest.xlsx";// 這里 需要指定寫用哪個class去寫,然后寫到第一個sheet,名字為模板 然后文件流會自動關閉// 如果這里想使用03 則 傳入excelType參數即可EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(() -> {// 分頁查詢數據return TestEasyExcel.data();});}

2:讀數據

直接進行讀取 @Testpublic void simpleRead() {// 寫法1:JDK8+ ,不用額外寫一個DemoDataListener// since: 3.0.0-beta1String fileName = "D:\\word文檔\\電子版練習冊\\JAVA\\15:easyExcelAndPOI\\Excel\\easyTest.xlsx";// 這里 需要指定讀用哪個class去讀,然后讀取第一個sheet 文件流會自動關閉// 這里每次會讀取3000條數據 然后返回過來 直接調用使用數據就行EasyExcel.read(fileName, DemoData.class, new PageReadListener<DemoData>(dataList -> {for (DemoData demoData : dataList) { // log.info("讀取到一條數據{}", JSON.toJSONString(demoData));System.out.println("讀取到一條數據{}"+ JSON.toJSONString(demoData));}})).sheet().doRead();}

如果涉及到將讀取到的數據存儲到數據庫,和更多的樣式設置,參照
https://www.yuque.com/easyexcel/doc/read講解非常詳細。

總結

以上是生活随笔為你收集整理的java操作excel的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。