如何基于从查询输出传递的值在Excel中创build多个工作表

#我的要求是生成一个有多个工作表的Excel工作簿。 在这种情况下执行具有特定date范围的查询并获取输出并将这些值传递给基于date的不同工作表的Excel工作簿,例如:工作表1应该只包含date1值,工作表2应该只包含date2值等直到给定的date范围。 #

##在下面的代码中,我只实现了查询选定的date范围,并只传递给excel工作簿,请帮助我如何从这里前进,并达到我的要求。 ##

import java.sql.*; import java.io.File; import java.io.FileOutputStream; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class CreateExcelFile{ public static void main(String[]args){ try{ XSSFWorkbook wb=new XSSFWorkbook(); XSSFSheet sheet = wb.createSheet("new sheet"); XSSFRow rowhead= sheet.createRow((short)0); rowhead.createCell((short) 0).setCellValue("EMPNO"); rowhead.createCell((short) 1).setCellValue("ENAME"); rowhead.createCell((short) 2).setCellValue("JOB"); rowhead.createCell((short) 3).setCellValue("MGR"); rowhead.createCell((short) 4).setCellValue("HIREDATE"); Class.forName("oracle.jdbc.driver.OracleDriver"); Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","pass"); Statement st=con.createStatement(); ResultSet rs=st.executeQuery("SELECT * FROM emp WHERE HIREDATE BETWEEN TO_DATE ('1980/12/17', 'yyyy/mm/dd')AND TO_DATE ('1981/02/20','yyyy/mm/dd')"); int i=1; while(rs.next()){ XSSFRow row= sheet.createRow((short)i); row.createCell((short) 0).setCellValue(Integer.toString(rs.getInt("empno"))); row.createCell((short) 1).setCellValue(rs.getString("ename")); row.createCell((short) 2).setCellValue(rs.getString("job")); row.createCell((short) 3).setCellValue(rs.getString("mgr")); row.createCell((short) 4).setCellValue(rs.getString("hiredate")); i++; } FileOutputStream fileOut = new FileOutputStream(new File("data.xlsx")); wb.write(fileOut); fileOut.close(); System.out.println("Your excel file has been generated!"); } catch ( Exception ex ) { System.out.println(ex); } } } 

首先,我会改变你的应用程序devise,分离代码获取数据,并写入一个Excel文件到不同的类。
其次,获得结果集后,将数据存储在Map中。 例如HashMap<Date, List<DbRow>>其中DbRow是一个包含字段empnameename等的类。 这样你就可以把你的数据分成列表。
之后,查看地图值并将每个列表中的数据添加到新的工作表中。

工作表1应该只包含date1的值,工作表2应该只包含date2的值,直到给定的date范围

显然你只调用wb.createSheet("new sheet")一次。 如果您的要求是根据date范围创build多个工作表,则应该在while loop块内多次调用该方法。

查询,

SELECT * FROM emp WHERE HIREDATE BETWEEN TO_DATE('1980/12/17','yyyy / mm / dd')和TO_DATE('1981/02/20','yyyy / mm / dd')

正在返回你不同雇佣人数的行数。 检查这些date,并将它们放在不同的表格中。