最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現(xiàn)超大Excel文件解析(XSSF,SXSSF,easyExcel)

 更新時間:2022年07月15日 11:32:35   作者:無解的黑眼圈  
這篇文章主要為大家詳細介紹了如何利用Java語言實現(xiàn)超大Excel文件解析(XSSF,SXSSF,easyExcel)以及速度的對比,感興趣的可以了解一下

一、XSSF

package com.yy.demo01;
 
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
 
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.DataFormat;
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.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 
public class dd {public static void main(String[] args) {
	//開始時間
	long begin = System.currentTimeMillis();
	try (//讀取一個已存在的Excel文件
			 Workbook workbook = new XSSFWorkbook(new FileInputStream("D:\\1\\demo-data.xlsx"));
					FileOutputStream out = new FileOutputStream("D:\\1\\100w.xlsx")) {
			  
			    //在“已存在”的Excel文件中,創(chuàng)建新的sheet
				Sheet sheet = workbook.createSheet();
				
				//獲取格式編碼值
				DataFormat dataFormat = workbook.createDataFormat();
				Short dateFormatCode = dataFormat.getFormat("yyyy年MM月dd日 HH:mm:ss");
				Short moneyFormatCode = dataFormat.getFormat("¥#,###");
				
				//創(chuàng)建日期格式對象
				CellStyle dateCellStyle = workbook.createCellStyle();
				dateCellStyle.setDataFormat(dateFormatCode);//設置格式編碼
				
				//創(chuàng)建貨幣格式對象
				CellStyle moneyCellStyle = workbook.createCellStyle();
				moneyCellStyle.setDataFormat(moneyFormatCode);//設置格式編碼值
				
			    for(int i = 0; i< 300000;i++) {
			    	String name = "A" + i;
			    	
			    	//創(chuàng)建行
			    	Row row = sheet.createRow(i + 1);
			    	
			    	//創(chuàng)建單元格
			    	Cell cell0 = row.createCell(0);//序號
			    	cell0.setCellValue(String.valueOf(i + 1));
			    	
			    	Cell cell1 = row.createCell(1);//姓名
			    	cell1.setCellValue(name);
			    	
			    	Cell cell2 = row.createCell(2);//日期
			    	cell2.setCellStyle(dateCellStyle);//貨幣金額格式對象
			    	cell2.setCellValue(new Date());
			    	
			    	Cell cell3 = row.createCell(3);//紅包金額
			    	cell3.setCellStyle(moneyCellStyle);//貨幣金額格式對象
			    	cell3.setCellValue((int)(Math.random()*10000));
			    	
			    }
			    //寫入文件
				workbook.write(out);
				//結(jié)束時間
				long end = System.currentTimeMillis();
				
				System.out.println("共耗時:" +(end - begin) + "毫秒");
			
			} catch (IOException e) {
 
				e.printStackTrace();
			}
}
 
}

二、SXSSF

package com.yy.demo01;
 
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
 
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.DataFormat;
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.streaming.SXSSFWorkbook;
 
