Сортировка данных перед экспортом в Excel
У меня есть код, приведенный ниже, и он в основном получает мои данные из моей табличной модели и помещает их в электронную таблицу. Однако после экспорта данных данные не сохраняются в порядке, указанном при сортировке таблицы:
Это определяется как показано ниже для другого метода, который сортирует строки таблицы и выполняет метод saveSingleTableAsExcel(); который экспортирует данные:
.......
sorter = new TableRowSorter<>(tableR.getModel());
tableR.setRowSorter(sorter);
sortKeys = new ArrayList<>();
int columnIndexToSort = 0;
sortKeys.add(new RowSorter.SortKey(columnIndexToSort, SortOrder.ASCENDING));
sorter.setSortKeys(sortKeys);
sorter.sort();
saveSingleTableAsExcel();
.......
public void saveSingleTableAsExcel() throws FileNotFoundException{
Map<String,TableModel> models = new HashMap<String,TableModel>();
models.put("Sheet1", modelR);
saveTablesAsExcel(models);
}
public static void saveTablesAsExcel(Map<String,TableModel> models) throws FileNotFoundException{
HSSFWorkbook wb = new HSSFWorkbook();
for (String sheetName : models.keySet()){
createSheet(wb, models.get(sheetName), sheetName);
}
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HHmmss");
Calendar cal = Calendar.getInstance();
System.out.println(dateFormat.format(cal.getTime())); //2014/08/06 16:00:22
//FileOutputStream out = null;
FileOutputStream out = new FileOutputStream("C:\\Users\\tester.xls");
try {
wb.write(out);
out.close();
} catch (IOException e) {
}
}
/**
* Create a Sheet in the workbook using data from the TableModel
*
* @param wb
* @param model
* @param sheetName
*/
private static void createSheet(HSSFWorkbook wb, TableModel model, String sheetName){
Sheet sheet = wb.createSheet(sheetName);
Row headerRow = sheet.createRow(0);
headerRow.setHeightInPoints(12.75f);
HSSFFont boldFont = wb.createFont();
boldFont.setFontHeightInPoints((short)22);
boldFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
HSSFCellStyle headerStyle = wb.createCellStyle();
// Create the header cells
int numColumns = model.getColumnCount();
for (int col=0; col<numColumns; col++) {
Cell cell = headerRow.createCell(col);
cell.setCellValue(model.getColumnName(col));
cell.setCellStyle(headerStyle);
}
// Set the cell values
int numRows = model.getRowCount();
for (int row=0; row<numRows; row++){
Row sheetRow = sheet.createRow(row+1); // account for header row (0)
for (int col=0; col<numColumns; col++) {
Cell cell = sheetRow.createCell(col);
Object val = model.getValueAt(row, col);
if (val instanceof Number){
cell.setCellValue((double)val);
}
else if (val instanceof Boolean){
cell.setCellValue((Boolean)val);
}
else if (val instanceof String){
cell.setCellValue(((String)val));
}
else if (val instanceof Date){
cell.setCellValue((Date)val);
}
// else {
// cell.setCellValue(val.toString());
// }
}
}
}
Как я могу сохранить тот же порядок, что и модель, которая сортируется по первому столбцу (столбец 0)?
1 ответ
Ваш метод сортировки использует метод сравнения или метод equals, который не был перезаписан? Это мое лучшее предположение, не видя метод сортировки.