为了账号安全,请及时绑定邮箱和手机立即绑定

由 JAR 文件创建的 Excel 文件被分解为更小的文件,尽管我没有在 IDE 中执行此操作

由 JAR 文件创建的 Excel 文件被分解为更小的文件,尽管我没有在 IDE 中执行此操作

肥皂起泡泡 2023-09-20 19:07:04
我有一个程序,可以从 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。预期输出是 1 个包含所有查询日期的 Excel 文件,但是从 JAR 文件运行时的实际输出是 5-6 个 Excel 文件,每个文件包含一块数据。
查看完整描述

1 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

由于您将时间戳定义为秒,因此您的多个 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

}


查看完整回答
反对 回复 2023-09-20
  • 1 回答
  • 0 关注
  • 75 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信