java利用poi技术导入批量excel数据,并且分段存入数据库怎么解决

java利用poi技术导入批量excel数据,并且分段存入数据库怎么解决,第1张

注意引入的都是poi的包,使用Cell,excel2003的.xls对应是HSSFCell,而之后的xlsx对应的则是XSSFCell,但是他们都继承于Cell,所以使用Cell就可以使用两种格式的excel导入了,下面解决excel中数据的各种格式

[java] view plaincopy

//读取excel

try {

request.setCharacterEncoding("gbk")

response.setContentType("text/htmlcharset=gbk")

// 1. 创建工厂类

DiskFileItemFactory factory = new DiskFileItemFactory()

// 2. 创建FileUpload对象

ServletFileUpload upload = new ServletFileUpload(factory)

// 3. 判断是否是上传表单

// boolean b = upload.isMultipartContent(request)

// 设置上传文件最大值

upload.setSizeMax(25 * 1024 * 1024)

// 是文件上传表单

// 4. 解析request,获得FileItem项

List<FileItem>fileitems = upload.parseRequest(request)

// 5. 遍历集合

for (FileItem item : fileitems) {

// 判断是不是普通字段

if (!item.isFormField()) {

// 获得流,读取数据写入文件

InputStream in = item.getInputStream()

Workbook book = createWorkBook(in,item.getName())

// 获得第一个工作表对象

Sheet sheet = book.getSheetAt(0)

if(0==sheet.getLastRowNum()){

//如果没有数据

request.setAttribute("message", "excel的sheet0中不存在数据")

request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response)

}

// 第一行为标题,从第二行开始录入

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

//标题行,用来对比方便得到数据

Row titleRow = sheet.getRow(0)

//数据行

Row row = sheet.getRow(i)

//获得值

String value_temp= this.getValue((Cell) row.getCell(2))

}

}

}

} catch (Exception e) {

e.printStackTrace()

message="导入失败<br/>"+message

request.setAttribute("message",message)

request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response)

}

用到的类 是 :

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

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

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

try {

// List<String[]>中的元素 行数组String[]为excel中的每一行

List<String[]>list = new ArrayList<String[]>()

InputStream is = new FileInputStream("test.xls")

HSSFWorkbook hwk = new HSSFWorkbook(is)// 将is流实例到 一个excel流里

HSSFSheet sh = hwk.getSheetAt(0)// 得到book第一个工作薄sheet

int rows = sh.getLastRowNum()+1 - sh.getFirstRowNum() // 总行数

for(int i=0i<rowsi++){

HSSFRow row = sh.getRow(i)

int cols = row.getLastCellNum()+1 - row.getFirstCellNum() // 该行的总列数

String[] str = new String[cols] // 用来存放该行每一列的值

for (int j = 0j <colsj++) {

Object col = row.getCell((short)j)

str[j] = col.toString()

}

}

......

......

循环变量 i 和 j 可以自己设定从第几行开始读,第几列开始读,下标从0开始。

然后你想做什么判断想做什么数据匹配都可以自己加了。

poi.hssf.usermodel.* jar包要是网上找不到,就给我发邮件,我邮给你:273686381@qq.com

package bis.excel

import java.io.File

import java.io.FileInputStream

import java.io.InputStream

import java.util.ArrayList

import java.util.List

import java.util.Map

import java.util.TreeMap

import jxl.Sheet

import jxl.Workbook

public class Excel {

@SuppressWarnings("unchecked")

public List addCust(File file){

List list=new ArrayList()

List list2=new ArrayList()

Workbook rwb=null

try {

List list1=new ArrayList()

InputStream is=new FileInputStream(file)//读取文件(所要导入excel的保存目录,如:f:\\a.xls)

rwb=Workbook.getWorkbook(is)//创建工作薄

Sheet rs=rwb.getSheet(0)//读取excel中的第一个工作表(默认新建excel下面有sheet1,sheet2,sheet3)

int cellCount=rs.getColumns()//获取Sheet表中所包含的总列数

int rowCount=rs.getRows()//获取Sheet表中所包含的总行数

for(int m=0m<cellCountm++){//将表的第一行数据保存到list1中(列名),即id,name ,age

String cell=rs.getCell(m,0).getContents()

list1.add(cell)

}

for(int i=1i<rowCounti++){//获取值

Map map=new TreeMap()

for(int j=0j<cellCountj++){

map.put(list1.get(j),rs.getCell(j,i).getContents())//将值以键/值对方式保存到map对象中即(id:1,name:zhangsan,age:18)

}

list.add(map)//将值保存到list中

//System.out.println(list.get(i-1))

}

list2.add(list1)//将表头(id,name,age)保存到list2中

list2.add(list)//将值保存到list2中

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace()

}finally{

rwb.close()

}

return list2

}

public void tosql(){

List list=addCust(file)//file:所要导入excel的保存目录,如:f:\\a.xls

Map map=new HashMap()

String[] values=new String[ls2.size()]//保存id,name,age 值

for (int i =0i <ls2.size()i++) {

map=(Map)ls2.get(i)

String value=""

id=(String)map.get("id")

name=(String)map.get("name")

age=(String)map.get("age")

value=id+""+name+""+age

values[i]=value

}

}

}

这是段读取excel表数据的代码,在tosql方法中调用addCust方法读取excel表,最后把所有行的id,name,age值保存到了values数组中,也可以保存到类中,如果你会对数据库 *** 作的话

后面的你自己弄下就行了,不会的话留言,我晚上在告诉你,我现在上班呢,时间有限,只能写这么多了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10714903.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存