import java.io.FileInputStream
import java.io.FileNotFoundException
import java.io.IOException
import org.apache.commons.logging.Log
import org.apache.commons.logging.LogFactory
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
public class TestExcel {
//记录类的输出信息
static Log log = LogFactory.getLog(TestExcel.class)
//获取Excel文档的路径
public static String filePath = "D://excel.xls"
public static void main(String[] args) {
try {
HSSFWorkbook wookbook = new HSSFWorkbook(new FileInputStream(filePath))
// 在Excel文档中,第一张工作表的缺省索引是0
// 其语句为:HSSFSheet sheet = workbook.getSheetAt(0)
HSSFSheet sheet = wookbook.getSheet("Sheet1")
//获取到Excel文件中的所有行数
int rows = sheet.getPhysicalNumberOfRows()
//遍历行
for (int i = 0i <rowsi++) {
// 读取左上端单元格
HSSFRow row = sheet.getRow(i)
// 行不为空
if (row != null) {
//获取到Excel文件中的所有的列
int cells = row.getPhysicalNumberOfCells()
String value = ""
//遍历列
for (int j = 0j <cellsj++) {
//获取到列的值
HSSFCell cell = row.getCell(j)
if (cell != null) {
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_FORMULA:
break
case HSSFCell.CELL_TYPE_NUMERIC:
value += cell.getNumericCellValue() + ","
break
case HSSFCell.CELL_TYPE_STRING:
value += cell.getStringCellValue() + ","
break
default:
value += "0"
break
}
}
}
// 将数据插入到mysql数据库中
String[] val = value.split(",")
TestEntity entity = new TestEntity()
entity.setNum1(val[0])
entity.setNum2(val[1])
entity.setNum3(val[2])
entity.setNum4(val[3])
entity.setNum5(val[4])
entity.setNum6(val[5])
TestMethod method = new TestMethod()
method.Add(entity)
}
}
} catch (FileNotFoundException e) {
e.printStackTrace()
} catch (IOException e) {
e.printStackTrace()
}
}
}
1、添加POI jar包到项目的lib目录下-2、Excel文件目录:d://excel.xls-
3、数据库字段为:num1 num2 num3 num4 num5 num6-
4、数据库名:blog-
5、表名:test-
6、编写类:连接mysql的字符串方法、插入的方法、实体类--
import java.io.FileInputStream-
import java.io.FileNotFoundException-
import java.io.IOException-
import org.apache.commons.logging.Log-
import org.apache.commons.logging.LogFactory-
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-
public class TestExcel {-
//记录类的输出信息-
static Log log = LogFactory.getLog(TestExcel.class)-
//获取Excel文档的路径-
public static String filePath = "D://excel.xls"-
public static void main(String[] args) {-
try {-
// 创建对Excel工作簿文件的引用-
HSSFWorkbook wookbook = new HSSFWorkbook(new FileInputStream(filePath))-
// 在Excel文档中,第一张工作表的缺省索引是0,-
// 其语句为:HSSFSheet sheet = workbook.getSheetAt(0)-
HSSFSheet sheet = wookbook.getSheet("Sheet1")-
//获取到Excel文件中的所有行数-
int rows = sheet.getPhysicalNumberOfRows()-
//遍历行-
for (int i = 0i <rowsi++) {-
// 读取左上端单元格-
HSSFRow row = sheet.getRow(i)-
// 行不为空-
if (row != null) {-
//获取到Excel文件中的所有的列-
int cells = row.getPhysicalNumberOfCells()-
String value = ""-
//遍历列-
for (int j = 0j <cellsj++) {-
//获取到列的值-
HSSFCell cell = row.getCell(j)-
if (cell != null) {-
switch (cell.getCellType()) {-
case HSSFCell.CELL_TYPE_FORMULA:-
break-
case HSSFCell.CELL_TYPE_NUMERIC:-
value += cell.getNumericCellValue() + "," -
break -
case HSSFCell.CELL_TYPE_STRING:-
value += cell.getStringCellValue() + ","-
break-
default:-
value += "0"-
break-
}-
} -
}-
// 将数据插入到mysql数据库中-
String[] val = value.split(",")-
TestEntity entity = new TestEntity()-
entity.setNum1(val[0])-
entity.setNum2(val[1])-
entity.setNum3(val[2])-
entity.setNum4(val[3])-
entity.setNum5(val[4])-
entity.setNum6(val[5])-
TestMethod method = new TestMethod()-
method.Add(entity)-
}-
}-
} catch (FileNotFoundException e) {-
e.printStackTrace()-
} catch (IOException e) {-
e.printStackTrace()-
}-
}-
}-
package com.cn.util
import java.io.FileNotFoundException
import java.io.IOException
import java.io.InputStream
import java.util.ArrayList
import java.util.List
import org.apache.log4j.Logger
import org.apache.poi.hssf.usermodel.HSSFWorkbook
import org.apache.poi.ss.usermodel.Cell
import org.apache.poi.ss.usermodel.Row
import org.apache.poi.ss.usermodel.Sheet
import org.apache.poi.ss.usermodel.Workbook
import org.apache.poi.xssf.usermodel.XSSFWorkbook
import org.springframework.web.multipart.MultipartFile
/**
* excel读写工具类
* @author sun.kai
*/
public class POIUtil {
private static Logger logger = Logger.getLogger(POIUtil.class)
private final static String xls = "xls"
private final static String xlsx = "xlsx"
/**
* 读入excel文件,解析后返回
* @param file
* @throws IOException
*/
public static List<String[]> readExcel(MultipartFile file) throws IOException{
//检查文件
checkFile(file)
//获得Workbook工作薄对象
Workbook workbook = getWorkBook(file)
//创建返回对象,把每行中的值作为一个数组,所有行作为一个集合返回
List<String[]> list = new ArrayList<String[]>()
if(workbook != null){
for(int sheetNum = 0sheetNum < workbook.getNumberOfSheets()sheetNum++){
//获得当前sheet工作表
Sheet sheet = workbook.getSheetAt(sheetNum)
if(sheet == null){
continue
}
//获得当前sheet的开始行
int firstRowNum = sheet.getFirstRowNum()
//获得当前sheet的结束行
int lastRowNum = sheet.getLastRowNum()
//循环除了第一行的所有行
for(int rowNum = firstRowNum+1rowNum <= lastRowNumrowNum++){
//获得当前行
Row row = sheet.getRow(rowNum)
if(row == null){
continue
}
//获得当前行的开始列
int firstCellNum = row.getFirstCellNum()
//获得当前行的列数
int lastCellNum = row.getPhysicalNumberOfCells()
String[] cells = new String[row.getPhysicalNumberOfCells()]
//循环当前行
for(int cellNum = firstCellNum cellNum < lastCellNumcellNum++){
Cell cell = row.getCell(cellNum)
cells[cellNum] = getCellValue(cell)
}
list.add(cells)
}
}
workbook.close()
}
return list
}
public static void checkFile(MultipartFile file) throws IOException{
//判断文件是否存在
if(null == file){
logger.error("文件不存在!")
throw new FileNotFoundException("文件不存在!")
}
//获得文件名
String fileName = file.getOriginalFilename()
//判断文件是否是excel文件
if(!fileName.endsWith(xls) && !fileName.endsWith(xlsx)){
logger.error(fileName + "不是excel文件")
throw new IOException(fileName + "不是excel文件")
}
}
public static Workbook getWorkBook(MultipartFile file) {
//获得文件名
String fileName = file.getOriginalFilename()
//创建Workbook工作薄对象,表示整个excel
Workbook workbook = null
try {
//获取excel文件的io流
InputStream is = file.getInputStream()
//根据文件后缀名不同(xls和xlsx)获得不同的Workbook实现类对象
if(fileName.endsWith(xls)){
//2003
workbook = new HSSFWorkbook(is)
}else if(fileName.endsWith(xlsx)){
//2007
workbook = new XSSFWorkbook(is)
}
} catch (IOException e) {
logger.info(e.getMessage())
}
return workbook
}
public static String getCellValue(Cell cell){
String cellValue = ""
if(cell == null){
return cellValue
}
//把数字当成String来读,避免出现1读成1.0的情况
if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC){
cell.setCellType(Cell.CELL_TYPE_STRING)
}
//判断数据的类型
switch (cell.getCellType()){
case Cell.CELL_TYPE_NUMERIC: //数字
cellValue = String.valueOf(cell.getNumericCellValue())
break
case Cell.CELL_TYPE_STRING: //字符串
cellValue = String.valueOf(cell.getStringCellValue())
break
case Cell.CELL_TYPE_BOOLEAN: //Boolean
cellValue = String.valueOf(cell.getBooleanCellValue())
break
case Cell.CELL_TYPE_FORMULA: //公式
cellValue = String.valueOf(cell.getCellFormula())
break
case Cell.CELL_TYPE_BLANK: //空值
cellValue = ""
break
case Cell.CELL_TYPE_ERROR: //故障
cellValue = "非法字符"
break
default:
cellValue = "未知类型"
break
}
return cellValue
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)