gpt4 book ai didi

Java:Apache POI Excel 行在 10/20/30 等之后乱序

转载 作者:行者123 更新时间:2023-12-02 03:32:51 25 4
gpt4 key购买 nike

我目前正在开发一个项目,需要将大量输出写入 Excel 电子表格,因此我决定使用 Apache POI 来加快该过程。然而,我发现任何超过 10 行的条目都会导致新行被放置在开头。即,在第 9 行之后,第 10 行将转到电子表格的顶部,并将其他所有内容向下推。即使使用来自 TutorialsPoint 的示例文件也会发生这种情况,我将在下面包含该示例文件。

import java.io.File;
import java.io.FileOutputStream;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class Writesheet
{
public static void main(String[] args) throws Exception
{
//Create blank workbook
XSSFWorkbook workbook = new XSSFWorkbook();
//Create a blank sheet
XSSFSheet spreadsheet = workbook.createSheet(
" Employee Info ");
//Create row object
XSSFRow row;
//This data needs to be written (Object[])
Map < String, Object[] > empinfo =
new TreeMap < String, Object[] >();
empinfo.put( "1", new Object[] {
"EMP ID", "EMP NAME", "DESIGNATION" });
empinfo.put( "2", new Object[] {
"tp01", "Gopal", "Technical Manager" });
empinfo.put( "3", new Object[] {
"tp02", "Manisha", "Proof Reader" });
empinfo.put( "4", new Object[] {
"tp03", "Masthan", "Technical Writer" });
empinfo.put( "5", new Object[] {
"tp04", "Satish", "Technical Writer" });
empinfo.put( "6", new Object[] {
"tp05", "Krishna", "Technical Writer" });
//Iterate over data and write to sheet
Set < String > keyid = empinfo.keySet();
int rowid = 0;
for (String key : keyid)
{
row = spreadsheet.createRow(rowid++);
Object [] objectArr = empinfo.get(key);
int cellid = 0;
for (Object obj : objectArr)
{
Cell cell = row.createCell(cellid++);
cell.setCellValue((String)obj);
}
}
//Write the workbook in file system
FileOutputStream out = new FileOutputStream(
new File("Writesheet.xlsx"));
workbook.write(out);
out.close();
System.out.println(
"Writesheet.xlsx written successfully" );
}
}

上面是我提到的示例代码。如果添加更多行(只要总数超过 10 行),电子表格就会乱序。或者你可以使用 for 循环。

for(int i = 6; i < 20; i++){
String num = Integer.toString(i);
empinfo.put(num, new Object[] {"test", num});
}

请原谅,我对编程艺术一点也不精通。如果有人可以提供帮助,我将非常感激!

最佳答案

问题是您正在使用以字符串作为键的 TreeMap。因此,一旦将键“10”添加到 TreeMap 中,顺序就会不同(可能是 1,10,2,3,4...)。如果您将树形图更改为使用整数作为键,它将保持您期望的顺序。

有关字符串排序的更多信息:因为您的 TreeMap 是在没有比较器的情况下初始化的,所以它按“自然”顺序对键进行排序(请参阅 https://docs.oracle.com/javase/tutorial/collections/interfaces/order.html )。字符串的“自然”排序并不是普通人所期望的(请参阅 Java String Number Comparator )。

关于Java:Apache POI Excel 行在 10/20/30 等之后乱序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37845461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com