網站首頁 編程語言 正文
效果圖:
pom.xml文件增加依賴:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.1</version>
</dependency>
12345
Workbook實現類有三個:HSSFWorkbook、XSSFWorkbook和SXSSFWorkbook,實現類不同,操作方法也不同
HSSFWorkbook
HSSFWorkbook讀取操作Excel2003以前(包括2003)的版本,文件擴展名為 .xls,導出的數據最多為65535,優點:一般不會發生內存溢出
設置下拉菜單方式:
String[] strs = {"語文","數學","體育"};
DVConstraint constraint = DVConstraint.createExplicitListConstraint(strs);
//參數順序:開始行、結束行、開始列、結束列
CellRangeAddressList regions = new CellRangeAddressList(1,objects.size()+1,9,9);
HSSFDataValidation data = new HSSFDataValidation(regions,constraint);
data.setSuppressDropDownArrow(false);
sheet.addValidationData(data);
1234567
XSSFWorkbook
XSSFWorkbook讀取操作Excel2007以后(包括2007)的版本,文件擴展名為 .xlsx,導出的數據最多為1048576行,16384列,缺點:有可能發生內存溢出
設置下拉菜單方式:
String[] strs = {"語文","數學","體育"};
XSSFDataValidationHelper helper = new XSSFDataValidationHelper(sheet);
XSSFDataValidationConstraint constraint = (XSSFDataValidationConstraint)helper.createExplicitListConstraint(strs);
//參數順序:開始行、結束行、開始列、結束列
CellRangeAddressList addressList = new CellRangeAddressList(1,objects.size()+1,8,8);
XSSFDataValidation validation = (XSSFDataValidation)helper.createValidation(constraint, addressList);
validation.setSuppressDropDownArrow(true);
validation.setShowErrorBox(true);
sheet.addValidationData(validation);
123456789
可以根據自己使用的Workbook的具體實現類來選擇使用上面哪種方式為列添加數據驗證。
SXSSFWorkbook
為了解決XSSFWorkbook有時會發生內存溢出應運而生的,在生成Workbook 時給工作簿一個內存數據存在條數:
Workbook wb = new SXSSFWorkbook(5000);
1
這樣一旦這個Workbook中數據量超過5000就會寫入到磁盤中,減少內存的使用量來提高速度和避免溢出。
其實,就算生成很小的excel(比如幾Mb),它用掉的內存是遠大于excel文件實際的size的。如果單元格還有各種格式(比如,加粗,背景標紅之類的),那它占用的內存就更多了。對于大型excel的創建且不會內存溢出的,就只有SXSSFWorkbook了。它的原理很簡單,用硬盤空間換內存(就像hash map用空間換時間一樣)。
SXSSFWorkbook的工作方式決定了它只會保存最新的excel rows在內存里供查看,在此之前的excel rows都會被寫入到硬盤里(Windows電腦的話,是寫入到C盤根目錄下的temp文件夾)。被寫入到硬盤里的rows是不可見的/不可訪問的。只有還保存在內存里的才可以被訪問到。
SXSSF與XSSF的對比:
a. 在一個時間點上,只可以訪問一定數量的數據
b. 不再支持Sheet.clone()
c. 不再支持公式的求值
d. 在使用Excel模板下載數據時將不能動態改變表頭,因為這種方式已經提前把excel寫到硬盤的了就不能再改了
當數據量超出65536條后,在使用HSSFWorkbook或XSSFWorkbook,程序會報OutOfMemoryError:Javaheap space;內存溢出錯誤。這時應該用SXSSFworkbook。
所以如果使用SXSSFWorkbook操作Excel就別玩那么多花里胡哨的,比如設置什么下拉菜單。
原文鏈接:https://blog.csdn.net/qq_43985303/article/details/135324715
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2021-12-13 C語言輸出唯一的子串_C 語言
- 2023-01-17 pytest內置fixture使用臨時目錄流程詳解_python
- 2022-04-16 Android中RecyclerView實現簡單購物車功能_Android
- 2022-09-23 基于numpy實現邏輯回歸_python
- 2022-03-28 Easyx實現窗口自動碰撞的小球_C 語言
- 2023-07-14 elemment ui tabs實現思路
- 2022-04-14 解決:Failed to run File Watcher ‘goimports‘.The watc
- 2023-11-26 XMLHttpRequest對象的Get請求和Post請求的用法
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支