Javaでjexcel APIを使用しています。xls の特定の列の値を読み取る必要があり、それに基づいて xls の行全体を並べ替える必要があります。次に、これらの行を並べ替えて新しい xls に保存する必要があります。TreeMap を使用してそれを行うことはできますが、memmoryOutOfBound 例外が発生する可能性があります。
だから私は効率的な方法が必要です。ソートコードは非常に役立ちます。Treemap by jexcel を使用して私のコード実装を見つけてください
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 の 3 つの列があります。既に並べ替えられている TreeMap を追加して、age 列の値を使用して行を並べ替えています。しかし、これは効率的な方法ではありません。可能であれば、他のサンプル コードを提供してください。