`

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());
		}
	}
}

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

相关推荐

    java_poi实现excel导入导出

    Java POI 实现 Excel 导入导出 Java POI 是一个流行的 Java 库,用于处理 Microsoft Office 文件格式,包括 Excel 文件。在本文中,我们将详细介绍如何使用 Java POI 实现 Excel 导入导出功能。 1. 什么是 Java ...

    springboot+mybatis+poi 实现excel导入导出

    本篇文章将详细介绍如何利用SpringBoot和MyBatis结合Apache POI实现Excel的导入导出功能。 首先,SpringBoot是一个基于Spring框架的轻量级开发工具,它简化了新Spring应用的初始搭建以及开发过程。SpringBoot通过...

    Springboot+Poi实现Excel的导入导出

    本项目结合了Spring Boot、MyBatis、Apache POI和MySQL,实现了Excel数据的导入导出功能,这对于数据处理和分析尤其有用。下面我们将深入探讨这些技术及其在项目中的应用。 首先,Spring Boot以其“约定优于配置”...

    JAVA实现数据库数据导入导出到Excel(POI)所需jar包

    在Java开发中,有时我们需要将数据库中的数据导出到Excel文件,或者从Excel文件...通过正确理解和使用POI库,你可以轻松地实现数据的导入导出,提升工作效率。记得在项目中引入正确的jar包,以确保所有功能的正常运行。

    Java poi 实现excel导入导出

    在提供的“java-excel导入导出”压缩包中,可能包含了示例代码、说明文档以及测试数据,可以帮助初学者快速理解和使用Java POI进行Excel操作。通过学习和实践这些示例,你可以掌握Java POI库的基本用法,并能灵活...

    POI实现Excel导入导出并附带加载进度条

    为了实现导入导出的进度条功能,项目可能采用了Swing或JavaFX这样的GUI库。在读取大文件时,可以监听文件流的读取进度,并更新进度条组件的状态。例如,可以通过监听Sheet的遍历进度,计算已处理行数占总行数的比例...

    POI实现excel导入导出

    在本文中,我们将深入探讨如何使用Apache POI库实现Excel的导入和导出功能,这对于处理大量数据和自动化办公流程非常有用。 首先,让我们了解一下Apache POI的核心组件HSSF(Horrible Spreadsheet Format)和XSSF...

    POI批量导入导出

    【标题】:"POI批量导入导出" ...总的来说,Apache POI是一个强大而灵活的工具,能够帮助Java开发者实现对Excel文件的高效批量操作,满足各种企业级应用的需求,尤其是在数据导入导出、报表生成和跨平台协作的场景下。

    JXL、POI实现Excel导入导出

    以上就是关于使用JXL和Apache POI实现Excel导入导出的基本知识。根据实际需求,你可以结合这两个库的功能,灵活地处理各种Excel文件操作。在实际项目中,通常会根据性能、功能需求以及文件兼容性等因素选择适合的库...

    POI数据Excel导入导出jar

    该文件中包含了所有java项目中...将该zip解压后,将jar包加入到自己的项目中,可以直接通过poi的api在excel和项目数据进行导入导出。 应用场景:如 excel格式对账单导出,将数据库数据导出到excel中(带样式字体等)。

    poi.jar导入导出jar包

    总之,Apache POI作为Java处理Office文档的强大工具,为开发人员提供了方便的接口,简化了导入导出操作,广泛应用于数据处理和报告生成等领域。使用时,开发者应结合提供的文档说明,了解各个类和方法的功能,以便更...

    POI导出 POI导出 POI导出

    POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI...

    数据导入导出 (java)

    综上所述,Java在数据导入导出方面提供了强大的工具和库,通过合理的设计和实现,可以有效地处理各种数据格式,满足各种业务需求。在实践中,我们需要结合具体业务场景,选择合适的方法和技术,确保数据的安全、高效...

    用poi操作excele的导入导出

    在Java编程环境中,Apache POI库是一个非常实用的工具,它允许开发者读取、创建、修改Microsoft Office格式的文件,包括Excel...通过熟练掌握Apache POI,开发者可以方便地实现Excel的导入导出功能,提高工作效率。

    java poi操作excel批量导入导出项目需要的jar包

    Java中的Apache POI库是处理...以上是Java POI操作Excel的基本概念和关键点,理解并熟练运用这些知识点,你就可以在项目中高效地进行批量导入导出操作了。记住,持续学习和适应新的库版本是保持技术领先的关键。

    使用Springboot实现excel的导入导出

    在Spring Boot中实现Excel的导入导出可以通过POI库来实现,POI是一个开源的Java库,用于处理Microsoft Office格式文件,包括Excel。一个简单的示例,演示如何在Spring Boot项目中使用POI来实现Excel的导入导出功能。...

    POI实现Excel导入导出实例和jar

    通过掌握上述知识,并结合提供的示例代码和jar包,你就能在Java项目中实现Excel的导入导出功能,大大提高数据处理的效率和灵活性。无论你是做数据分析、报表生成还是数据迁移,Apache POI都是一个强大的工具。

    基于Java反射机制的POI实现Excel数据导入_导出.pdf

    数据导入导出 下面是本文的详细知识点: 1. Java反射机制简介 Java反射机制是Java语言在运行时拥有的自审能力,对自身进行检查,并能直接操作程序的内部属性。通过采用Java反射机制,可以获得类的信息,构建类的...

    Java POI EXCEL导入导出

    Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出

Global site tag (gtag.js) - Google Analytics