如何在Java中导入Excel表不同表格间的数据导入

&&完java如何实现excel导入数据5W-10W的小功能?求excel导入数据5W-10W的小功能,有偿服务,谢谢了,急!最好今天完成。推荐技术用 mybatis &,最好用mybatis &,mybatis &不会用也行,有偿100元,谢谢了10个牛币所有回答列表(5)给你推荐个开源项目https://git.oschina.net/wuwenze/ExcelKit下面这个里面有具体的导入导出https://git.oschina.net/hwck/mygithub最佳答案可以试试 csv导入啊,poi 操作 excel 很占内存,至于你说的bybatis 其实,大数据量采用jdbc 原生的 btachUpdate&性能就很不错的。个人建议。。可以用jxl.jar包,就可以导出了。具体的步骤网上有很多的demo,还不错的。数据库的字段建好,跟excel列对应上,直接复制过去,哈哈等等完等等等完等等等完等相关问答等等等等完等等完完等最近浏览暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级扫描二维码关注最代码为好友"/>扫描二维码关注最代码为好友&nbsp&#8250&nbsp&nbsp&#8250&nbsp
java处理excel表格数据并导入数据库示例
有时我们有很大的数据需要录入,而这些数据存在一张excel表格之中,这时候最好的方法是通过java 代码自动导入。这需要引入一个专么处理office办公文件的java& api。java操作Excel最常用的开源组件有poi与jxl。jxl是韩国人开发的,发行较早,但是更新的很慢,目前似乎还不支持excel2007。
poi是apache下的一个子项目,poi应该是处理ms的office系列文档最好的组件了。poi3.7版本已经开始支持excel2007了。所以这里我们选择poi作为开发工具。package com.ssy.aims.
import java.io.FileInputS
import java.io.FileOutputS
import java.sql.C
import java.sql.DriverM
import java.sql.PreparedS
import java.sql.ResultS
import java.sql.S
import java.text.DecimalF
import java.util.ArrayL
import java.util.D
import org.apache.poi.hssf.usermodel.HSSFC
import org.apache.poi.hssf.usermodel.HSSFR
import org.apache.poi.hssf.usermodel.HSSFS
import org.apache.poi.hssf.usermodel.HSSFW
* @author cc
* java读取excel文件
* 一个Excel文件的层次:Excel文件-&工作表-&行-&单元格 对应到POI中,为:workbook-&sheet-&row-&cell
public class PoiExcel {
&&&&public static String outputFile = "E:/users.xls";
&&&&//public static String fileToBeRead = "E:/蒋和杰.xls";
&&&&static String createTableSql="";//创建数据库的sql
&&&&static String colType="TEXT";//字段类型
&&&&static String key="id";//主键
&&&&static String charSet="utf8";//表格字符类型
&&&&static String ENGINE="InnoDB";//表格类型
&&&&static String tableName="tempExcelToMysql";//表名称
&&&&static String colName="col";//默认字段名
&&&&static Connection conn =
&&& /* 数据库连接*/static void getConntion(){
&&&&&&&&try {
&&&&&&&&String driver_class = "com.mysql.jdbc.Driver";
&&&&&&&&String connection_url = "jdbc:mysql://localhost:3306/databasename?useUnicode=true&characterEncoding=gb2312";
&&&&&&&&String user_name = "username";
&&&&&&&&String db_password = "password";
&&&&&&&&Class.forName(driver_class);
&&&&&&&&conn = DriverManager.getConnection(connection_url, user_name,db_password);
&&&&&&&&}catch(Exception e){
&&&&&&&&&&&&e.printStackTrace();
public void CreateExcel() {
&&&&&&&&try {
&&&&&&&&&&&// 创建新的Excel 工作簿
&&&&&&&&&&&HSSFWorkbook workbook = new HSSFWorkbook();
&&&&&&&&&&&// 在Excel工作簿中建一工作表,其名为缺省值
&&&&&&&&&&&// 如要新建一名为"效益指标"的工作表,其语句为:
&&&&&&&&&&&// HSSFSheet sheet = workbook.createSheet("效益指标");
&&&&&&&&&&&HSSFSheet sheet = workbook.createSheet();
&&&&&&&&&&&// 在索引0的位置创建行(最顶端的行)
&&&&&&&&&&&HSSFRow row = sheet.createRow((short) 0);
&&&&&&&&&&&//在索引0的位置创建单元格(左上端)
&&&&&&&&&&&HSSFCell cell = row.createCell((short) 0);
&&&&&&&&&&&// 定义单元格为字符串类型
&&&&&&&&&&&cell.setCellType(HSSFCell.CELL_TYPE_STRING);
&&&&&&&&&&&// 在单元格中输入一些内容
&&&&&&&&&&&cell.setCellValue("sweater");
&&&&&&&&&&&// 新建一输出文件流
&&&&&&&&&&&FileOutputStream fOut = new FileOutputStream(outputFile);
&&&&&&&&&&&// 把相应的Excel 工作簿存盘
&&&&&&&&&&&workbook.write(fOut);
&&&&&&&&&&&fOut.flush();
&&&&&&&&&&&// 操作结束,关闭文件
&&&&&&&&&&&fOut.close();
&&&&&&&&&&&System.out.println("文件生成...");
&&&&&&&&} catch (Exception e) {
&&&&&&&&&&&&&&&&System.out.println("已运行 xlCreate() : " + e);
* 读取excel,遍历各个小格获取其中信息,并判断其是否是手机号码,并对正确的手机号码进行显示
* 注意: 1.sheet, 以0开始,以workbook.getNumberOfSheets()-1结束 2.row,
* 以0开始(getFirstRowNum),以getLastRowNum结束 3.cell,
* 以0开始(getFirstCellNum),以getLastCellNum结束, 结束的数目不知什么原因与显示的长度不同,可能会偏长
public void readExcel(String fileToBeRead,String addacct) {
//将被表示成1.E10的手机号转化为,不一定是最好的转换方法
&&&&DecimalFormat df = new DecimalFormat("#");
&&&&&&&// 创建对Excel工作簿文件的引用
&&&&&&&HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(fileToBeRead));
&&&&&&&for (int numSheets = 0; numSheets & workbook.getNumberOfSheets(); numSheets++) {
&&&&&&&&&&&&
&&&&&&&&&&&if (null != workbook.getSheetAt(numSheets)) {
&&&&&&&&&&&&&HSSFSheet aSheet = workbook.getSheetAt(numSheets);//获得一个sheet
&&&&&&&&&&&&&
&&&&&&&&&&&&&for (int rowNumOfSheet = 0; rowNumOfSheet &= aSheet.getLastRowNum(); rowNumOfSheet++) {
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&System.out.print("行"+rowNumOfSheet);//其它格式的数据
&&&&&&&&&&&&&&&&&&if (null != aSheet.getRow(rowNumOfSheet)) {
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&HSSFRow aRow = aSheet.getRow(rowNumOfSheet);
&&&&&&&&&&&&&&&&&&&&&&&ArrayList recode=new ArrayList();
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&for (short cellNumOfRow = 0; cellNumOfRow &= aRow.getLastCellNum(); cellNumOfRow++) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&if (null != aRow.getCell(cellNumOfRow)) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&HSSFCell aCell = aRow.getCell(cellNumOfRow);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&int cellType = aCell.getCellType();
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&switch (cellType) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case 0://Numeric
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&String strCell = df.format(aCell .getNumericCellValue());
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&System.out.print(strCell);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&recode.add(strCell);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case 1://String
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&strCell = aCell.getStringCellValue();
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&System.out.print(strCell);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&recode.add(strCell);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&default:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&System.out.println("格式不对不读");//其它格式的数据
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&&&} //end& of& 遍历所有数据项结束
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&getConntion();
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&String sql="insert into tab_student_info (member_no,member_name,sex," +
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"contact_mobile,province_no,city_no,county_no," +
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"village_no,address,status,oper_date," +
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"oper_code,oper_type,domain_no,att1,"+
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"values("+0+",'"+recode.get(0)+"',"+0+",'"+ recode.get(1)& +"',"+ 1 +"," + 1 +","+ 1 +","+ 1 +",'"+ recode.get(2) +"'," +&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&1+","+"now()"+",'"+addacct+"',"+2+","+1+"," +0+","+
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&")";
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&System.out.println(sql);
&&&&&&&&&&&&&&&&&&&&&&&&&&statement = conn.createStatement();
&&&&&&&&&&&&&&&&&&&&&&&&&&statement.executeUpdate(sql);&
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&//mit();
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&} //end& of& if (null != aSheet.getRow(rowNumOfSheet))
&&&&&&&&&&&&&&&&&&System.out.println("");
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&} //end& of& for 遍历所有行结束
&&&&&&&&&&&}
&&&&&&&}& //end& of& for& 遍历所有sheet结束
&&&&} catch (Exception e) {
&&&&&&&System.out.println("ReadExcelError" + e);
上一篇: Spring的Bean Bean是Spring装配的组件模型,一切实体类都可以配置成一个Bean,进而就可以在任何其他的Bean中使用,一个Bean也可以不是指定的实体类,这就是抽象Bean。 在Spring中有两个最基本、最重要的包,即org.springframework.beans和org.springframewor
下一篇: java操作Excel最常用的开源组件有poi与jxl。jxl是韩国人开发的,发行较早,但是更新的很慢,目前似乎还不支持excel2007。poi是apache下的一个子项目,poi应该是处理ms的office系列文档最好的组件了。poi3.7版本已经开始支持excel2007了。但是由于excel2007底博客分类:
0.加入依赖的jar文件
引用
*mysql的jar文件
*Spring_HOME/lib/poi/*.jar
1.编写数据库链接类
package com.zzg.
import java.sql.C
import java.sql.DriverM
public class DbUtils {
private static C
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost/test","root","123456");
} catch (Exception e) {
e.printStackTrace();
public static Connection getConn() {
public static void setConn(Connection conn) {
DbUtils.conn =
2.编写数据库操作类
package com.zzg.
import java.sql.C
import java.sql.PreparedS
import java.sql.SQLE
public class ExcuteData {
private PreparedS
public boolean ExcuData(String sql) {
Connection conn = DbUtils.getConn();
boolean flag=
pstmt = conn.prepareStatement(sql);
flag=pstmt.execute();
} catch (SQLException e) {
e.printStackTrace();
3.编写Excel表格实体类
package com.zzg.
public class TableCell {
private String _
private String _
public String get_name() {
public void set_name(String _name) {
this._name = _
public String get_value() {
public void set_value(String _value) {
this._value = _
4.编写主键生成方法
package com.zzg.
import java.text.SimpleDateF
import java.util.D
import java.util.R
public class GenericUtil {
public static String getPrimaryKey()
String primaryK
primaryKey = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
Random r = new Random();
primaryKey +=r.nextInt(0000;
return primaryK
5.编写Excel操作类
package com.zzg.deployD
import java.io.F
import java.io.FileInputS
import java.io.FileNotFoundE
import java.io.IOE
import java.io.S
import java.util.ArrayL
import java.util.L
import org.apache.poi.hssf.usermodel.HSSFC
import org.apache.poi.hssf.usermodel.HSSFR
import org.apache.poi.hssf.usermodel.HSSFS
import org.apache.poi.hssf.usermodel.HSSFW
import com.zzg.db.ExcuteD
import com.zzg.model.TableC
import com.zzg.util.GenericU
public class OperExcel&T extends Serializable& {
private HSSFW
private String tableN
private Class&T&
private String sheetN
public OperExcel(File excelFile, String tableName, Class&T& type,
String sheetName) throws FileNotFoundException,
IOException {
workbook = new HSSFWorkbook(new FileInputStream(excelFile));
this.tableName = tableN
this.type =
this.sheetName = sheetN
InsertData();
// 向表中写入数据
public void InsertData() {
System.out.println("yyy");
ExcuteData excuteData = new ExcuteData();
List&List& datas = getDatasInSheet(this.sheetName);
// 向表中添加数据之前先删除表中数据
String strSql = "delete from " + this.tableN
excuteData.ExcuData(strSql);
// 拼接sql语句
for (int i = 1; i & datas.size(); i++) {
strSql = "insert into " + this.tableName + "(";
List row = datas.get(i);
for (short n = 0; n & row.size(); n++) {
TableCell excel = (TableCell) row.get(n);
if (n != row.size() - 1)
strSql += excel.get_name() + ",";
strSql += excel.get_name() + ")";
strSql += " values (";
for (short n = 0; n & row.size(); n++) {
TableCell excel = (TableCell) row.get(n);
if (n != row.size() - 1) {
strSql += getTypeChangeValue(excel) + ",";
strSql += getTypeChangeValue(excel) + ")";
} catch (RuntimeException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
excuteData.ExcuData(strSql);
* 获得表中的数据
* @param sheetName 表格索引(EXCEL 是多表文档,所以需要输入表索引号)
* @return 由LIST构成的行和表
public List&List& getDatasInSheet(String sheetName) {
List&List& result = new ArrayList&List&();
// 获得指定的表
HSSFSheet sheet = workbook.getSheet(sheetName);
// 获得数据总行数
int rowCount = sheet.getLastRowNum();
if (rowCount & 1) {
// 逐行读取数据
for (int rowIndex = 0; rowIndex & rowC rowIndex++) {
// 获得行对象
HSSFRow row = sheet.getRow(rowIndex);
if (row != null) {
List&TableCell& rowData = new ArrayList&TableCell&();
// 获得本行中单元格的个数
int columnCount = sheet.getRow(0).getLastCellNum();
// 获得本行中各单元格中的数据
for (short columnIndex = 0; columnIndex & columnC columnIndex++) {
HSSFCell cell = row.getCell(columnIndex);
// 获得指定单元格中数据
Object cellStr = this.getCellString(cell);
TableCell TableCell = new TableCell();
TableCell.set_name(getCellString(
sheet.getRow(0).getCell(columnIndex)).toString());
TableCell.set_value(cellStr == null ? "" : cellStr
.toString());
rowData.add(TableCell);
result.add(rowData);
* 获得单元格中的内容
* @param cell
* @return result
protected Object getCellString(HSSFCell cell) {
Object result =
if (cell != null) {
int cellType = cell.getCellType();
switch (cellType) {
case HSSFCell.CELL_TYPE_STRING:
result = cell.getStringCellValue();
case HSSFCell.CELL_TYPE_NUMERIC:
result = cell.getNumericCellValue();
case HSSFCell.CELL_TYPE_FORMULA:
result = cell.getNumericCellValue();
case HSSFCell.CELL_TYPE_ERROR:
case HSSFCell.CELL_TYPE_BOOLEAN:
result = cell.getBooleanCellValue();
case HSSFCell.CELL_TYPE_BLANK:
// 根据类型返回相应的值
@SuppressWarnings("unchecked")
public String getTypeChangeValue(TableCell excelElement)
throws RuntimeException, Exception {
String colName = excelElement.get_name();
String colValue = excelElement.get_value();
String retValue = "";
if (colName.equals("id")) {
retValue = "'" + GenericUtil.getPrimaryKey() + "'";
return retV
if (colName == null) {
retValue =
if (colName.equals("class_createuser")) {
retValue = "yaa101";
return "'" + retValue + "'";
retValue = "'" + colValue + "'";
return retV
6.编写调用操作Excel类的方法
package com.zzg.deployD
import java.io.F
import java.io.FileNotFoundE
import java.io.IOE
public class DeployData {
private File fileO
public void excute(String filepath) {
fileOut = new File(filepath);
this.deployUserInfoData();
public void deployUserInfoData() {
new OperExcel(fileOut, "test", Object.class, "Sheet1");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
7.编写客户端
package com.zzg.
import com.zzg.deployData.DeployD
public class DeployClient {
public static void main(String[] args) {
DeployData deployData = new DeployData();
deployData.excute("D://test.xls");
浏览: 589427 次
来自: 郑州
简洁明了,支持
wkl17 写道我想知道@Override这个标识是必须的吗? ...
讲的蛮清楚的
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
看尽繁华三千 终是花飞叶落随泥土 看樱花满天 却掩不住斑驳的流年
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
POI的与安装&  请到网站右击超链接2.5.1.zip下载压缩包poi-bin-2.5.1-final-.zip,解压缩后得到如图2.1所示的目录结构。我们主要用到poi-2.5.1-final-.jar这个库文件。请把poi-2.5.1-final-.jar这个文件的路径添加到系统环境变量中,否则无法编译下面的示例程序。图2.1 POI的目录结构  POI使用初步&  POI提供给用户使用的对象在org.apache.poi.hssf.usermodel包中,主要部分包括Excel对象、样式和格式,还有辅助操作等。  最主要的几个对象如表3.1所示:  表3.1 POI主要对象POI对象名称对应的Excel对象HSSFWorkbook工作簿HSSFSheet工作表HSSFRow行HSSFCell单元格  下面我们来看如下的例子,使用表3.1中的对象在程序的当前目录下创建一个Excel文件test.xls,在第一个单元格中写入内容,然后读出第一个单元格的内容。  完整的程序如下:import org.apache.poi.hssf.usermodel.HSSFWimport org.apache.poi.hssf.usermodel.HSSFSimport org.apache.poi.hssf.usermodel.HSSFRimport org.apache.poi.hssf.usermodel.HSSFCimport java.io.FileOutputSimport java.io.FileInputSpublic class CreateXL&{ public static String xlsFile="test.xls"; //产生的Excel文件的名称 public static void main(String args[]) {  try  {   HSSFWorkbook workbook = new HSSFWorkbook(); //产生工作簿对象   HSSFSheet sheet = workbook.createSheet(); //产生工作表对象   //设置第一个工作表的名称为firstSheet   //为了工作表能支持中文,设置字符编码为UTF_16   workbook.setSheetName(0,"firstSheet",HSSFWorkbook.ENCODING_UTF_16);   //产生一行   HSSFRow row = sheet.createRow((short)0);   //产生第一个单元格   HSSFCell cell = row.createCell((short) 0);   //设置单元格内容为字符串型   cell.setCellType(HSSFCell.CELL_TYPE_STRING);   //为了能在单元格中写入中文,设置字符编码为UTF_16。   cell.setEncoding(HSSFCell.ENCODING_UTF_16);   //往第一个单元格中写入信息   cell.setCellValue("测试成功");   FileOutputStream fOut = new FileOutputStream(xlsFile);   workbook.write(fOut);   fOut.flush();   fOut.close();   System.out.println("文件生成...");   //以下语句读取生成的Excel文件内容   FileInputStream fIn=new FileInputStream(xlsFile);   HSSFWorkbook readWorkBook= new HSSFWorkbook(fIn);   HSSFSheet readSheet= readWorkBook.getSheet("firstSheet");   HSSFRow readRow =readSheet.getRow(0);   HSSFCell readCell = readRow.getCell((short)0);   System.out.println("第一个单元是:" + readCell.getStringCellValue());&  }  catch(Exception e)&  {   System.out.println(e);  } }}  与数据库结合使用&  使用POI,结合编程技术,我们就可以方便地将数据库中的数据导出生成Excel报表。其关键代码如下:/*把数据集rs中的数据导出至Excel工作表中。*传入参数:数据集rs,Excel文件名称xlsName,工作表名称sheetName。*/public static void resultSetToExcel(ResultSet rs,String xlsName,String sheetName) throws Exception{ HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet(); workbook.setSheetName(0,sheetName,HSSFWorkbook.ENCODING_UTF_16); HSSFRow row= sheet.createRow((short)0);; HSSFC ResultSetMetaData md=rs.getMetaData(); int nColumn=md.getColumnCount(); //写入各个字段的名称 for(int i=1;i&=nCi++) {&  cell = row.createCell((short)(i-1));  cell.setCellType(HSSFCell.CELL_TYPE_STRING);  cell.setEncoding(HSSFCell.ENCODING_UTF_16);  cell.setCellValue(md.getColumnLabel(i)); } int iRow=1; //写入各条记录,每条记录对应Excel中的一行 while(rs.next()) {row= sheet.createRow((short)iRow);;  for(int j=1;j&=nCj++)  {&   cell = row.createCell((short)(j-1));   cell.setCellType(HSSFCell.CELL_TYPE_STRING);   cell.setEncoding(HSSFCell.ENCODING_UTF_16);   cell.setCellValue(rs.getObject(j).toString());  }  iRow++; } FileOutputStream fOut = new FileOutputStream(xlsName); workbook.write(fOut); fOut.flush(); fOut.close(); JOptionPane.showMessageDialog(null,"导出数据成功!");}  结束语&  POI功能强大,还可以设置单元格格式、设置页眉页脚等。限于篇幅的关系就不一一举例了,感兴趣的读者可以参考其帮助文档(在图2.1的doc文件夹中)。总之,使用POI,我们可以较好地解决Java编程中的Excel报表问题,进一步满足用户的需求.1、遍历workbook&// load源文件&&&POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(filePath));&&&HSSFWorkbook wb = new HSSFWorkbook(fs);&&&for (int i = 0; i & wb.getNumberOfSheets(); i++) {&&&& HSSFSheet sheet = wb.getSheetAt(i);&&&& for (int j = sheet.getFirstRowNum(); j & sheet.getLastRowNum(); j++) {&&&&&& HSSFRow row = sheet.getRow(j);&&&&&& if (row != null) {&&&&&&&& // 。。。操作}&&&&&& }&&&& }&&&}&&&// 目标文件&&&FileOutputStream fos = new FileOutputStream(objectPath);&&&// 写文件&&&wb.write(fos);&&&fos.close();&&2、得到列和单元格&HSSFRow row = sheet.getRow(i);&&&&&&HSSFCell cell = row.getCell((short) j);&&&&3、设置sheet名称和单元格内容为中文&wb.setSheetName(n, "中文",HSSFCell.ENCODING_UTF_16);&&&&&&&&&&cell.setEncoding((short) 1);&&&&&&cell.setCellValue("中文");&&&&4、单元格内容未公式或数值,可以这样读写&cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);&&&&&&cell.getNumericCellValue();&&5、设置列宽、行高&sheet.setColumnWidth((short)column,(short)width);&&&&&&row.setHeight((short)height);&&6、添加区域,合并单元格&Region region = new Region((short)rowFrom,(short)columnFrom,(short)rowTo,(short)columnTo);&&&&&&sheet.addMergedRegion(region);&&&&&&//得到所有区域&&&&&&sheet.getNumMergedRegions() ;&&7、常用方法&根据单元格不同属性返回字符串数值&public String getCellStringValue(HSSFCell cell) {&&&& String cellValue = "";&&&& switch (cell.getCellType()) {&&&& case HSSFCell.CELL_TYPE_STRING:&&&&&& cellValue = cell.getStringCellValue();&&&&&& if (cellValue.trim().equals("") || cellValue.trim().length() &= 0)&&&&&&&& cellValue = " ";&&&&&&&&&& case HSSFCell.CELL_TYPE_NUMERIC:&&&&&& cellValue = String.valueOf(cell.getNumericCellValue());&&&&&&&&&& case HSSFCell.CELL_TYPE_FORMULA:&&&&&& cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);&&&&&& cellValue = String.valueOf(cell.getNumericCellValue());&&&&&&&&&& case HSSFCell.CELL_TYPE_BLANK:&&&&&& cellValue = " ";&&&&&&&&&& case HSSFCell.CELL_TYPE_BOOLEAN:&&&&&&&&&& case HSSFCell.CELL_TYPE_ERROR:&&&&&&&&&& default:&&&&&&&&&& }&&&& return cellV&&&}&&8、常用单元格边框格式&虚线HSSFCellStyle.BORDER_DOTTED&实线HSSFCellStyle.BORDER_THIN&public static HSSFCellStyle getCellStyle(short type) {&&&& HSSFWorkbook wb = new HSSFWorkbook();&&&& HSSFCellStyle style = wb.createCellStyle();&&&& style.setBorderBottom(type);// 下边框&&&& style.setBorderLeft(type);// 左边框&&&& style.setBorderRight(type);// 右边框&&&& style.setBorderTop(type);// 上边框&&&&&&&}&&9、设置字体和内容位置&HSSFFont f& = wb.createFont();&&&&&&f.setFontHeightInPoints((short) 11);// 字号&&&f.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);// 加粗&&&style.setFont(f);&&&&&&style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中&&&style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中&&&style.setRotation(short rotation);// 单元格内容的旋转的角度&&&HSSFDataFormat df = wb.createDataFormat();&&&&&&style1.setDataFormat(df.getFormat("0.00%"));// 设置单元格数据格式&&&cell.setCellFormula(string);// 给单元格设公式&&&style.setRotation(short rotation);// 单元格内容的旋转的角度&&&cell.setCellStyle(style);&&&&10、插入图片&// 先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray&&&ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();&&&BufferedImage bufferImg = ImageIO.read(new File("ok.jpg"));&&&ImageIO.write(bufferImg, "jpg", byteArrayOut);&&&// 读进一个excel模版&&&FileInputStream fos = new FileInputStream(filePathName + "/stencil.xlt");&&&fs = new POIFSFileSystem(fos);&&&// 创建一个工作薄&&&HSSFWorkbook wb = new HSSFWorkbook(fs);&&&HSSFSheet sheet = wb.getSheetAt(0);&&&HSSFPatriarch patriarch = sheet.createDrawingPatriarch();&&&HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, , (short) 0, 0, (short) 10, 10);&&&patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));&
阅读(11993)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'JAVA实现Excel导入/导出 以及excel样式设置',
blogAbstract:'POI的
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}}

我要回帖

更多关于 两个表格数据对应导入 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信