Excel 由 JAR 文件创建的文件被分解成更小的文件,尽管在我的 IDE 中没有这样做

Excel file created by JAR file is being broken into smaller files despite not doing this inside of my IDE

我有一个程序可以从 SQL 查询中提取数据,并能够创建搜索到的数据并将其写入 excel 文件。该程序可以从多个查询中提取数据,并将该数据发送到一个 excel 文件,除了一个查询之外,所有查询都可以。给我问题的那个从它的查询中提取了大约 350 个结果,这是查询提取的最大数量。当我在 Eclipse 中创建 excel 文件时,它只是按预期创建了一个 excel 文件。但是,如果我将程序转换为 JAR 文件并使用相同的查询创建一个 excel 文件,excel 文件将分成大约 5 个不同的 excel 文件,每个文件包含大约 50-60结果。

我对其他 SQL 查询使用了相同的基本代码,并且运行良好,这是我第一次遇到这个特殊问题。

这是我写入 excel 文件的代码。从 SQL 搜索中获得的数据存储在 13 个不同的列表中,一个列表对应 sql 搜索中的每一列。该代码采用今天的日期和时间并将其添加到文件标题中。首次创建 excel 文件时,tableMade 设置为 false,因为首先添加到 excel 文件的是列名。如果不设置为false,writeToExcel每次向excel文件添加数据时都会添加列名。

public static void writeToExcel(String a, String b, String c, String d,
        String e, String f, String g, String h, String i,
        String j, String k, String l, String m){
    try{//sends data from toExcel to an excel file
        Date date2 = Calendar.getInstance().getTime();
        DateFormat dateFormat = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss"); 
        String strDate = dateFormat.format(date2);//above creates title date/time
        String fileName = "Date "+ strDate + ".csv";//creates title: Data_For_yyyy_MM_dd_HH_mm_SS
        FileOutputStream fos = new FileOutputStream(fileName,true);//creates new excel file 
        PrintWriter pw = new PrintWriter(fos);
        if(tableMade == false){
            pw.println(a + "," + b + "," +c+ "," +d+ "," +e
        + "," +f+ "," +g+ "," +h+ "," +i+ "," +j+ "," +k+ "," +l+"'"+m+ "\t");
            tableMade = true;//writes to excel file
        }

        pw.println(a + "," + b + "," +c+ "," +d+ "," +e
        + "," +f+ "," +g+ "," +h+ "," +i+ "," +j+ "," +k+ "," +l+"'"+m+ "\t");

        pw.close();

        System.out.println(fileName + " was created"); 
    }
    catch(FileNotFoundException ex){
        System.out.println("Write to excel failed"); 
    }
}

这是调用 writeToExcel 的按钮的代码。按下时,此代码为 运行,它会创建 excel 文件。代码同时遍历 13 个列表中的每一个,将每个列表中当前指向的值作为参数传递给 writeToExcel。

for(int i = 0; i < list1.size(); i++) {
                writeToExcel(list1.get(i), list2.get(i), list3.get(i), list4.get(i), list5.get(i),
                list6.get(i), list7.get(i), list8.get(i), list9.get(i), list10.get(i), list11.get(i),
                list12.get(i), list13.get(i)); 
            }
            excelAllowed = false; 
            tableMade = false;
        }

预期输出是 1 个 excel 文件,其中包含所有查询日期,但是当 运行 来自 JAR 文件时的实际输出是 5-6 excel 个文件,每个文件包含一个块的数据。

很可能,您的多个 CSV 文件在文件名中具有不同的时间戳,因为您将时间戳定义为秒:

Date date2 = Calendar.getInstance().getTime();
DateFormat dateFormat = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss"); 
String strDate = dateFormat.format(date2);

每经过一个很长的循环,可能会经过好几秒,因此会经过多个逗号分隔值 (CSV) 文件(不是 Excel 二进制类型的文件 –.xls、.xlsx、.xlsm , .xlsb) 生成。将时间戳调整为分钟或小时,所有结果可能包含在一个 CSV 文件中。

DateFormat dateFormat = new SimpleDateFormat("yyyy_MM_dd_HH_mm"); 

或者,在方法外部定义文件名并循环以在单击按钮时使用时间戳:

Date date2 = Calendar.getInstance().getTime();
DateFormat dateFormat = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss"); 
String strDate = dateFormat.format(date2);              
String fileName = "Date "+ strDate + ".csv";

for(int i = 0; i < list1.size(); i++) {
     writeToExcel(...);                    // REMOVE fileName FROM INSIDE METHOD
}