HSSFWorkBook本地excel导入导出

使用的时候要导入  poi架包

 

一、将数据库中的数据导出到指定计算家:

package com.inspur;

 

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

 

import javax.servlet.http.HttpServletResponse;

 

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;

 

/**

 * @author WHD 2014-11-3

 */

// 导出excel到本机指定的位置

public class HssfTest {

public static void main(String[] args) throws FileNotFoundException {

// 保存的位置

File file = new File("G:/hssf.xls");

FileOutputStream output = new FileOutputStream(file);

// 工作薄

HSSFWorkbook workbook = new HSSFWorkbook();

// 创建工作页对象

HSSFSheet sheet = workbook.createSheet();

// 通过循环创建行 创建列,通过添加数据,但是这里有个问题如果获取的数据的列数不是固定的话就要动态生成第一行

// 这里简单设定读取的是一个user对象的数所以列数是固定的,

// 创建一行是用来输出表头信息的

HSSFRow row = sheet.createRow(0);

// 创建列对象

HSSFCell cell = null;

// 数据保存在list 也就是表头信息

List<String> list = new ArrayList<>();

list.add("name");

list.add("age");

list.add("sex");

for (int i = 0; i < 3; i++) {

// 创建i

cell = row.createCell(i);

// 给这个具体的单元格赋值

cell.setCellValue(list.get(i));

}

// 数据库中查询出来的数据 即对象

List<Student> lists = new ArrayList<>();

Student st1 = new Student();

st1.setName("st1name");

st1.setAge("st1age");

st1.setSex("st1sex");

Student st2 = new Student();

st2.setName("st2name");

st2.setAge("st2age");

st2.setSex("st2sex");

lists.add(st1);

lists.add(st2);

// 一个对象就是一行

for (int j = 0; j < lists.size(); j++) {

// 获取数据

Student stu = lists.get(j);

row = sheet.createRow(j + 1);

// 因为一行有多列 而每循环一行就要创建n列所以使用列数组

HSSFCell[] celldata = new HSSFCell[3];

for (int c = 0; c < 3; c++) {

celldata[c] = row.createCell(c);

}

// 给第一列赋值

celldata[0].setCellValue(stu.getName());

celldata[1].setCellValue(stu.getAge());

celldata[2].setCellValue(stu.getSex());

 

}

try {

workbook.write(output);

output.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

 

}

 

}

 

 

二、将指定磁盘文件中的excel文件导入数据库

package com.inspur;

 

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

 

import org.apache.poi.hssf.usermodel.HSSFCell;

import org.apache.poi.hssf.usermodel.HSSFRow;

import org.apache.poi.hssf.usermodel.HSSFSheet;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

 

/**

 *@author WHD

 *2014-11-8

 */

// 从本机指定的位置导入excel

public class HssfTestImp {

public static void main(String[]args) throws IOException{

// 指定导入文件

File  file= new File("G:/test.xls");

FileInputStream input= new FileInputStream(file);

// 获得了指定文件中的excel 文件

HSSFWorkbook  book= new HSSFWorkbook(input);

HSSFSheet  sheet= book.getSheetAt(0);

// 获取这个文件的总行数,并进行循环取值

Map<String,Object> map= new HashMap<>();

// 这里是从0开始的所以要加1不然最后一行不会被读取

for(int i=0;i<sheet.getLastRowNum()+1;i++){

// 保存行的数据

List<String > list= new ArrayList<>();

//获取当前行

HSSFRow  row=sheet.getRow(i);

//获取一行的所有列的值

for(int j=0;j<row.getLastCellNum();j++){

// 获取当前行当前列的值并进行保存

HSSFCell  cell= row.getCell(j);

//要对列进行类型的转化

cell.setCellType(HSSFCell.CELL_TYPE_STRING);

list.add(cell.getStringCellValue());

}

map.put("name"+i, list);

list=null;

}

// map中存放了 list而一个list就是一行,所以这个map就是一个sheet页面

// 遍历取出每一行

    for(int va=0;va<map.size();va++){

            List<String > Vlist= new ArrayList<>();

             Vlist=(List)map.get("name"+va);

             // 遍历取出每一列

             for(int val=0;val<Vlist.size();val++){

                     // 获取一行数据

                     System.out.print(Vlist.get(val) +" ");

             }

             System.out.println("\n");

    }

}

}

 

转载于:https://my.oschina.net/u/1454838/blog/342346

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值