Java 使用ApachePOI将数据库查询结果导出到excel
我通过一些示例代码使用ApachePOI将数据导出到excel。但是,我不确定如何将数据库查询结果导出到excel文件。我知道我们必须按行创建单元格,然后为单元格设置值。但是我在结果集中已经有了数据,必须将其导出到excel文件中。有人能给我一个小的/简单的代码来做同样的事情吗 谢谢 Try:Reference 示例人员表:Java 使用ApachePOI将数据库查询结果导出到excel,java,database,excel,apache-poi,Java,Database,Excel,Apache Poi,我通过一些示例代码使用ApachePOI将数据导出到excel。但是,我不确定如何将数据库查询结果导出到excel文件。我知道我们必须按行创建单元格,然后为单元格设置值。但是我在结果集中已经有了数据,必须将其导出到excel文件中。有人能给我一个小的/简单的代码来做同样的事情吗 谢谢 Try:Reference 示例人员表: +------------------+ | NAME | ADDRESS | +------------------+ | Jhone | USA |
+------------------+
| NAME | ADDRESS |
+------------------+
| Jhone | USA |
| Smith | USA |
+------------------+
示例程序
Workbook wb = new HSSFWorkbook();
Sheet personSheet = wb.createSheet("PersonList");
Row headerRow = personSheet.createRow(0);
Cell nameHeaderCell = headerRow.createCell(0);
Cell addressHeaderCell = headerRow.createCell(1);
String sql = "select name, address from person_table";
PrepareStatement ps = connection.prepareStatement(sql);
ResultSet resultSet = ps.executeQuery();
int row = 1;
while(resultSet.next()) {
String name = resultSet.getString("name");
String address = resultSet.getString("address");
Row dataRow = personSheet.createRow(row);
Cell dataNameCell = dataRow.createCell(0);
dataNameCell.setCellValue(name);
Cell dataAddressCell = dataRow.createCell(1);
dataAddressCell.setCellValue(address);
row = row + 1;
}
String outputDirPath = "D:/PersonList.xls";
FileOutputStream fileOut = new FileOutputStream(outputDirPath);
wb.write(fileOut);
fileOut.close();
尝试:参考
示例人员表:
+------------------+
| NAME | ADDRESS |
+------------------+
| Jhone | USA |
| Smith | USA |
+------------------+
示例程序
Workbook wb = new HSSFWorkbook();
Sheet personSheet = wb.createSheet("PersonList");
Row headerRow = personSheet.createRow(0);
Cell nameHeaderCell = headerRow.createCell(0);
Cell addressHeaderCell = headerRow.createCell(1);
String sql = "select name, address from person_table";
PrepareStatement ps = connection.prepareStatement(sql);
ResultSet resultSet = ps.executeQuery();
int row = 1;
while(resultSet.next()) {
String name = resultSet.getString("name");
String address = resultSet.getString("address");
Row dataRow = personSheet.createRow(row);
Cell dataNameCell = dataRow.createCell(0);
dataNameCell.setCellValue(name);
Cell dataAddressCell = dataRow.createCell(1);
dataAddressCell.setCellValue(address);
row = row + 1;
}
String outputDirPath = "D:/PersonList.xls";
FileOutputStream fileOut = new FileOutputStream(outputDirPath);
wb.write(fileOut);
fileOut.close();
对于HSSF格式,可以使用管道将数据库查询结果作为XML传递给POI序列化程序 这样做的优点是不会将数据库查询与POI API的调用纠缠在一起
我正在调查升级序列化程序以处理XSSF格式以克服最终speadsheet中64k行数限制所需的工作量。对于HSSF格式,可以使用管道将数据库查询结果作为XML传递给POI序列化程序 这样做的优点是不会将数据库查询与POI API的调用纠缠在一起 我正在调查升级序列化程序以处理XSSF格式以克服最终speadsheet中64k行数限制所需的工作量。如果您正在使用(或可以使用)SqlResultSet,则此解决方案适合您:
公共类ExcelReportExporter实现ReportExporter{
_行='_'下的私有静态最终字符;
私有静态最终字符空间=“”;
私有静态最终字符串后缀=“.xlsx”;
私有静态最终int TITLE_ROW=0;
私有静态最终整型标题_行=3;
私有静态最终整数结果第一行=标题行+1;
私有静态final int FIRST_COLUMN_INDEX=0;
@注入
查询发生器;
@注入
询问执行人;
@凌驾
公共文件导出(reportToExport)引发DraggerExportException{
字符串reportName=generateReportName(reportToExport);
SqlRowSet results=executor.executeQuery(生成器.generate(reportToExport.getQuery());
SqlRowSetMetaData resultsMetaData=results.getMetaData();
尝试(工作簿=新XSSFWorkbook();){
工作表=工作簿.createSheet(reportName);
createTitle(reportToExport、工作簿、工作表);
createHeaderRowFromMetadata(结果元数据、工作簿、工作表);
int excelRowIndex=createDataTableFromResultset(结果、结果元数据、工作簿、工作表);
setTableAutoFilter(结果元数据、工作表、excelRowIndex);
saveExcelFile(报告名、工作簿);
autoSizeColumns(结果元数据,工作表);
}捕获(IOE异常){
抛出新的DraggerExportException(“无法创建导出文件”,e);
}
返回新文件(reportName);
}
私有字符串generateReportName(reportToExport){
return reportToExport.getName().replace(空格,在_行下)+在_行下+LocalDate.now()+后缀;
}
私有void autoSizeColumns(SqlRowSetMetaData结果元数据,工作表){
对于(int i=FIRST_COLUMN_INDEX;i
如果您正在使用(或可以使用)SqlResultSet,则此解决方案适合您:
公共类ExcelReportExporter实现ReportExporter{
_行='_'下的私有静态最终字符;
私有静态最终字符空间=“”;
私有静态最终字符串后缀=“.xlsx”;
私有静态最终int TITLE_ROW=0;
私有静态最终整型标题_行=3;
私有静态最终整数结果第一行=标题行+1;
私有静态final int FIRST_COLUMN_INDEX=0;
@注入
查询发生器;
@注入
询问执行人;
@凌驾
公共文件导出(reportToExport)引发DraggerExportException{
字符串reportName=generateReportName(reportToExport);
SqlRowSet results=executor.execu