中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java怎么實現超大Excel文件解析

發布時間:2023-05-12 10:24:23 來源:億速云 閱讀:118 作者:zzz 欄目:編程語言

這篇文章主要介紹“Java怎么實現超大Excel文件解析”,在日常操作中,相信很多人在Java怎么實現超大Excel文件解析問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java怎么實現超大Excel文件解析”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

一、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文件中,創建新的sheet
				Sheet sheet = workbook.createSheet();
				
				//獲取格式編碼值
				DataFormat dataFormat = workbook.createDataFormat();
				Short dateFormatCode = dataFormat.getFormat("yyyy年MM月dd日 HH:mm:ss");
				Short moneyFormatCode = dataFormat.getFormat("¥#,###");
				
				//創建日期格式對象
				CellStyle dateCellStyle = workbook.createCellStyle();
				dateCellStyle.setDataFormat(dateFormatCode);//設置格式編碼
				
				//創建貨幣格式對象
				CellStyle moneyCellStyle = workbook.createCellStyle();
				moneyCellStyle.setDataFormat(moneyFormatCode);//設置格式編碼值
				
			    for(int i = 0; i< 300000;i++) {
			    	String name = "A" + i;
			    	
			    	//創建行
			    	Row row = sheet.createRow(i + 1);
			    	
			    	//創建單元格
			    	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);
				//結束時間
				long end = System.currentTimeMillis();
				
				System.out.println("共耗時:" +(end - begin) + "毫秒");
			
			} catch (IOException e) {
 
				e.printStackTrace();
			}
}
 
}

Java怎么實現超大Excel文件解析

二、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文件中,創建新的sheet
					Sheet sheet = workbook.createSheet();
					
					//獲取格式編碼值
					DataFormat dataFormat = workbook.createDataFormat();
					Short dateFormatCode = dataFormat.getFormat("yyyy年MM月dd日 HH:mm:ss");
					Short moneyFormatCode = dataFormat.getFormat("¥#,###");
					
					//創建日期格式對象
					CellStyle dateCellStyle = workbook.createCellStyle();
					dateCellStyle.setDataFormat(dateFormatCode);//設置格式編碼
					
					//創建貨幣格式對象
					CellStyle moneyCellStyle = workbook.createCellStyle();
					moneyCellStyle.setDataFormat(moneyFormatCode);//設置格式編碼值
					
				    for(int i = 0; i< 300000;i++) {
				    	String name = "A" + i;
				    	
				    	//創建行
				    	Row row = sheet.createRow(i + 1);
				    	
				    	//創建單元格
				    	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);
					//結束時間
					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 = "創建日期",converter = LocalDateTimeConverter.class)
    private LocalDateTime creationTime; // 創建時間
 
    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轉換類(兼容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條數據

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

Java怎么實現超大Excel文件解析

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

到此,關于“Java怎么實現超大Excel文件解析”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

会昌县| 盐亭县| 平邑县| 屯昌县| 长治县| 阿拉善左旗| 屏东市| 河北区| 英德市| 西丰县| 阿瓦提县| 略阳县| 长垣县| 祁门县| 皋兰县| 巴中市| 沙河市| 建德市| 通州区| 嵊州市| 建平县| 郴州市| 双牌县| 鹤庆县| 庆阳市| 佛坪县| 大姚县| 中方县| 灵璧县| 静乐县| 阿瓦提县| 蓬溪县| 大庆市| 富蕴县| 红安县| 许昌市| 玛曲县| 白山市| 美姑县| 长白| 清流县|