【问题标题】:How to export JDBC template result to excel sheet如何将 JDBC 模板结果导出到 Excel 工作表
【发布时间】:2015-07-21 03:07:13
【问题描述】:

PersonDAO.java:

public List<Map<String, Object>> searchPersons(Person person)  
    String sql = "SELECT * FROM PERSON";
    List<Map<String, Object>> result = jdbcTemplate.queryForList(sql);
    return result;
}

如何将result中的数据转换成excel表格下载。

尝试使用 Apache POI:

Workbook workbook = new HSSFWorkbook();
Sheet sheet = workbook.createSheet("Person Detail");

Object[][] persons = {
    {"PersonNAmeA", 1001},
    {"PersonNAmeB", 1002},
    {"PersonNAmeC", 1003}, 
};

int rowCount = 0;

for (Object[] person : persona) {
Row row = sheet.createRow(++rowCount);

int columnCount = 0;

for (Object field : person) {
    Cell cell = row.createCell(++columnCount);
    if (field instanceof String) {
        cell.setCellValue((String) field);
    } else if (field instanceof Integer) {
        cell.setCellValue((Integer) field);
    }
}

}


try (FileOutputStream outputStream = new FileOutputStream("PersonDetail.xlsx")) {
workbook.write(outputStream);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

没有错误,但尚未创建 PersonDetail.xlsx。代码中可能有什么问题。

任何人都可以帮助解决这个问题。 谢谢

【问题讨论】:

  • 如何将结果集写入平面文件,例如CSV 文件?不需要 API。 Excel 无论如何都可以将文本转换为列
  • @jmcg。感谢您的建议。我没试过,只是写入一个csv文件也会以Excel文件打开?
  • 是的,Excel 可以打开一个 csv 文件。然后,您可以使用 excel 的文本到列功能将每个数据排列到相应的列中。看看这个链接superuser.com/questions/407082/…
  • 谢谢。我正在尝试使用 apache poi,并且可以继续到现在。我也会试试这个。

标签: java sql excel oracle spring-boot


【解决方案1】:

您可以使用Apache POIJexcelAPI。后者是更轻量级的解决方案。这里有一个很好的tutorial如何生成excel表格。

您甚至可以生成一个 HTML 表格并使用 HTTP 标头提供它:

Content-Type: application/msexcel
Content-Disposition: attachment; filename=NAMEOFWORKSHEET.xls

然后打开,浏览器会提示将页面另存为Excel文档。

How to format data in html

如果您不需要格式化数据,请考虑写入纯 CSV 流。

【讨论】:

  • 感谢康斯坦丁巴甫洛夫。这是否会为用户创建一个视图。我有一个导出按钮(在用户从 UI 中的表中选择多行之后),它可以获取有关用户选择的数据的更多信息(包含个人信息),并且必须将其导出并下载为 excel。同时我尝试了 Apache poi,编辑了问题...
  • 不,它没有。您需要创建一个控制器和一个可选的视图。您应该从控制器调用服务/DAO,并在控制器中创建一个简单的 html 表或将其委托给视图。
  • 谢谢。可以求最新版的JexcelAPI maven依赖吗?
  • 非常感谢。我会试试这个解决方案
猜你喜欢
  • 2013-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多