Я уже довольно давно работаю над моделью Apache POI XSSF. Я пытаюсь создать лист Excel, который отформатирован и имеет некоторый набор стилей. По соображениям производительности я использовал пример Big-Grid, предоставляемый POI.Где разместить autoSizeColumn в Apache POI?
Наряду с этим я также хочу применить autoSizeColumn для каждого столбца. Но я не уверен, где я должен применить метод autoSizeColumn в данной программе.
private static void generate(Writer out, Map<String, XSSFCellStyle> styles,String inputFileName, XSSFSheet sheet) throws Exception {
BufferedReader br = null;
String line = "";
String cvsSplitBy = ",";
SpreadsheetWriter sw = new SpreadsheetWriter(out);
sw.beginSheet();
Integer rowId = 0;
br = new BufferedReader(new FileReader(inputFileName));
while ((line = br.readLine()) != null) {
//use comma as separator
String[] reportRecords = line.split(cvsSplitBy);
if (rowId == 0) { // Print the Report Name
sw.insertRow(rowId++);
sw.createCell(0, StringEscapeUtils.escapeXml(line.substring(1, line.length() - 1)), styles.get("header").getIndex());
sw.endRow();
}
else if(rowId == 1){
sw.insertRow(rowId++);
for (int column = 0; column < reportRecords.length; column++) {
sw.createCell(column, StringEscapeUtils.escapeXml(reportRecords[column].substring(1,reportRecords[column].length() - 1)), styles.get("header").getIndex());
}
sw.endRow();
}
else{
sw.insertRow(rowId++);
for (int column = 0; column < reportRecords.length; column++) {
sw.createCell(column, StringEscapeUtils.escapeXml(reportRecords[column].substring(1,reportRecords[column].length() - 1)));
}
sw.endRow();
}
}
br.close();
sheet.autoSizeColumn(1);
sheet.autoSizeColumn(2);
sheet.autoSizeColumn(3);
sw.endSheet();
}
Ваша помощь очень ценится в этом отношении.
Спасибо!
Выполняются ли ваши попытки изменения размера? – andrewdleach
Знаете ли вы, что для автосогласования столбца требуется чтение каждой ячейки для работы, которая является самой длинной, что принципиально несовместимо с записью всех ячеек на диск, чтобы они не были в памяти? – Gagravarr