场景:做企业级的应用的时候报表数据导出、导入是很常见的,为此有必要将其作为工作中指导的一部分,以资学习;唯求进步.
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 是一个流行的 Java 库,用于处理 Microsoft Office 文件格式,包括 Excel 文件。在本文中,我们将详细介绍如何使用 Java POI 实现 Excel 导入导出功能。 1. 什么是 Java ...
本篇文章将详细介绍如何利用SpringBoot和MyBatis结合Apache POI实现Excel的导入导出功能。 首先,SpringBoot是一个基于Spring框架的轻量级开发工具,它简化了新Spring应用的初始搭建以及开发过程。SpringBoot通过...
本项目结合了Spring Boot、MyBatis、Apache POI和MySQL,实现了Excel数据的导入导出功能,这对于数据处理和分析尤其有用。下面我们将深入探讨这些技术及其在项目中的应用。 首先,Spring Boot以其“约定优于配置”...
在Java开发中,有时我们需要将数据库中的数据导出到Excel文件,或者从Excel文件...通过正确理解和使用POI库,你可以轻松地实现数据的导入导出,提升工作效率。记得在项目中引入正确的jar包,以确保所有功能的正常运行。
在提供的“java-excel导入导出”压缩包中,可能包含了示例代码、说明文档以及测试数据,可以帮助初学者快速理解和使用Java POI进行Excel操作。通过学习和实践这些示例,你可以掌握Java POI库的基本用法,并能灵活...
为了实现导入导出的进度条功能,项目可能采用了Swing或JavaFX这样的GUI库。在读取大文件时,可以监听文件流的读取进度,并更新进度条组件的状态。例如,可以通过监听Sheet的遍历进度,计算已处理行数占总行数的比例...
在本文中,我们将深入探讨如何使用Apache POI库实现Excel的导入和导出功能,这对于处理大量数据和自动化办公流程非常有用。 首先,让我们了解一下Apache POI的核心组件HSSF(Horrible Spreadsheet Format)和XSSF...
【标题】:"POI批量导入导出" ...总的来说,Apache POI是一个强大而灵活的工具,能够帮助Java开发者实现对Excel文件的高效批量操作,满足各种企业级应用的需求,尤其是在数据导入导出、报表生成和跨平台协作的场景下。
以上就是关于使用JXL和Apache POI实现Excel导入导出的基本知识。根据实际需求,你可以结合这两个库的功能,灵活地处理各种Excel文件操作。在实际项目中,通常会根据性能、功能需求以及文件兼容性等因素选择适合的库...
该文件中包含了所有java项目中...将该zip解压后,将jar包加入到自己的项目中,可以直接通过poi的api在excel和项目数据进行导入导出。 应用场景:如 excel格式对账单导出,将数据库数据导出到excel中(带样式字体等)。
总之,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...
综上所述,Java在数据导入导出方面提供了强大的工具和库,通过合理的设计和实现,可以有效地处理各种数据格式,满足各种业务需求。在实践中,我们需要结合具体业务场景,选择合适的方法和技术,确保数据的安全、高效...
在Java编程环境中,Apache POI库是一个非常实用的工具,它允许开发者读取、创建、修改Microsoft Office格式的文件,包括Excel...通过熟练掌握Apache POI,开发者可以方便地实现Excel的导入导出功能,提高工作效率。
Java中的Apache POI库是处理...以上是Java POI操作Excel的基本概念和关键点,理解并熟练运用这些知识点,你就可以在项目中高效地进行批量导入导出操作了。记住,持续学习和适应新的库版本是保持技术领先的关键。
在Spring Boot中实现Excel的导入导出可以通过POI库来实现,POI是一个开源的Java库,用于处理Microsoft Office格式文件,包括Excel。一个简单的示例,演示如何在Spring Boot项目中使用POI来实现Excel的导入导出功能。...
通过掌握上述知识,并结合提供的示例代码和jar包,你就能在Java项目中实现Excel的导入导出功能,大大提高数据处理的效率和灵活性。无论你是做数据分析、报表生成还是数据迁移,Apache POI都是一个强大的工具。
数据导入导出 下面是本文的详细知识点: 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导入导出