public class Demo10 {
	public static void main(String[] args) {
		//開始時間
		long begin = System.currentTimeMillis();
		try (//讀取一個已存在的Excel文件
				 Workbook workbook = new SXSSFWorkbook(100);
						FileOutputStream out = new FileOutputStream("D:\\1\\100w.xlsx")) {
				  
				    //在“已存在”的Excel文件中,創(chuàng)建新的sheet
					Sheet sheet = workbook.createSheet();
					
					//獲取格式編碼值
					DataFormat dataFormat = workbook.createDataFormat();
					Short dateFormatCode = dataFormat.getFormat("yyyy年MM月dd日 HH:mm:ss");
					Short moneyFormatCode = dataFormat.getFormat("¥#,###");
					
					//創(chuàng)建日期格式對象
					CellStyle dateCellStyle = workbook.createCellStyle();
					dateCellStyle.setDataFormat(dateFormatCode);//設置格式編碼
					
					//創(chuàng)建貨幣格式對象
					CellStyle moneyCellStyle = workbook.createCellStyle();
					moneyCellStyle.setDataFormat(moneyFormatCode);//設置格式編碼值
					
				    for(int i = 0; i< 300000;i++) {
				    	String name = "A" + i;
				    	
				    	//創(chuàng)建行
				    	Row row = sheet.createRow(i + 1);
				    	
				    	//創(chuàng)建單元格
				    	Cell cell0 = row.createCell(0);//序號
				    	cell0.setCellValue(String.valueOf(i + 1));
				    	
				    	Cell cell1 = row.createCell(1);//姓名
				    	cell1.setCellValue(name);
				    	
				    	Cell cell2 = row.createCell(2);//日期
				    	cell2.setCellStyle(dateCellStyle);//貨幣金額格式對象
				    	cell2.setCellValue(new Date());
				    	
				    	Cell cell3 = row.createCell(3);//紅包金額
				    	cell3.setCellStyle(moneyCellStyle);//貨幣金額格式對象
				    	cell3.setCellValue((int)(Math.random()*10000));
				    	
				    }
				    //寫入文件
					workbook.write(out);
					//結(jié)束時間
					long end = System.currentTimeMillis();
					
					System.out.println("共耗時:" +(end - begin) + "毫秒");
				
				} catch (IOException e) {
 
					e.printStackTrace();
				}
	}
 
}

三、easyExcel

準備實體類

public class Order {
    @ExcelProperty("訂單編號")
    private String orderId; // 訂單編號
    
    @ExcelProperty("支付金額")
    @NumberFormat("¥#,###")
    private Double payment; // 支付金額
    
    @ExcelProperty(value = "創(chuàng)建日期",converter = LocalDateTimeConverter.class)
    private LocalDateTime creationTime; // 創(chuàng)建時間
 
    public Order() {
        this.orderId = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddhhmmss"))
                + UUID.randomUUID().toString().substring(0, 5);
        this.payment = Math.random() * 10000;
        this.creationTime = LocalDateTime.now();
    }
 
    public String getOrderId() {
        return orderId;
    }
 
    public void setOrderId(String orderId) {
        this.orderId = orderId;
    }
 
    public Double getPayment() {
        return payment;
    }
 
    public void setPayment(Double payment) {
        this.payment = payment;
    }
 
    public LocalDateTime getCreationTime() {
        return creationTime;
    }
 
    public void setCreationTime(LocalDateTime creationTime) {
        this.creationTime = creationTime;
    }
 
 
 
    @Override
    public String toString() {
        return "Order [orderId=" + orderId + ", payment=" + payment + ", creationTime=" + creationTime + "]";
    }
}

準備converter轉(zhuǎn)換類(兼容LocateDateTime日期時間類)

public class LocalDateTimeConverter implements Converter<LocalDateTime> {
 
    @Override
    public Class<LocalDateTime> supportJavaTypeKey() {
        return LocalDateTime.class;
    }
 
    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }
 
    @Override
    public LocalDateTime convertToJavaData(CellData cellData, ExcelContentProperty contentProperty,
            GlobalConfiguration globalConfiguration) {
        return LocalDateTime.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    }
 
    @Override
    public CellData<String> convertToExcelData(LocalDateTime value, ExcelContentProperty contentProperty,
            GlobalConfiguration globalConfiguration) {
        return new CellData<>(value.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
    }
 
}

寫入300000條數(shù)據(jù)

public class Demo {
    public static void main(String[] args) {
        // 寫入100w
        EasyExcel.write("c:\\test\\run\\easy.xlsx", Order.class)
                 .sheet("訂單列表")
                 .doWrite(data());
    }
    
    // 創(chuàng)建100w條訂單數(shù)據(jù)
    private static List<Order> data() {
        List<Order> list = new ArrayList<Order>();
        for (int i = 0; i < 300000; i++) {
            list.add(new Order());
        }
        return list;
    }
}

所以easyExcel最快,XSSF最慢且占用cpu最高

