java - 如何根据查询输出传递的值在 Excel 中创建多个工作表

标签 java sql excel apache-poi

# 我的要求是生成一个包含多个工作表的 Excel 工作簿。在此条件下,执行具有特定日期范围的查询并获取输出并将这些值传递到具有基于日期的不同工作表的 Excel 工作簿,例如:工作表 1 应仅包含日期 1 值,工作表 2 应仅包含日期 2 值,所以直到给定的日期范围。 #

## 在下面的代码中,我只实现了对选定日期范围的查询,并仅用一张表传递到 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);

}
}
}

最佳答案

首先,我将通过分离代码来获取数据并将 Excel 文件写入不同的类来更改您的应用程序设计。
其次,获得结果集后,将数据存储在 Map 中。例如。 HashMap<Date, List<DbRow>>其中 DbRow 是一个带有字段 empname 的类, ename等等。这样您就可以将数据按 hiredate 分成列表。 .
之后,检查 map 值并将每个列表中的数据添加到新工作表中。

关于java - 如何根据查询输出传递的值在 Excel 中创建多个工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21017171/

相关文章:

sql - 将大型 sql 脚本分成较小的批处理有好处吗?

Excel VBA循环并以交互方式显示更改

java - 为什么我不能用 Java 写 "implements AClass"?

java - Android 4.3 果冻 bean 时间格式问题

java - JVM Bytecode,如何找到局部变量的类型?

mysql - 连接多个 SQL 表

java - org.apache.commons.codec.DecoderException : Odd number of characters

c# - 如何将数据从 Sql 对象复制到 C# 模型属性

vba - 使用来自多个工作表和不同列长度的数据在一张工作表上构建表格

c# - 从 Excel 单元格读取十进制值(在 C# 中)