我必须使用jexcel在java中使用列值对xls表格行进行sorting

我在java中使用jexcel api。 我需要读取xls paticular列值,并且必须根据xls对整个行进行sorting。 然后我必须以新的xls以sorting的方式保存这些行。 我能够使用TreeMap来做到这一点,但它创造了memmoryOutOfBoundexception的可能性。

所以我需要一个有效的方法。 任何分类代码将是非常有帮助的。 请使用jexcel的Treemap查找我的代码实现

def sort() { def wbSetting = nullenter code here def writableWorkBook = null`enter code here` def writableSheet = null`enter code here` Workbook workbook = Workbook.getWorkbook(new File(grailsApplication.config.app.xls.path)); Sheet sheet = workbook.getSheet(0); Cell[] flagCell = sheet.getColumn(1) TreeMap map = new TreeMap (Collections.reverseOrder()); flagCell.each { flag -> Cell firstName = sheet.getCell(0, flag.getRow()); Cell lastName = sheet.getCell(1, flag.getRow()); Cell ageCell = sheet.getCell(2,flag.getRow()); String first = firstName.getContents(); String last = lastName.getContents(); String age=ageCell.getContents() if(!age.isEmpty()) { map.put(age,first+"-"+last) } } workbook.close() wbSetting = new WorkbookSettings() wbSetting.setUseTemporaryFileDuringWrite(true) String filename = grailsApplication.config.app.calcfilesoutput.path writableWorkBook = Workbook.createWorkbook(new File(filename), wbSetting) writableSheet = writableWorkBook.createSheet("sheet1", 0) int i=0 Iterator iterator= map.entrySet().iterator(); while(iterator.hasNext()) { def it=iterator.next(); String fullName=map.get(it.getKey().toString()) String[] result=fullName.split("-") String first=result[0] String last=result[1] writableSheet.addCell(new Label(0, i, first)) writableSheet.addCell(new Label(1, i, last)) writableSheet.addCell(new Label(2, i, it.getKey().toString())) i++; } writableWorkBook.write(); writableWorkBook.close(); } 

我的xls有三列,即firstname,lastname和age.Isorting行使用年龄列值添加已经sorting的TreeMap,但这不是一个有效的方法。请尽可能提供其他示例代码

如果你发现Map是太多的内存,你可以创build一个小的子类来作为logging。 使物体具有可比性。 这将大致如下所示:

  private static class MyRecord implements Comparable<MyRecord> { int age; String name; @Override public int compareTo(MyRecord o) { if (o == null) { return -1; } return (age - o.age); } } 

然后,您可以创build这些MyRecord对象的列表,closures原始电子表格,对List进行sorting,然后从sorting列表中写出新的电子表格。