使用的时候要导入 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
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 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
//获取当前行
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
Vlist=(List)map.get("name"+va);
// 遍历取出每一列
for(int val=0;val<Vlist.size();val++){
// 获取一行数据
System.out.print(Vlist.get(val) +" ");
}
System.out.println("\n");
}
}
}