转载:http://blog.csdn.net/ink4t/article/details/77150183
1. 前言:
在开发过程中往往少不了自动生成excel,比如学校教务系统,医疗系统,公司财务或者是公司员工的工资预览表都会使用。
2. 准备阶段:
1、Java开发环境
2、所需要的jar包:
(1)MySQL-connector-java-5.1.12-bin.jar
(2)poi-3.17-beta1.jar
这里提供了相关的jar包链接:
链接:http://pan.baidu.com/s/1dFeVOHj 密码:sgl1
3. 实例
3.1 通过java生成Excel文件,并且能添加内容进去
package cn.ink.excel; import java.io.FileOutputStream; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Workbook; public class FromDbToExcelTest01 { public static void main(String[] args) throws Exception { // 建立一个Excel Workbook book = new HSSFWorkbook(); // 在对应的Excel中建立一个分表 Sheet sheet1 =(Sheet) book.createSheet("分表1"); // 设置相应的行(初始从0开始) Row row =sheet1.createRow(0); // 在所在的行设置所在的单元格(相当于列,初始从0开始,对应的就是A列) Cell cell = row.createCell(0); // 写入相关数据到设置的行列中去。 cell.setCellValue("相关数据"); // 保存到计算机相应路径 book.write( new FileOutputStream("D://a.xls")); } }
3.2 读出对应数据库表中的内容
import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.util.ArrayList; import java.util.List; import com.mysql.jdbc.Connection; import com.mysql.jdbc.Statement; public class Test03 { //TODO 需要将url\用户名\密码修改为自己的 public final static String url = "jdbc:mysql://127.0.0.1:3306/blog"; public final static String user = "root"; public final static String password = "123456"; public static void main(String[] args) { try { Class.forName("com.mysql.jdbc.Driver"); // 连接数据库 Connection con = (Connection) DriverManager.getConnection(url, user, password); DatabaseMetaData dbmt = con.getMetaData(); // 拿到所有的blog数据库中所有信息 // TODO 需要将blog修改为自己的数据库 ResultSet rs = dbmt.getTables("blog", "blog", null, new String[] { "TABLE", "VIEW" }); List<String> tablenames = new ArrayList<String>(); while (rs.next()) { String tablename = rs.getString("TABLE_NAME"); tablenames.add(tablename); } for (String tablename : tablenames) { System.out.println(tablename + "表:"); String sql = "select * from " + tablename; Statement st = (Statement) con.createStatement(); ResultSet dataRs = st.executeQuery(sql); ResultSetMetaData rsmt = dataRs.getMetaData(); // 拿到列数 int colnums = rsmt.getColumnCount(); for (int i = 1; i <= colnums; i++) { // 拿到表头信息 String colName = rsmt.getColumnName(i); System.out.print(colName + "\t"); } System.out.println(); while (dataRs.next()) { for (int i = 1; i <= colnums; i++) { // 拿到表信息 System.out.print(dataRs.getString(i) + "\t"); } System.out.println(); } } con.close(); } catch (Exception e) { e.printStackTrace(); } } }
3.3 将指定数据库中指定数据表导出到Excel中
import java.io.FileOutputStream; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; 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 com.mysql.jdbc.Connection; import com.mysql.jdbc.Statement; public class FromOneSheetToExcel { //TODO 需要将url\用户名\密码修改为自己的 public final static String url = "jdbc:mysql://127.0.0.1:3306"; // 数据库URL public final static String user = "root"; // 数据库用户名 public final static String password = "123456"; // 数据库密码 // 把数据库单张表信息导入到Excel表中 public static void main(String[] args) throws Exception { // 架子啊数据库驱动 Class.forName("com.mysql.jdbc.Driver"); // 连接数据库 Connection con = (Connection) DriverManager.getConnection(url, user, password); // 创建Excel表。 Workbook book = new HSSFWorkbook(); // DatabaseMetaData dbmt = con.getMetaData(); // 获得blog数据库 //TODO 需要将blog修改为你指定的数据库 // ResultSet rs = dbmt.getTables("blog", "blog", null, new String[] { // "TABLE", "VIEW" }); // 设置要转化为Excel的表 //TODO 需要将Table_Name修改为当前数据库中你想导出的数据表 String Table_Name = "team"; // while (rs.next()) { // if ("team".equals(rs.getString("TABLE_NAME"))) { // Table_Name = "team"; // break; // } // } // 在当前Excel创建一个子表 Sheet sheet = book.createSheet(Table_Name); Statement st = (Statement) con.createStatement(); // 创建sql语句,对team进行查询所有数据 String sql = "select * from blog." + Table_Name; ResultSet rs = st.executeQuery(sql); // 设置表头信息(写入Excel左上角是从(0,0)开始的) Row row1 = sheet.createRow(0); ResultSetMetaData rsmd = rs.getMetaData(); int colnum = rsmd.getColumnCount(); for (int i = 1; i <= colnum; i++) { String name = rsmd.getColumnName(i); // 单元格 Cell cell = row1.createCell(i - 1); // 写入数据 cell.setCellValue(name); } // 设置表格信息 int idx = 1; while (rs.next()) { // 行 Row row = sheet.createRow(idx++); for (int i = 1; i <= colnum; i++) { String str = rs.getString(i); // 单元格 Cell cell = row.createCell(i - 1); // 写入数据 cell.setCellValue(str); } } // 保存 book.write(new FileOutputStream("D://" + Table_Name + ".xls")); } }