POI 读取Excel文件,将Excel数据导入数据库

/**
* 读取Excel单元格所显示的字符串(显示什么就返回什么)
* 创建人:minlorry
* 创建日期:2015-07-31
* 更新日期:2015-07-31
* 更新说明:生硬地处理了数值单元格的处理,日期单元格未作处理。
* @param cell Excel单元格
* @return String 单元格显示的字符串
*/
public static String getStringValue(Cell cell) {
String stringValue = "";//返回值
if (cell == null) {
return "";
}

//读取Excel单元格式,转为DecimalFormat,使用前还会调整
String fmt="0";//DecimalFormat格式
CellStyle cellStyle = cell.getCellStyle();
if(cellStyle!=null){
//这字符串就是自定义单元格式[常规、数值、货币、自定义)的那个格式串
//详见:org.apache.poi.ss.usermodel.BuiltinFormats|org.apache.poi.ss.usermodel.DataFormatter
//有关于有那些基本串的说明。
String dataFormatString = cellStyle.getDataFormatString();
if(dataFormatString!=null && !"".equals(dataFormatString)){
fmt= dataFormatString.replaceAll("[_()]", "").trim();
}else{
fmt="0";
}
}
DecimalFormat df;

switch (cell.getCellType()){
case Cell.CELL_TYPE_STRING:
stringValue = cell.getStringCellValue();
//stringValue = cell.getRichStringCellValue().getString();
break;
case Cell.CELL_TYPE_NUMERIC:
// if (DateUtil.isCellDateFormatted(cell)) {
// //日期
//方法1:这样子的data格式是带时分秒的:2011-10-12 0:00:00
//stringValue = cell.getDateCellValue().toLocaleString();

//方法2:这样子的data格式是不带带时分秒的:2011-10-12
//Date date = cell.getDateCellValue();
//SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//stringValue = sdf.format(date);
// }else{
// //数值
// }
if(fmt.equals("General")){
fmt="#,##0.00";//数值单元格,又是常规格式,好像就是公式
}else if(fmt.equals("0")){
fmt="#,##0";//整数单元格
}

df = new DecimalFormat(fmt);
stringValue = df.format(cell.getNumericCellValue()).trim();
if(stringValue.endsWith(".00")){
stringValue=stringValue.substring(0, stringValue.lastIndexOf("."));
}
break;
case Cell.CELL_TYPE_FORMULA:
try {
if(fmt.endsWith("0.00%")){
fmt="#,##0.00%";
}else if(fmt.endsWith("0.00")){
fmt="#,##0.00";
}else{
fmt="#,##0";
}
df = new DecimalFormat(fmt);
stringValue = df.format(cell.getNumericCellValue());
}catch (Exception e) {
try{
stringValue = String.valueOf(cell.getRichStringCellValue());
}catch (Exception e1) {
stringValue="公式计算出错";
}
}
break;
case Cell.CELL_TYPE_BOOLEAN:
stringValue = String.valueOf(cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_BLANK:
stringValue = "";
break;
case Cell.CELL_TYPE_ERROR:
stringValue = "";
default:
return "";
}
if ("".equals(stringValue) || stringValue == null) {
return "";
}
return stringValue;
}

/**
* 将上传的Excel文件存入数据库
* @author minlorry
* @param file 网页上传的文件
* @param user 当前登录的用户
*/
@Transactional(readOnly = false)
public String saveFromExcel(User user,MultipartFile file){
Workbook workBook = null;//工作簿
Sheet sheet = null;//工作表
Row row = null;//工作表中的行
/**读入工作簿start*/
try{
switch(ExcelUtil.getPostfix(file.getOriginalFilename()).toLowerCase()){
case "xlsx":workBook = new XSSFWorkbook(file.getInputStream());break;//office2007及以后
case "xls":workBook = new HSSFWorkbook(file.getInputStream());break;//office2003及以前
default:
return "从Excel导入企业信息时,打开了不支持的文件格式!";
}
}catch(Exception e){
//可能是加密的文件或锁定等因素会出现异常
return "从Excel导入企业信息时,开始解析文件时出错!";
}
/**读入工作簿end*/
List<Company> companyList =new ArrayList();
try{
Company company=null;
//遍历工作簿中的工作表
for (int sheetNum= 0; sheetNum < workBook.getNumberOfSheets(); sheetNum++) {
sheet = workBook.getSheetAt(sheetNum);
if(sheet == null){continue;}
if(sheet.getPhysicalNumberOfRows()<2){continue;}
//遍历表行(第二行起)
for (int rowNum = 1; rowNum <= sheet.getLastRowNum(); rowNum++) {
row = sheet.getRow(rowNum);
if(row==null){continue;}

company = new Company();
company.setCode(ExcelUtil.getStringValue(row.getCell(1)));
company.setName(ExcelUtil.getStringValue(row.getCell(2)));
company.setAttention(ExcelUtil.getStringValue(row.getCell(3)));
company.setPhone(ExcelUtil.getStringValue(row.getCell(4)));

Date date = new Date();
company.setCreatetime(date);
company.setUpdatetime(date);
company.setCreator(user);
company.setUpdator(user);

company.setCompanyClass(null);//未分类
companyList.add(company);
}
}
}catch (Exception e) {
return "从Excel导入企业信息时,读取数据记录时出错!";
}
try{
add(companyList);
}catch (Exception e) {
return "从Excel导入企业信息时,最后保存数据时出错!";
}
return "从Excel导入企业信息成功!";
}

时间: 2024-10-22 05:48:41

POI 读取Excel文件,将Excel数据导入数据库的相关文章

[Python]将Excel文件中的数据导入MySQL

Github Link 需求 现有2000+文件夹,每个文件夹下有若干excel文件,现在要将这些excel文件中的数据导入mysql. 每个excel文件的第一行是无效数据. 除了excel文件中已有的数据,还要添加一列,名为“at_company”,值为821. 流程 (1)获取excel文件列表,并根据excel文件名确定之后需要创建的table名: (2)连接mysql (3)创建table (4)插入数据 (5)断开连接 依赖模块 1. xlrd # to read excel fil

解析Excel文件并把数据存入数据库

前段时间做一个小项目,为了同时存储多条数据,其中有一个功能是解析Excel并把其中的数据存入对应数据库中.花了两天时间,不过一天多是因为用了"upload"关键字作为URL从而导致总报同一个错,最后在同学的帮助下顺利解决,下面我把自己用"POI"解析的方法总结出来供大家参考(我用的是SpingMVC和hibernate框架). 1.web.xml中的配置文件 web.xml中的配置文件就按照这种方式写,只需要把"application.xml"换

怎么把excel表格内的数据导入数据库?

第一种方法: 思路:想要把excel表格内的数据直接导入数据库不是那么容易,可以把excel表格另存为.csv格式的文档(特点:内容以逗号分割):然后通过一系列的文档操作函数处理成为一个二维数组,然后再进一步处理即可导入数据库 思路正确但有时会出现问题(explode这里会出现问题,因为数据中可能也包含","号所以一般不采用此方法,请看第二种方法) 1:准备一个需要导入数据的excel表格: 2:另存为.csv后缀的文档(特点:内容以逗号分割) 3:进行文档操作函数处理 1 $file

读取hive文件并将数据导入hbase

package cn.tansun.bd.hbase; import java.io.IOException; import java.net.URI; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.

用python读取带密码的excel文件中的数据

用python读取带密码的excel文件中的数据,程序代码如下: #filename:readingxls.py ''' 此程序的作用为:用python读取带密码的excel文件中的数据. 首先通过pip安装xlrd第三方库 pip3 install xlrd 请输入excel文件路径:D:\x1.xls ''' import xlrd path=input("请输入excel文件路径:") workbook=xlrd.open_workbook(path) b=len(workboo

如何通过node读取excel文件内的数据

通过node读取excel文件的数据非常的简单,需使用node-xlsx这个模块,下面请看代码 var xlsx = require('node-xlsx'); var fs = require('fs'); var sheets = xlsx.parse('./test/test.xlsx'); var arr = []; //sheets是一个数组,数组中的每一项对应test.xlsx这个文件里的多个表格,如sheets[0]对应test.xlsx里的“测试参数”这个表格,sheets[1]

[Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你!

引言 项目中常用到将数据导入Excel,将Excel中的数据导入数据库的功能,曾经也查找过相关的内容,将曾经用过的方案总结一下. 方案一 NPOI NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目.使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写.NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/Excel文档进行读写操作

EXCEL数据导入数据库实例(NPOI)

Default.aspx 页面代码: 引用了:    <script src="../../js/jquery.easyui.min.js" type="text/javascript"></script> <form id="fileForm" runat="server" enctype="multipart/form-data" method="post&quo

C#创建Excel文件并将数据导出到Excel文件

C#创建Excel文件,这里实际上是从资源中提取一个事先创建好的Excel文件,文件提取成功后,使用OleDb方法连接Excel,向Excel文件中写入数据. 创建解决方案 菜单>新建>项目>Windows窗体应用程序: 添加相关组件: 添加两个DataGridView,一个TextBox,两个按钮 ,如下图: 添加Excel资源: 先在文件夹中新建一个Excel文件,在Sheet1表的第一行设置列名: 双击"Resources.resx"文件打开资源文件视图: 添加

将Excel表中的数据导入到数据库

网上查到的有参考价值的就一家,自己调试发现可行.感谢原创文章:将Excel中数据导入数据库(一) 1 1 using System; 2 2 using System.Collections.Generic; 3 3 using System.Linq; 4 4 using System.Web; 5 5 //using System.Web.UI; 6 6 //using System.Web.UI.WebControls; 7 7 using System.Data; 8 8 using S