快捷搜索:  汽车  科技

poi导出excel内容乱码(使用POI把查询到的数据表数据导出到Excel中)

poi导出excel内容乱码(使用POI把查询到的数据表数据导出到Excel中)

一、需求

我们会遇到开发任务:
经理:小王 你来做一下把数据库里的数据导出到Excel中 一个表是一个sheet 不要一个表一个Excel.
小王:好的 经理.(内心一脸懵逼)

二、前期准备

首先我们采用Apache的POI来实现Excel的导出功能
导入直通车---> 使用POI hutool实现导入Excel
我们把maven依赖先准备好:

<!-- 导出为Excel所需依赖 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.9</version> </dependency> <!-- 工具包 --> <dependency> <groupId>commons-dbutils</groupId> <artifactId>commons-dbutils</artifactId> <version>1.6</version> </dependency> 三、代码演示

  • 首先我们先使用JDBC结合Dbutils把要导出的数据库表数据准备好

/** * 利用jdbc来把要导出的数据表查询出来 * @return */ public static Map<String List<Map<String Object>>> getDataSource(){ Connection con = null; Statement sta = null; try { //1.注册驱动==》告诉指挥部有哪些造桥人可以调遣 Class.forName("com.mysql.cj.jdbc.Driver"); //这里是mysql为例 oracle的url ---"jdbc:oracle:thin:@localhost:1521:orcl" String url = "jdbc:mysql://127.0.0.1:3306/test"; String user = "root"; String pwd = "root"; //2.获得链接==》指挥部根据传入类型 调遣不同的造桥的人造桥 con = DriverManager.getConnection(url user pwd); //3.创建Statement对象===》造车 sta = con.createStatement(); //4.执行SQL ==》运行SQL 有结果返回 String sql = "select * from user"; String sql1 = "select * from test"; //第五步处理结果还可以引入Dbutils工具包来解析结果 QueryRunner queryRunner = new QueryRunner(); //存放查询出来的数据 key为表名 value为查询出来的表字段和对应的值 Map<String List<Map<String Object>>> mapMap = new HashMap<>(); List<Map<String Object>> query = queryRunner.query(con sql new MapListHandler()); List<Map<String Object>> query1 = queryRunner.query(con sql1 new MapListHandler()); //暂时以两张表为例 多张一个意思 mapMap.put("user" query); mapMap.put("test" query1); return mapMap; } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); return null; }finally { //6.关闭资源 DbUtils.closeQuietly(sta);//Dbutils封装了关闭方法 DbUtils.closeQuietly(con); } }

  • 接下来我们把这些数据库表数据导出到Excel

/** * 把准备好的数据库表数据导出到本地Excel中 */ public boolean exportExcel() { //拿到数据库表的所有信息 开始导出 Map<String List<Map<String Object>>> source = getDataSource(); //创建一个Excel模板 Workbook workbook = new XSSFWorkbook(); for (Map.Entry<String List<Map<String Object>>> mapTop :source.entrySet()) { //获取sheet的名字 以表名来命名 String sheetName = mapTop.getKey(); //创建sheet Sheet sheet = workbook.createSheet(sheetName); //创建第一行 Row header = sheet.createRow(0); //从第二行开始 --来控制插入的行数 int rowSize = 1; //便利每个表的数据 for (Map<String Object> button : mapTop.getValue()){ //控制第一行的列 int columnSize = 0; //给第一行表头赋值 for (String string :button.keySet()){ //把表头添加上 header.createCell(columnSize ).setCellValue(string); } //控制从第二行开始插入数据的列 int valueSize = 0; //创建第二行 每添加完一行 1 Row data = sheet.createRow(rowSize ); //从第二行开始都是数据 for (Object object : button.values() ){ //防止有的列为空 if (object != null) { data.createCell(valueSize ).setCellValue(object.toString()); }else { data.createCell(valueSize ).setCellValue(""); } } } } try { File file = new File("E:/template/数据库表数据.xlsx"); if (file.exists()){ file.delete();//存在就删除 } //保存到本地 FileOutputStream fos = new FileOutputStream("E:/template/数据库表数据.xlsx"); workbook.write(fos); fos.close(); //存在就代表成功 return file.exists(); } catch (Exception e) { e.printStackTrace(); return false; } } 四、结果截图

poi导出excel内容乱码(使用POI把查询到的数据表数据导出到Excel中)(1)

在这里插入图片描述

五、总结

这样就实现了数据库表的导出 有什么疑问留言哦 谢谢大家的观看!!!

猜您喜欢: