`

POI实现数据导入导出操作初级阶段

阅读更多
场景:做企业级的应用的时候报表数据导出、导入是很常见的,为此有必要将其作为工作中指导的一部分,以资学习;唯求进步.
1、使用MySQl实现POI数据导出
1.1建立数据库连接
package com.boonya.poi;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DBConnection
{
	private final String dbUrl = "jdbc:mysql://localhost:3306/notebook";
	private final String dbDriver = "com.mysql.jdbc.Driver";
	private final String username = "root";
	private final String password = "root";
	private Connection con;

	public DBConnection()
	{
		try
		{
			Class.forName(dbDriver);
			con = DriverManager.getConnection(dbUrl, username, password);
		} catch (Exception e)
		{
			e.printStackTrace();
		}
	}

	public Connection getDB()
	{
		return con;
	}

	public void closeDb(ResultSet rs, PreparedStatement ps)
	{
		if (rs != null)
		{
			try
			{
				rs.close();
			} catch (SQLException e)
			{

				e.printStackTrace();
			}
		}
		if (ps != null)
		{
			try
			{
				ps.close();
			} catch (SQLException e)
			{
				e.printStackTrace();
			}
		}
	}
}

1.2编写mysql数据导出对象实例
public class Trainee
{
    private Integer Id;      //选课号
    private String studyNo;  //学号
    private String name;     //姓名 
    private String college;  //学院
    private Integer courseId; //课程号 
    private String courseName;//课程名 
    private float score;      //成绩
    //getter,setter.....
}

1.3编写mysql数据导出操作
package com.boonya.poi;

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

/**
 * Mysql数据库数据导出 
 * <li>文件名称: MySql2Excel</li>
 * <li>文件描述: $</li> 
 * <li> 内容摘要: 包括模块、函数及其功能的说明</li>
 * <li>完成日期:2013-8-12</li>
 * <li>修改记录1:boonyachengdu@gmail.com </li>
 * 
 */
public class MySqlExcel
{

	@SuppressWarnings("deprecation")
	public MySqlExcel() throws Exception
	{
		Connection con = null;
		DBConnection db = new DBConnection();
		con = db.getDB();
		String sql = "select * from trainee";
		ResultSet rs = con.createStatement().executeQuery(sql);
		// 获取总列数
		int CountColumnNum = rs.getMetaData().getColumnCount();
		int i = 1;
		// 创建Excel文档
		HSSFWorkbook wb = new HSSFWorkbook();
		// sheet 对应一个工作页
		HSSFSheet sheet = wb.createSheet("trainee_table_data");
		HSSFRow firstrow = sheet.createRow(0); // 下标为0的行开始
		HSSFCell[] firstcell = new HSSFCell[CountColumnNum];
		String[] names = new String[CountColumnNum];
		names[0] = "ID";
		names[1] = "StudyNo";
		names[2] = "Name";
		names[3] = "Gender";
		names[4] = "Grade";
		for (int j = 0; j < CountColumnNum; j++)
		{
			firstcell[j] = firstrow.createCell((short) j);
			firstcell[j].setCellValue(new HSSFRichTextString(names[j]));
		}
		while (rs.next())
		{
			// 创建电子表格的一行
			HSSFRow row = sheet.createRow(i); // 下标为1的行开始
			for (int j = 0; j < CountColumnNum; j++)
			{
				// 在一行内循环
				HSSFCell cell = row.createCell((short) j);
				// 设置表格的编码集,使支持中文
				// // 先判断数据库中的数据类型
				// 将结果集里的值放入电子表格中
				cell.setCellValue(new HSSFRichTextString(rs.getString(j + 1)));
			}
			i++;
		}
		// 创建文件输出流,准备输出电子表格
		OutputStream out = new FileOutputStream("E:\\person.xls");
		wb.write(out);
		out.close();
		System.out.println("Export success!");
		rs.close();
		con.close();
	}

	public static void main(String[] args)
	{
		try
		{
			@SuppressWarnings("unused")
			MySqlExcel excel = new MySqlExcel();
		} catch (Exception e)
		{
			e.printStackTrace();
		}
	}
}

2、数据导入测试
package com.boonya.poi;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

@SuppressWarnings("serial")
public class TraineeImportExample implements Serializable
{
	//pattern singleton--------start
	static final TraineeImportExample INSTANCE = new TraineeImportExample();
	
	private TraineeImportExample()
	{
		//private的构造函数用于避免外界直接使用new来实例化对象
	}

	/**
	 * readResolve方法应对单例对象被序列化时候
	 */
	private Object readResolve()
	{
		return getInstance();
	}

	public static TraineeImportExample getInstance()
	{
		return TraineeImportExample.INSTANCE;
	}
	//pattern singleton--------end
	
	/**
	 * 
	 * @param xls
	 *            XlsDto实体类的一个对象
	 * @throws Exception
	 *             在导入Excel的过程中抛出异常
	 */
	public void xlsExportExcel(List<Trainee> xls) throws Exception
	{
		// 获取总列数
		int CountColumnNum = xls.size();
		// 创建Excel文档
		HSSFWorkbook hwb = new HSSFWorkbook();
		Trainee xlsDto = null;
		// sheet 对应一个工作页
		HSSFSheet sheet = hwb.createSheet("Trainee_Score");
		HSSFRow firstrow = sheet.createRow(0); // 下标为0的行开始
		HSSFCell[] firstcell = new HSSFCell[CountColumnNum];
		String[] names = new String[CountColumnNum];
		names[0] = "StudyNo";
		names[1] = "Name";
		names[2] = "College";
		names[3] = "CourseName";
		names[4] = "Score";
		for (int j = 0; j < CountColumnNum; j++)
		{
			firstcell[j] = firstrow.createCell(j);
			firstcell[j].setCellValue(new HSSFRichTextString(names[j]));
		}
		for (int i = 0; i < xls.size(); i++)
		{
			// 创建一行
			HSSFRow row = sheet.createRow(i + 1);
			// 得到要插入的每一条记录
			xlsDto = xls.get(i);
			for (int colu = 0; colu <= 4; colu++)
			{
				// 在一行内循环
				HSSFCell xh = row.createCell(0);
				xh.setCellValue(xlsDto.getStudyNo());
				HSSFCell xm = row.createCell(1);
				xm.setCellValue(xlsDto.getName());
				HSSFCell yxsmc = row.createCell(2);
				yxsmc.setCellValue(xlsDto.getCollege());
				HSSFCell kcm = row.createCell(3);
				kcm.setCellValue(xlsDto.getCourseName());
				HSSFCell cj = row.createCell(4);
				cj.setCellValue(xlsDto.getScore());
			}
		}
		// 创建文件输出流,准备输出电子表格
		OutputStream out = new FileOutputStream("POIExcel/test.xls");
		hwb.write(out);
		out.close();
		System.out.println("Export success!");
	}

	/**
	 * 得到Excel表中的值
	 * 
	 * @param hssfCell
	 *            Excel中的每一个格子
	 * @return Excel中每一个格子中的值
	 */
	@SuppressWarnings("static-access")
	public String getValue(HSSFCell hssfCell)
	{
		if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN)
		{
			// 返回布尔类型的值
			return String.valueOf(hssfCell.getBooleanCellValue());
		} else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC)
		{
			// 返回数值类型的值
			return String.valueOf(hssfCell.getNumericCellValue());
		} else
		{
			// 返回字符串类型的值
			return String.valueOf(hssfCell.getStringCellValue());
		}
	}

	/**
	 * 读取xls文件内容
	 * 
	 * @return List<XlsDto>对象
	 * @throws IOException
	 *             输入/输出(i/o)异常
	 */
	public List<Trainee> readXls() throws IOException
	{
		InputStream is = new FileInputStream("pldrxkxxmb.xls");
		HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
		Trainee xlsDto = null;
		List<Trainee> list = new ArrayList<Trainee>();
		// 循环工作表Sheet
		for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++)
		{
			HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
			if (hssfSheet == null)
			{
				continue;
			}
			// 循环行Row
			for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++)
			{
				HSSFRow hssfRow = hssfSheet.getRow(rowNum);
				if (hssfRow == null)
				{
					continue;
				}
				xlsDto = new Trainee();
				// 循环列Cell
				// 0学号 1姓名 2学院 3课程名 4 成绩
				// for (int cellNum = 0; cellNum <=4; cellNum++) {
				HSSFCell xh = hssfRow.getCell(0);
				if (xh == null)
				{
					continue;
				}
				xlsDto.setStudyNo(getValue(xh));
				HSSFCell xm = hssfRow.getCell(1);
				if (xm == null)
				{
					continue;
				}
				xlsDto.setName(getValue(xm));
				HSSFCell yxsmc = hssfRow.getCell(2);
				if (yxsmc == null)
				{
					continue;
				}
				xlsDto.setCollege(getValue(yxsmc));
				HSSFCell kcm = hssfRow.getCell(3);
				if (kcm == null)
				{
					continue;
				}
				xlsDto.setCourseName(getValue(kcm));
				HSSFCell cj = hssfRow.getCell(4);
				if (cj == null)
				{
					continue;
				}
				xlsDto.setScore(Float.parseFloat(getValue(cj)));
				list.add(xlsDto);
			}
		}
		return list;
	}
	
	public static void main(String[] args) throws IOException
	{
		TraineeImportExample xlsMain = new TraineeImportExample();
		Trainee xls = null;
		List<Trainee> list = xlsMain.readXls();
		try
		{
			xlsMain.xlsExportExcel(list);
		} catch (Exception e)
		{
			e.printStackTrace();
		}
		for (int i = 0; i < list.size(); i++)
		{
			xls = (Trainee) list.get(i);
			System.out.println(xls.getStudyNo() + "    " + xls.getName() + "    " + xls.getCollege() + "    " + xls.getCourseName() + "    " + xls.getScore());
		}
	}
}

注:具体问题具体分析,这个可以提炼成为一个工具类,以后有时间再弄
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics