java生成excel报表文件示例

此次简单的操作将数据从数据库导出生成excel报表以及将excel数据导入数据库

首先建立数据库的连接池:

package jdbc;

import java.io.FileInputStream;
import java.sql.Connection;
import java.util.Properties;

import org.apache.commons.dbcp.BasicDataSource;

public class BaseDAO {
  private static BasicDataSource ds;
  static{
    try {
      //1.读取配置文件conf.properties,采用java.util.Properties来读取
      Properties p=new Properties();
      //2.通过文件流读取并解析配置文件内容,本地数据库用的mysql,所以把配置文件mysql的配置放开,其他数据库配置注释
      p.load(new FileInputStream("src/jdbc.properties"));
      String driverName=p.getProperty("jdbc.driverClassName");//获取驱动名称
      String url=p.getProperty("jdbc.url");//获取数据库的url
      String user=p.getProperty("jdbc.username");//用户名
      String password=p.getProperty("jdbc.password");//密码
      int maxActive=Integer.parseInt(p.getProperty("jdbc.maxActive"));//获取最大连接数
      int maxWait=Integer.parseInt(p.getProperty("jdbc.maxWait"));//获取最大等待时间
      //3.创建一个连接池
      ds=new BasicDataSource();
      ds.setDriverClassName(driverName);//设置驱动名称
      ds.setUrl(url);//设置数据库地址
      ds.setUsername(user);//设置用户名
      ds.setPassword(password);//设置密码
      ds.setMaxActive(maxActive);//设置最大连接数
      ds.setMaxWait(maxWait);//设置最大等待时间
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  public static Connection getConnection() throws Exception {
    try {
      return ds.getConnection();
    } catch (Exception e) {
      System.out.println("连接数据库异常");
      throw e;
    }
  }

  public static void close(Connection conn){
    if(conn!=null){
      try {
        conn.close();
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  } 

}

生成与数据库相对应的java实体类:

package entity;

public class Test {
  private String a;
  private String b;
  private String c;
  private String d;
  private String e;
  private String f;
  private String g;
  private String h;
  private String i;
  private String j;
  public String getA() {
    return a;
  }
  public void setA(String a) {
    this.a = a;
  }
  public String getB() {
    return b;
  }
  public void setB(String b) {
    this.b = b;
  }
  public String getC() {
    return c;
  }
  public void setC(String c) {
    this.c = c;
  }
  public String getD() {
    return d;
  }
  public void setD(String d) {
    this.d = d;
  }
  public String getE() {
    return e;
  }
  public void setE(String e) {
    this.e = e;
  }
  public String getF() {
    return f;
  }
  public void setF(String f) {
    this.f = f;
  }
  public String getG() {
    return g;
  }
  public void setG(String g) {
    this.g = g;
  }
  public String getH() {
    return h;
  }
  public void setH(String h) {
    this.h = h;
  }
  public String getI() {
    return i;
  }
  public void setI(String i) {
    this.i = i;
  }
  public String getJ() {
    return j;
  }
  public void setJ(String j) {
    this.j = j;
  }

}

将excel表格数据插入数据库,先读取excel表格数据

package readExcel;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ReadExcel {

  /**
   * @param args
   * @throws IOException
   */

  public List<List<String>> readExcel(File file) throws IOException{
    List<List<String>> list=new ArrayList<List<String>>();
    if(!file.exists()){
      System.out.println("文件不存在");
    }else{
      InputStream fis=new FileInputStream(file);
      list=parseExcel(file,fis);
    }
    return list;
  }

  public List<List<String>> parseExcel(File file,InputStream fis) throws IOException{
    Workbook workbook=null;
    List<List<String>> list=new ArrayList<List<String>>();
    if(file.toString().endsWith("xls")){
      workbook=new HSSFWorkbook(fis);
    }else if(file.toString().endsWith("xlsx")){
      workbook=new XSSFWorkbook(fis);
    }else{
      System.out.println("文件不是excel文档类型 ,此处无法读取");
    }
    for(int i=0;i<workbook.getNumberOfSheets();i++){
      Sheet sheet=workbook.getSheetAt(i);
      if(sheet!=null){
        int lastRow=sheet.getLastRowNum();
        //获取表格中的每一行
        for(int j=0;j<=lastRow;j++){
          Row row=sheet.getRow(j);
          short firstCellNum=row.getFirstCellNum();
          short lastCellNum=row.getLastCellNum();
          List<String> rowsList=new ArrayList<String>();
          if(firstCellNum!=lastCellNum){
            //获取每一行中的每一列
            for(int k=firstCellNum;k<lastCellNum;k++){
              Cell cell=row.getCell(k);
              if(cell==null){
                rowsList.add("");
              }else{
                rowsList.add(chanegType(cell));
              }
            }
          }else{
            System.out.println("该表格只有一列");
          }
          list.add(rowsList);
        }

      }
    }
    return list;
  }

  public String chanegType(Cell cell){
    String result = new String();
    switch (cell.getCellType()) { //获取单元格的类型
    case HSSFCell.CELL_TYPE_NUMERIC:// 数字类型
      if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){ //如果是数值类型
        short format = cell.getCellStyle().getDataFormat(); //获取这个单元的类型对应的数值
        SimpleDateFormat sdf = null;
        if(format == 14 || format == 31 || format == 57 || format == 58){ //如果数值为14,31,57,58其中的一种
          //对应的日期格式为 2016-03-01这种形式,
          sdf = new SimpleDateFormat("yyyy-MM-dd");
          double value = cell.getNumericCellValue();
          Date date = org.apache.poi.ss.usermodel.DateUtil.getJavaDate(value);
          result = sdf.format(date);//得到yyyy-MM-dd这种格式日期
        }else if (format == 20 || format == 32) {
          //时间
          sdf = new SimpleDateFormat("HH:mm");
          double value = cell.getNumericCellValue();
          Date date = org.apache.poi.ss.usermodel.DateUtil.getJavaDate(value);
          result = sdf.format(date);//得到HH:mm
        } else {
          double value = cell.getNumericCellValue();
          CellStyle style = cell.getCellStyle();
          DecimalFormat dataformat = new DecimalFormat();
          String temp = style.getDataFormatString();
          // 单元格设置成常规
          if (temp.equals("General")) {
            dataformat.applyPattern("#");
          }
          result = dataformat.format(value); //得到单元格数值
        }
      }
      break;
    case HSSFCell.CELL_TYPE_STRING:// String类型
      result = cell.getRichStringCellValue().toString();
      break;
    case HSSFCell.CELL_TYPE_BLANK:
      result = "";
    default:
      result = "";
      break;
    }
    return result;
  }
}

将读取到的excel表格数据插入到数据库中去

package importdata;

import java.io.File;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.ArrayList;
import java.util.List;

import entity.Test;
import readExcel.ReadExcel;
import jdbc.BaseDAO;
public class inportData {

  public static void main(String[] args) throws Exception {
    // TODO Auto-generated method stub
    List<List<String>> list = new ArrayList<List<String>>();
    ReadExcel readExcel=new ReadExcel();
    File file=new File("d:/test.xlsx");
    list=readExcel.readExcel(file);

    Test test=new Test();
    Connection conn=BaseDAO.getConnection();
    PreparedStatement ps=null;
    int i=1;
    for(List<String> rowlist:list){
      if(rowlist!=null){
        test.setA(rowlist.get(0).toString());
        test.setB(rowlist.get(1).toString());
        test.setC(rowlist.get(2).toString());
        test.setD(rowlist.get(3).toString());
        test.setE(rowlist.get(4).toString());
        test.setF(rowlist.get(5).toString());
        test.setG(rowlist.get(6).toString());
        test.setH(rowlist.get(7).toString());
        test.setI(rowlist.get(8).toString());
        test.setJ(rowlist.get(9).toString());
        String sql="insert into TEST(A,B,C,D,E,F,G,H,I,J) values(?,?,?,?,?,?,?,?,?,?)";
        ps=conn.prepareStatement(sql);
        ps.setString(1,test.getA());
        ps.setString(2,test.getB());
        ps.setString(3,test.getC());
        ps.setString(4,test.getD());
        ps.setString(5,test.getE());
        ps.setString(6,test.getF());
        ps.setString(7,test.getG());
        ps.setString(8,test.getH());
        ps.setString(9,test.getI());
        ps.setString(10,test.getJ());
        int n=ps.executeUpdate();
        if(n!=1){
          System.out.println("数据插入数据库失败");
        }
        System.out.println("第"+i+"条数据插入成功");
        System.out.println();
        i++;
      }
    }

  }

}

将数据库中的数据查询出来并以excel表格的形式生成报表

package export;

import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import entity.Test;

import jdbc.BaseDAO;

public class Export {

  public static void createExcel(List<Test> list){
    FileOutputStream fos=null;
    Workbook workbook=new XSSFWorkbook();
    Sheet sheet=workbook.createSheet("测试文件");
    String[] title={"第一列","第二列","第三列","第四列","第五列","第六列","第七列","第八列","第九列","第十列"};
    Row row=sheet.createRow((short)0);
    int i=0;
    for(String s:title){
      Cell cell=row.createCell(i);
      cell.setCellValue(s);
      i++;
    }
    int j=1;
    for(Test t:list){
      //创建第二行
      Row rowData=sheet.createRow((short)j);
      //第一列数据
      Cell cell0=rowData.createCell((short)0);
      cell0.setCellValue(t.getA());
      //设置单元格的宽度
      sheet.setColumnWidth((short)0, (short)10000);
      //第二列数据
      Cell cell1=rowData.createCell((short)1);
      cell1.setCellValue(t.getB());
      //设置单元格的宽度
      sheet.setColumnWidth((short)0, (short)10000);
      //第三列数据
      Cell cell2=rowData.createCell((short)2);
      cell2.setCellValue(t.getC());
      //设置单元格的宽度
      sheet.setColumnWidth((short)0, (short)10000);
      //第四列数据
      Cell cell3=rowData.createCell((short)3);
      cell3.setCellValue(t.getD());
      //设置单元格的宽度
      sheet.setColumnWidth((short)0, (short)10000);
      //第五列数据
      Cell cell4=rowData.createCell((short)4);
      cell4.setCellValue(t.getE());
      //设置单元格的宽度
      sheet.setColumnWidth((short)0, (short)10000);
      //第六列数据
      Cell cell5=rowData.createCell((short)5);
      cell5.setCellValue(t.getF());
      //设置单元格的宽度
      sheet.setColumnWidth((short)0, (short)10000);
      //第七列数据
      Cell cell6=rowData.createCell((short)6);
      cell6.setCellValue(t.getG());
      //设置单元格的宽度
      sheet.setColumnWidth((short)0, (short)10000);
      //第八列数据
      Cell cell7=rowData.createCell((short)7);
      cell7.setCellValue(t.getH());
      //设置单元格的宽度
      sheet.setColumnWidth((short)0, (short)10000);
      //第九列数据
      Cell cell8=rowData.createCell((short)8);
      cell8.setCellValue(t.getI());
      //设置单元格的宽度
      sheet.setColumnWidth((short)0, (short)10000);
      //第十列数据
      Cell cell9=rowData.createCell((short)9);
      cell9.setCellValue(t.getJ());
      //设置单元格的宽度
      sheet.setColumnWidth((short)0, (short)10000);
      j++;
    }
    try {
      //导出数据库文件保存路径
      fos=new FileOutputStream("D:/export.xlsx");
      /*if(fos.toString().endsWith("xlsx")){
        workbook=new XSSFWorkbook();
      }else if(fos.toString().endsWith("xls")){
        workbook=new HSSFWorkbook();
      }*/
      //将工作簿写入文件
      workbook.write(fos);
      System.out.println("导出文件成功");
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      System.out.println("导出文件失败");
    }
  }
  public static void main(String[] args) throws Exception {
    //连接数据库
    Connection conn=BaseDAO.getConnection();
    PreparedStatement ps=null;
    String sql="select * from TEST";
    //执行sql语句
    ps=conn.prepareStatement(sql);
    //查询数据库之后得到的结果
    ResultSet rs=ps.executeQuery();
    List<Test> list=new ArrayList<Test>();
    //遍历查询结果
    while(rs.next()){
      Test test=new Test();
      test.setA(rs.getString("A"));
      test.setB(rs.getString("B"));
      test.setC(rs.getString("C"));
      test.setD(rs.getString("D"));
      test.setE(rs.getString("E"));
      test.setF(rs.getString("F"));
      test.setG(rs.getString("G"));
      test.setH(rs.getString("H"));
      test.setI(rs.getString("I"));
      test.setJ(rs.getString("J"));
      list.add(test);
    }
    createExcel(list);
  }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java实现把excel xls中数据转为可直接插入数据库的sql文件

    我的一贯风格,代码说明一切.. 废话不多说了,直接给大家贴代码了,具体代码如下所示: package Tools; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; im

  • python调用java模块SmartXLS和jpype修改excel文件的方法

    本文实例讲述了python调用java模块SmartXLS和jpype修改excel文件的方法.分享给大家供大家参考.具体实现方法如下: # -*- coding: utf8 -*- """ 使用java的模块SmartXLS和jpype修改excel 和xlrd,xlwt不同的是它可以生成和保持图表 """ from __future__ import print_function, division import os import jpyp

  • java简单解析xls文件的方法示例【读取和写入】

    本文实例讲述了java简单解析xls文件的方法.分享给大家供大家参考,具体如下: 读取: import java.io.*; import jxl.*; import jxl.write.*; import jxl.format.*; class Aa{ public static void main(String args[]) { try{ Workbook workbook = null; try { workbook = Workbook.getWorkbook(new File("d:

  • Java解析Excel文件并把数据存入数据库

    前段时间做一个小项目,为了同时存储多条数据,其中有一个功能是解析Excel并把其中的数据存入对应数据库中.花了两天时间,不过一天多是因为用了"upload"关键字作为URL从而导致总报同一个错,最后在同学的帮助下顺利解决,下面我把自己用"POI"解析的方法总结出来供大家参考(我用的是SpingMVC和hibernate框架). 1.web.xml中的配置文件 web.xml中的配置文件就按照这种方式写,只需要把"application.xml"换

  • java导出大批量(百万以上)数据的excel文件

    本文实例为大家分享了java导出百万以上数据的excel文件,供大家参考,具体内容如下 1.传统的导出方式会消耗大量的内存,2003每个sheet页最多65536条数据,2007每个sheet页可以达到100万条数据以上,2007会在生成Workbook时清理数据,所以2007导出量更大; 2.可以导出多个excel文件到某个目录中,然后打包下载; 3.导出excel格式的xml文件,这种方式可以分批导出数据,适用于大批量数据的导出,以下简单介绍这种方式: 代码如下: package com.e

  • java解析excel文件的方法

    建立工程前需要导入POI包.POI相关jar包下载地址:http://poi.apache.org/download.html 1.解析.xlsx后缀名的的EXCEL文件: package com.shuai.hello; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import org.apache.poi.hssf.usermodel.HSSFCell; imp

  • java实现把对象数组通过excel方式导出的功能

    一.导入相关jar包,pom依赖如下: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>RELEASE</version> </dependency> 二.开始撸代码 1.如果导出功能使用的比较多,可以将其做成一个工具类,对我下面贴出的代码进行改造 //结果返回的是写入的记录数(以下用的是自

  • JavaWeb使用POI操作Excel文件实例

    1.为项目添加POI POI官网链接 点进去之后下载(上边的是编译好的类,下边的是源代码) 解压文件夹,把下面三个文件复制到WebComtent>WEB-INF>lib文件夹下 再把这三个文件复制到Tomcat的lib文件夹下,否则Tomcat会因为找不到类而报错(这个地方郁闷了一上午) 读取".xls"格式使用  import org.apache.poi.hssf.usermodel.*;包的内容,例如:HSSFWorkbook 读取".xlsx"格

  • java使用POI操作excel文件

    一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Excel 95及以后的版本,即可操作后缀为 .xls 和 .xlsx两种格式的excel. POI全称 Poor Obfuscation Implementation,直译为"可怜的模糊实现",利用POI接口可以通过JAVA操作Microsoft office 套件工具的读写功能.官网:htt

  • java 文件大数据Excel下载实例代码

    java 文件大数据Excel下载实例代码 excel可以用xml表示.故可以以此来实现边写边下载文件 package com.tydic.qop.controller; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.I

  • java实现excel和txt文件互转

    话不多说,请看代码: import java.io.*; import jxl.*; import jxl.write.*; //用java将txt数据导入excel public class CreateXLS { public static void main(String args[]) { try { //打开文件 WritableWorkbook book= Workbook.createWorkbook(new File("测试.xls")); //生成名为"第一

  • Java Web使用POI导出Excel的方法详解

    本文实例讲述了Java Web使用POI导出Excel的方法.分享给大家供大家参考,具体如下: 采用Spring mvc架构: Controller层代码如下 @Controller public class StudentExportController{ @Autowired private StudentExportService studentExportService; @RequestMapping(value = "/excel/export") public void

  • java 中JXL操作Excel实例详解

    JXL操作Excel 前言: jxl是一个韩国人写的java操作excel的工具, 在开源世界中,有两套比较有影响的API可 供使用,一个是POI,一个是jExcelAPI.其中功能相对POI比较弱一点.但jExcelAPI对中文支持非常好,API是纯Java的, 并不 依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件. 另外需要说明的是,这套API对图形和图表的支持很有限,而且 仅仅识别PNG格式. 使用如下: 搭建环境 将下载后的文件解包,得到jxl.jar

随机推荐