使用poiexcel(一万条数据分成3个sheet导出)
时间: 2023-12-14 13:40:13 浏览: 132
Java使用POI导出大数据量Excel的方法
5星 · 资源好评率100%
你可以使用Apache POI库来实现这个功能,下面是一个简单的示例代码:
```java
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.ArrayList;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
public class ExcelExporter {
private static final int MAX_ROWS_PER_SHEET = 10000;
public void exportToExcel(List<MyData> dataList, String filePath) throws IOException {
// Create workbook
SXSSFWorkbook workbook = new SXSSFWorkbook();
workbook.setCompressTempFiles(true);
// Split data into sheets
List<List<MyData>> sheetsData = splitDataIntoSheets(dataList);
// Export each sheet
for (int i = 0; i < sheetsData.size(); i++) {
List<MyData> sheetData = sheetsData.get(i);
String sheetName = "Sheet" + (i + 1);
exportToSheet(sheetData, sheetName, workbook);
}
// Save the workbook
try (FileOutputStream outputStream = new FileOutputStream(filePath)) {
workbook.write(outputStream);
}
}
private List<List<MyData>> splitDataIntoSheets(List<MyData> dataList) {
List<List<MyData>> sheetsData = new ArrayList<>();
int numOfSheets = (int) Math.ceil((double) dataList.size() / MAX_ROWS_PER_SHEET);
for (int i = 0; i < numOfSheets; i++) {
int startIndex = i * MAX_ROWS_PER_SHEET;
int endIndex = Math.min(startIndex + MAX_ROWS_PER_SHEET, dataList.size());
List<MyData> sheetData = dataList.subList(startIndex, endIndex);
sheetsData.add(sheetData);
}
return sheetsData;
}
private void exportToSheet(List<MyData> dataList, String sheetName, SXSSFWorkbook workbook) {
// Create sheet
SXSSFSheet sheet = workbook.createSheet(sheetName);
sheet.trackAllColumnsForAutoSizing();
// Create header row
Row headerRow = sheet.createRow(0);
headerRow.createCell(0).setCellValue("Column1");
headerRow.createCell(1).setCellValue("Column2");
headerRow.createCell(2).setCellValue("Column3");
// Populate data rows
for (int i = 0; i < dataList.size(); i++) {
MyData data = dataList.get(i);
Row dataRow = sheet.createRow(i + 1);
dataRow.createCell(0).setCellValue(data.getColumn1());
dataRow.createCell(1).setCellValue(data.getColumn2());
dataRow.createCell(2).setCellValue(data.getColumn3());
}
// Autosize columns
for (int i = 0; i < 3; i++) {
sheet.autoSizeColumn(i);
}
}
}
```
这个示例代码使用了SXSSFWorkbook来支持大量数据的导出。它会将数据按照每个sheet最多10000条的规则进行分割,然后在每个sheet里面写入数据。最后将所有sheet写入到一个文件里面。
你需要提供一个MyData类,它包含了你要导出的数据的字段。在示例代码里面,它包含了三个字段:column1、column2和column3。
你需要创建一个ExcelExporter实例,并调用它的exportToExcel方法来执行导出操作。它需要两个参数:一个是你的数据列表,另一个是导出文件的路径。
阅读全文