JavaのPOIは、Excelを使用して大量のデータをエクスポートします

背景

今日エクスポートしたExcel関数を記述する必要がありますが、時に30,000データの量、23の列数、メモリのうち、CPUを100%、テスト環境の直接打撃ことがわかりました。ローカルテスト、3000個のデータの周囲輸出、500M周りのヒープメモリ一時的な増加で発見されました。そして、見つかったSXSSFWorkbookクラスを。

簡単な紹介

SXSSFWorkbookする必要性poi-ooxmlパック3.8以上をサポートするために始めた、私の側は、使用に適しており3.9、本質的に、バージョンXSSFWorkbookクラス(Excel2007)、それが採用されるために使用される方法硬盘空间削減大幅に堆内存、フットプリントをシステムディレクトリの一時フォルダに一時ファイルを作成し、すべてのデータの行に合意した数は、一時ファイルに保存され、すべてではないメモリでは、メモリのみを格納しているよりも大きいの最新のメモリ不足を回避するために、メモリ空間のためのハードディスクの空き容量を達成するために、データ契約の個数を

使用

通常の導出方法からExcelの区別がつかない、ただインスタンス化置き換えSXSSFWorkbook

            SXSSFWorkbook workbook = null;
			OutputStream outputStream = null;
			try {
				outputStream = response.getOutputStream();
				//创建工作簿
				workbook = new SXSSFWorkbook();
				// 打开压缩功能 防止占用过多磁盘
				workbook.setCompressTempFiles(true);

				// 创建一个工作表
				Sheet sheet = workbook.createSheet("表名");
				// 创建一行
				Row titleRow = sheet.createRow(0);
				// 创建一个单元格
				Cell cell = titleRow.createCell(0);
				// 给单元格赋值
				cell.setCellValue("内容");

				// 将工作簿写入输出流
				workbook.write(outputStream);
			} catch (Exception e) {
				e.printStackTrace();
			}finally {
				if (workbook != null) {
					//使用完毕后将产生的临时文件删除 防止将磁盘搞满
					workbook.dispose();
				}
				if (outputStream != null) {
					outputStream.close();
					
				}


			}

复制代码

注意点

  • 好ましくは、圧縮モードがオンになっているworkbook.setCompressTempFiles(true);一時ファイルが大幅にボリュームを減らすことができるように

  • 使用後にリリースされworkbook.dispose();た一時ファイルを防ぐために、ハードディスクを爆発するために増加されました

おすすめ

転載: juejin.im/post/5dd66fea6fb9a05a987e8a9f