【工具类】【JXL】excel-->mysql-->excel

package com.wfg.excel;

import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

/**
* JXL 从excel导入数据到mysql 和 从mysql导出数据到excel 的工具类
* 
* @author sf
*
* 2016年8月24日 下午11:00:41
*/
public class JXLUtil {

/**
* 
* @param excelFilePath  excel文件路径
* @param sheetName 第一个工作表名称
* @param cols 对导出的excel的列进行命名的数组
* @param sql JDBC执行的sql查询语句
* @throws Exception
*/

public static void toExcel(String excelFilePath, String sheetName, String[] cols, String sql) throws Exception {

    Connection con = null;
    PreparedStatement ps = null;
    Statement st = null;
    ResultSet rs = null;

    con = JdbcUtil.getConnection();

    // 对于大表,使用setFetchSize进行每次多行读取
    ps = (PreparedStatement) con.prepareStatement(sql, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
    ps.setFetchSize(Integer.MIN_VALUE);
    ps.setFetchDirection(ResultSet.FETCH_REVERSE);
    rs = ps.executeQuery();

    File excelFile = new File(excelFilePath);

    if (!excelFile.exists()) {
      excelFile.getParentFile().mkdirs();
    }

    // 创建输出Excel
    WritableWorkbook book = Workbook.createWorkbook(excelFile);
    // 创建工作sheet
    WritableSheet sheet = book.createSheet(sheetName, 0);
    // 传入 String[] clos 作为excel的第一行
    for (int i = 0; i < cols.length; i++) {
      // Label的坐标(column,row,content)
      Label label = new Label(i, 0, cols[i]);// 0是第一行
      sheet.addCell(label);
    }

    int j = 0;
    while (rs.next()) {
      j++;// 表示行
      for (int i = 0; i < cols.length; i++) {
        // Label的坐标(column,row,content)
        sheet.addCell(new Label(i, j, rs.getString(i + 1)));
      }
    }
    book.write();
    book.close();

    System.out.println("ok....");

    JdbcUtil.closeResource(con, st, rs);
  }

/**
* 
* @param excelFilePath excel文件路径
* @param sheetName 第一个工作表名称
* @param cols 查询出的列数
* @param sql JDBC执行的sql查询语句
* @throws Exception
*/
public static void toExcel(String excelFilePath, String sheetName, int cols, String sql) throws Exception {
    Connection con = null;
    PreparedStatement ps = null;
    Statement st = null;
    ResultSet rs = null;

    con = JdbcUtil.getConnection();

    // 对于大表,使用setFetchSize进行每次多行读取
    ps = (PreparedStatement) con.prepareStatement(sql, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
    ps.setFetchSize(Integer.MIN_VALUE);
    ps.setFetchDirection(ResultSet.FETCH_REVERSE);
    rs = ps.executeQuery();

    File excelFile = new File(excelFilePath);

    if (!excelFile.exists()) {
      excelFile.getParentFile().mkdirs();
    }

    // 创建输出Excel
    WritableWorkbook book = Workbook.createWorkbook(excelFile);
    // 创建工作sheet
    WritableSheet sheet = book.createSheet(sheetName, 0);

    int j = 0;
    while (rs.next()) {
      for (int i = 0; i < cols; i++) {
      // Label的坐标(column,row,content)
      sheet.addCell(new Label(i, j, rs.getString(i + 1)));
      }
      j++;// 表示行
    }

    book.write();
    book.close();
    System.out.println("ok....");
    JdbcUtil.closeResource(con, st, rs);
  }

/**
* 
* @param excelFilePath
* @param tableName 使用excel的第一行数据进行建表
* @throws Exception
*/

 public static void fromExcel(String excelFilePath, String tableName) throws Exception {

    Connection conn = JdbcUtil.getConnection();
    Statement st = conn.createStatement();

    // 创建读入流
    Workbook book = Workbook.getWorkbook(new FileInputStream(excelFilePath));
    // 默认获取第一张sheet表
    Sheet sheet = book.getSheet(0);
    // 获取总行数
    int rowSize = sheet.getRows();
    // 获取总列数
    int cellSize = sheet.getColumns();
    // 创建数组,存储每行的数据
    String[] val = new String[cellSize];

    // 进入循环读取excel文件
    for (int j = 0; j < rowSize; j++) {
      for (int i = 0; i < cellSize; i++) {
        Cell cell = sheet.getCell(i, j);// 坐标是 (column,row)
        val[i] = cell.getContents();// 把每行的数据存储到数组里
      }

      ///////////////////////// 取第一行数据进行建表
      if (j == 0) {
        String sql = "create table " + tableName + "(";

        for (int k = 0; k < cellSize; k++) {

          if (k == val.length - 1) {
            sql += val[k] + " varchar(255))";
          } else {
            sql += val[k] + " varchar(255),";
          }
        }
        System.out.println(sql);
        st.executeUpdate(sql);
      } else {

        String sql = "insert into " + tableName + " values('";

        for (int k = 0; k < val.length; k++) {

          if (k == val.length - 1) {
            sql += val[k] + "')";
          } else {
            sql += val[k] + "','";
          }
        }
        System.out.println(sql);
        st.executeUpdate(sql);
      }
    }
    // 关流
    JdbcUtil.closeResource(conn, st);
  } /** * * @param excelFilePath * @param tableName * @param cols 使用给定的数组名称进行建表 * @throws Exception */ public static void fromExcel(String excelFilePath, String tableName, String[] cols) throws Exception {     Connection conn = JdbcUtil.getConnection();     Statement st = conn.createStatement();     // 创建读入流     Workbook book = Workbook.getWorkbook(new FileInputStream(excelFilePath));     // 默认获取第一张sheet表     Sheet sheet = book.getSheet(0);     // 获取总行数     int rowSize = sheet.getRows();     // 获取总列数     int cellSize = sheet.getColumns();     // 创建数组,存储每行的数据     String[] val = new String[cellSize];     ///////////////////////////////////////////////////////// 建表     String sql = "create table " + tableName + "(";     for (int k = 0; k < cols.length; k++) {       if (k == cols.length - 1) {         sql += cols[k] + " varchar(255))";       } else {         sql += cols[k] + " varchar(255),";       }     }     System.out.println(sql);     st.executeUpdate(sql);     ///////////////////////////////////////////////////////     // 进入循环读取excel文件     for (int j = 0; j < rowSize; j++) {       for (int i = 0; i < cellSize; i++) {         Cell cell = sheet.getCell(i, j);// 坐标是 (column,row)         val[i] = cell.getContents();// 把每行的数据存储到数组里       }       sql = "insert into " + tableName + " values('";       for (int k = 0; k < val.length; k++) {         if (k == val.length - 1) {           sql += val[k] + "')";         } else {           sql += val[k] + "','";         }       }       System.out.println(sql);       st.executeUpdate(sql);     }     // 关流     JdbcUtil.closeResource(conn, st);   } }

  

原文地址:https://www.cnblogs.com/vmkash/p/5805026.html