以上就是Java實現(xiàn)超大Excel文件解析(XSSF,SXSSF,easyExcel)的詳細內(nèi)容,更多關(guān)于Java Excel文件解析的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot 集成MQTT實現(xiàn)消息訂閱的詳細代碼

    SpringBoot 集成MQTT實現(xiàn)消息訂閱的詳細代碼

    本文介紹了如何在SpringBoot中集成MQTT并實現(xiàn)消息訂閱,主要步驟包括添加依賴、配置文件設置、啟動類注解、MQTT配置類、消息處理器配置、主題緩存、動態(tài)數(shù)據(jù)庫主題配置以及消息處理服務,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • Java封裝數(shù)組之動態(tài)數(shù)組實現(xiàn)方法詳解

    Java封裝數(shù)組之動態(tài)數(shù)組實現(xiàn)方法詳解

    這篇文章主要介紹了Java封裝數(shù)組之動態(tài)數(shù)組實現(xiàn)方法,結(jié)合實例形式詳細分析了java動態(tài)數(shù)組的實現(xiàn)原理、操作步驟與相關(guān)注意事項,需要的朋友可以參考下
    2020-03-03
  • JavaWeb實戰(zhàn)之用Servlet+JDBC實現(xiàn)用戶登錄與注冊

    JavaWeb實戰(zhàn)之用Servlet+JDBC實現(xiàn)用戶登錄與注冊

    這篇文章主要介紹了JavaWeb實戰(zhàn)之用Servlet+JDBC實現(xiàn)用戶登錄與注冊,文中有非常詳細的代碼示例,對正在學習java的小伙伴們有很大的幫助,需要的朋友可以參考下
    2021-04-04
  • springboot集成schedule實現(xiàn)定時任務

    springboot集成schedule實現(xiàn)定時任務

    在項目開發(fā)過程中,我們經(jīng)常需要執(zhí)行具有周期性的任務。通過定時任務可以很好的幫助我們實現(xiàn)。本篇文章主要介紹了springboot集成schedule實現(xiàn)定時任務,感興趣的小伙伴們可以參考一下
    2018-05-05
  • SpringBoot使用AOP實現(xiàn)統(tǒng)計全局接口訪問次數(shù)詳解

    SpringBoot使用AOP實現(xiàn)統(tǒng)計全局接口訪問次數(shù)詳解

    這篇文章主要介紹了SpringBoot通過AOP實現(xiàn)對全局接口訪問次數(shù)的統(tǒng)計,文章從相關(guān)問題展開全文內(nèi)容詳情,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • Java實現(xiàn)單線程聊天室

    Java實現(xiàn)單線程聊天室

    這篇文章主要為大家詳細介紹了Java實現(xiàn)單線程聊天室,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • 淺析java程序入口main()方法

    淺析java程序入口main()方法

    這篇文章主要介紹了淺析java程序入口main()方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • java方法重寫時需要注意的問題

    java方法重寫時需要注意的問題

    大家好,本篇文章主要講的是java方法重寫時需要注意的問題,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Dubbo新版本zk注冊中心連接問題及解決

    Dubbo新版本zk注冊中心連接問題及解決

    這篇文章主要介紹了Dubbo新版本zk注冊中心連接問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • SpringBoot中的手動提交事務

    SpringBoot中的手動提交事務

    在Spring框架中使用@Transactional注解通常管理事務,但在多線程環(huán)境下此方法失效,本文討論了手動事務的必要性及其實現(xiàn)方式,探討了Spring的七種事務傳播行為和數(shù)據(jù)庫的四大特性與隔離級別,了解這些可以幫助開發(fā)者在無法使用聲明式事務時
    2024-09-09

最新評論

松江区| 石门县| 辽阳市| 松滋市| 宜城市| 新余市| 台湾省| 麟游县| 潜江市| 肥东县| 县级市| 长宁区| 庆阳市| 柘城县| 锦州市| 双城市| 通河县| 淮北市| 永泰县| 阿图什市| 锡林郭勒盟| 新安县| 茂名市| 县级市| 嘉祥县| 蚌埠市| 郎溪县| 鹤庆县| 长丰县| 东台市| 天祝| 大邑县| 台北市| 阿拉善左旗| 伽师县| 黄冈市| 嵩明县| 凤凰县| 寿宁县| 法库县| 黔西|