Am getting the OutOfMemoryError
when the autoColumnWidth
function is called on all the columns in my excel containing 1,28,237 rows and 20 columns. Am using SXSSF
api and allocating -Xms2048m -Xmx4096m -XX:PermSize=1024m -XX:MaxPermSize=2048m
to JVM but still no success. CPU utilization goes upto 100% , my system RAM is 6gb which is used upto 5.8gb during the process and then i get OutOfMemoryError
. Any solution to it ?
With this, I can think of one solution ie taking a variable for each column, finding the max length and in the end after all data is entered set the column to respective variable.
Any other solution?
My Code To Create Excel
public static void createVideodataExcelFile(String excelPath, int maxRiskArea){
FileOutputStream fileOut = null;
XSSFWorkbook workbook = new XSSFWorkbook();
CellStyle style = workbook.createCellStyle();
XSSFFont font = workbook.createFont();
font.setColor(HSSFColor.BLACK.index);
font.setBold(true);
style.setFont(font);
int cellCount = 0;
try {
File file = new File(excelPath);
if(file.createNewFile()){
SXSSFWorkbook wb = new SXSSFWorkbook(workbook);
wb.setCompressTempFiles(true);
Sheet sheet = wb.createSheet("GLE Video Data");
int rowCount = sheet.getPhysicalNumberOfRows();
//System.out.println("Row Count ="+rowCount);
Row row = sheet.createRow(rowCount);
Cell cell1 = row.createCell(cellCount);
createCell(cell1, row, "CourseContent name", style, cellCount);
createCell(cell1, row, "lang", style, ++cellCount);
createCell(cell1, row, "CourseTitle", style, ++cellCount);
createCell(cell1, row, "Audience", style, ++cellCount);
createCell(cell1, row, "ContentRegion", style, ++cellCount);
createCell(cell1, row, "CourseTitle", style, ++cellCount);
createCell(cell1, row, "DeprecatedId", style, ++cellCount);
createCell(cell1, row, "GleCode", style, ++cellCount);
createCell(cell1, row, "Guid", style, ++cellCount);
createCell(cell1, row, "LearningFormat", style, ++cellCount);
for(int i = 0 ; i < maxRiskArea ; ++i){
createCell(cell1, row, "RiskArea", style, ++cellCount);
}
createCell(cell1, row, "SalesforceId", style, ++cellCount);
createCell(cell1, row, "Setting", style, ++cellCount);
createCell(cell1, row, "SmsCode", style, ++cellCount);
createCell(cell1, row, "pageID", style, ++cellCount);
createCell(cell1, row, "title", style, ++cellCount);
createCell(cell1, row, "ID", style, ++cellCount);
createCell(cell1, row, "media_src", style, ++cellCount);
createCell(cell1, row, "cuePoint", style, ++cellCount);
createCell(cell1, row, "character", style, ++cellCount);
createCell(cell1, row, "line", style, ++cellCount);
fileOut = new FileOutputStream(excelPath);
wb.write(fileOut);
System.out.println("Excel Of GLE Data Created.");
}
} catch (IOException e) {
errorLog.error("Excel Read/Write Error ="+e.getMessage());
throw new GLEException(e);
}
finally{
try {
if(fileOut!=null)
fileOut.close();
} catch (IOException e) {
// TODO Auto-generated catch block
errorLog.error("Excel Read/Write Error ="+e.getMessage());
throw new GLEException(e);
}
}
}
private static void createCell(Cell cell , Row row, String name, CellStyle style, int cellCount ){
cell = row.createCell(cellCount);
cell.setCellStyle(style);
cell.setCellValue(name);
}
尝试在调用 autoSizeColumn(columnIndex) 之前在 SXSSFSheet 对象上调用 trackAllColumnsForAutoSizing() 它将被修复
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.