我想按字符串列之一对工作表中的行进行排序。我尝试使用 Sheet.shiftRows 方法来实现这一点,但我无法做到这一点。它不会在我的方法中切换行的位置。我的代码有什么问题吗?或者也许有更好的方法按 Excel 中的任何字符串列对行进行排序?
/**
* Sorts (A-Z) rows by String column
* @param sheet - sheet to sort
* @param column - String column to sort by
* @param rowStart - sorting from this row down
*/
private void sortSheet(Sheet sheet, int column, int rowStart) {
boolean sorting = true;
int lastRow = sheet.getLastRowNum();
while (sorting == true) {
sorting = false;
for (Row row : sheet) {
// skip if this row is before first to sort
if (row.getRowNum()<rowStart) continue;
// end if this is last row
if (lastRow==row.getRowNum()) break;
Row row2 = sheet.getRow(row.getRowNum()+1);
if (row2 == null) continue;
String firstValue = (row.getCell(column) != null) ? row.getCell(column).getStringCellValue() : "";
String secondValue = (row2.getCell(column) != null) ? row2.getCell(column).getStringCellValue() : "";
//compare cell from current row and next row - and switch if secondValue should be before first
if (secondValue.compareToIgnoreCase(firstValue)<0) {
sheet.shiftRows(row2.getRowNum(), row2.getRowNum(), -1);
sheet.shiftRows(row.getRowNum(), row.getRowNum(), 1);
sorting = true;
}
}
}
}
知道如何管理工作表中的行排序吗?
UPDATE上述方法从 Apache-POI 3.9 版本开始有效。
编辑:添加缺少的括号 -helvio
Poi 没有内置的排序机制,当然你距离第一个有这种需求的人还很远。
我认为您遇到了麻烦,因为您正在移动正在迭代的行。我已经运行了上面的代码,似乎发生的情况是在代码执行结束时行从工作表中消失。
该问题试图对读入表进行就地修改。我相信创建第二个输出表会更合适。
因此,基本方法是读取工作表,在 java 中排序,就像处理任何其他排序问题一样,写入输出表。如果您制作了行号的映射,该行号对于您感兴趣的列的字符串值是唯一的,那么您可以按值对映射进行排序。如果您只预见到需要对单个列进行排序,那么这种方法就会起作用。无论如何,这并不像从 Excel 中选择排序菜单选项那么简单。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)