首先说明一下我没有完全明白poi的所有功能,我现在写的这个呢是我通过提前做好一个excel模板,通过下载模板导入数据库
1,导入poi所用的包我用的是poi-3.6,现在有更高版本的
2,通过jsp js ext 等等来写一个下载模板的功能
模板的例子:
----------------------------------------------------------------------
1
2
3序号 姓名
4NO NAME
51 朱肖磊
excel sheet1 改为你数据的表名 sheet2改为“请勿修改”这里随便起名目的是你在后台读取里面的几个数据这几数据是在excel的Z1列写上4,AA1列写上表名这样写的目的是见下面的后台是为了读取excel的第四列是数据库字段名
----------------------------------------------------------------------
例子:
<%
String filePath= path + "//" + filenamecn;
java.io.FileInputStream bis = null;
java.io.OutputStream bos = null;
try
{
response.setCharacterEncoding("iso8859-1");
response.setContentType("application/unknown");
response.addHeader("Content-Disposition","attachment; filename=\""+ new String(filenamecn.getBytes("gb2312"),"iso8859-1"));
bis = new java.io.FileInputStream(filePath);
bos = response.getOutputStream();
byte[] buff = new byte[2048];
int bytesRead;
while (-1 != (bytesRead = bis.read(buff, 0, buff.length)))
{
bos.write(buff, 0, bytesRead);
}
}catch (Exception e)
{
%>
<script type="text/javascript">
alert('系统找不到该文件');
</script>
<%
e.printStackTrace();
}
finally
{
if (bis != null){
bis.close();
out.clear();
out = pageContext.pushBody();
}
}
%>
3,接着是导入excel 我用的是ext
var fp = new Ext.FormPanel({
renderTo: 'fi-form',
fileUpload: true,
width: 550,
autoHeight: true,
bodyStyle: 'padding: 10px 10px 10px 10px; margin: 10px 10px 10px 10px;',
labelWidth: 120,
defaults: {
anchor: '95%',
allowBlank: false,
msgTarget: 'side'
},
items: [
{
xtype: 'fileuploadfield',
id: 'form-file',
emptyText: '请选择一个Excel文件',
fieldLabel: 'Excel数据文件',
name: 'theFile',
buttonCfg: {
text: '浏览'
}
}],
buttons: [{
text: '导入',
handler: function(){
var fileName = document.getElementById('form-file').value;
var hzm = fileName.split('.');
var strs = fileName.split('\\');
var hzmValue=hzm[hzm.length-1];
var strsValue=strs[strs.length-1];
if(hzmValue!='xls'){
parentIndex.showMessageBox("您上传的文件不符合格式要求,不允许上传!", 2);
}else
{
if(strsValue.length>50)
{
parentIndex.showMessageBox("文件名不能超过50个字", 2);
}else
{
if(fp.getForm().isValid()){
fp.getForm().submit({ url: '../ImportExcelApdm.do?tablename=<%=tableName%>',
waitMsg: '正在上传文件...',
waitTitle:'文件导入',
success: function(fp, o){
var info = '文件"'+o.result.file+'"导入成功!';
info += "<br>"+o.result.info;
//msg('导入成功', info ,Ext.Msg.OK);
//parentIndex.showMessage('',2);
Ext.Msg.alert('导入成功', info);
//parentIndex.storeMap['<%=random%>'].reload();
gridReload('<%=reloadString%>');
},
failure: function(fp, o){
var err = '文件"'+o.result.file+'"导入失败!';
err += "<br>共发现<span style='color:red'>"+o.result.countError+"</span>处错误。";
err += "<br>请按照填表说明正确填写后进行导入。";
err += "<br><br> 是否查看详细错误报告?";
msgErr('导入失败', err ,Ext.Msg.ERROR,processErr(o));
}
});
}
}
}
}
}]
});
4,后台处理导入进来的模板信息
FormFile theFile = inspectimportForm.getTheFile();
String tableName = request.getParameter("tablename");
Excel excel = new Excel();
DataImportApdm dataImport = new DataImportApdm();
HashMap map = new HashMap();
Map mapResult = new HashMap();
mapResult.put("file", theFile.getFileName());
String now = DateTime.getDate();
int currentRow = 0;
try{
//加载
//dataImport.init(tableName);
excel.initExcel(theFile.getInputStream());
//取得excel模板中的表名
Object[] keys = excel.getRow("请勿修改",0);
Object[] oldkeys = excel.getRow("请勿修改",0);
if(keys==null||keys.length<27||!String.valueOf(keys[26]).trim().toUpperCase().equalsIgnoreCase(tableName.toUpperCase())){
throw new Exception("您选择的Excel文件不是有效的"+tableName+"模板!");
}
String rCount=keys[25]+"";
int engListRowCount=0;
try {
engListRowCount=(int)Double.parseDouble(rCount);
} catch (Exception e) {
throw new Exception("英文列的行数设置错误,请修改模板!");
}
//取得excel模板中的英文字段名称(第4行)
keys = excel.getRow(engListRowCount-1);
for(int i=0;i<keys.length;i++){
keys[i] = String.valueOf(keys[i]).toUpperCase().trim();
}
// 取得excel模板中的中文字段名称(第3行)
Object[] fieldNameCn = null;
Map mapFieldName = new HashMap();
int rn = excel.getRowNum(); //所有行数
if(rn<=engListRowCount-1){
throw new Exception("您选择的Excel文件的内容格式不正确!");
}
if(rn==engListRowCount){
throw new Exception("您选择的Excel文件没有数据!");
}
for (int j = 2; j < engListRowCount-1; j++) {
// 取得excel模板中的中文字段名称
fieldNameCn = excel.getRow(j);
if(fieldNameCn!=null){
for(int i=0;i<fieldNameCn.length;i++){
if(fieldNameCn[i]!=null){
mapFieldName.put(keys[i], fieldNameCn[i]);
}
}
}
}
//读取excel模板中的数据 第4行以下的部分
for(currentRow=engListRowCount; currentRow<rn; currentRow++){
map = new HashMap();
Object[] objs =null;
try {
objs = excel.getRow(currentRow);
} catch (Exception e) {
e.printStackTrace();
}
//读取给对象添加数据
if(objs==null)break;
for(int j=0;j<objs.length&&j<keys.length;j++){
String data = (objs[j]+"").trim();
map.put(keys[j], data);
}
String PROJECTEVENTID = (String)map.get("PROJECTEVENTID");//从模板里读取字段列的数据
//这里呢有个问题因为excel模板读取的时候并不是NULL或者“”而是“null”的字符串
所以要进行判断
if (PROJECTEVENTID!=null && !PROJECTEVENTID.equals("") && !"null".equals(PROJECTEVENTID)){
//将这些读取到的数据存放到Map里
Map map = new HashMap();
map.put("PROJECTEVENTID",PROJECTEVENTID);
//然后去执行BO层的添加方法插入到数据库
}
}
5,完事!这只是大概的思路,里面肯定会有验证非空啦,长度啦!等等。。。希望可以帮到大家
6,还有很多导入excel方式,jxl,poi,我这里实现的只是一种而已!
分享到:
相关推荐
poi读写excelpoi读写excelpoi读写excelpoi读写excelpoi读写excelpoi读写excelpoi读写excelpoi读写excelpoi读写excel
在本文中,我们将深入探讨如何使用POI进行Excel的读写操作,并进行总结。 1. POI基本概念 Apache POI 提供了HSSF(Horrible Spreadsheet Format)用于读写旧版的.xls格式的Excel文件,而XSSF则用于处理.xlsx格式的...
本文将详细介绍如何使用POI库在Java中进行Excel的读写操作,以及一个在Eclipse环境中运行的实例。 首先,我们需要了解Apache POI的基本概念。POI是Apache软件基金会的一个开源项目,它提供了Java API来处理...
在这个“POI读写excel文件+poi简单文档”中,我们将深入探讨如何利用Apache POI进行Excel文件的读写操作。 首先,我们需要了解POI的主要组件:HSSF(Horrible Spreadsheet Format)用于处理旧版的BIFF格式(.xls)...
- **JExcelAPI**: 一个更简单的库,支持读写Excel文件,但不支持较新的OOXML格式。 - **Apache POI-HSMF**: 用于处理Outlook的MSG文件。 - **Apache POI-OOXML-Schemas**: 提供对OOXML标准的直接访问,用于自定义...
遗憾的是,提供的文件列表中只有`jeebbs-db-3.sql`,这似乎是一个SQL数据库文件,与Java POI读写Excel的主题并不直接相关。通常,SQL文件用于导入或导出数据库的数据,如果博客作者有提到结合Java POI与SQL操作Excel...
poi读写excel文件,解析xls文件中的内容:得到行数据,返回行数据数组
Apache POI是一个流行的Java库,专门用于处理Microsoft Office格式的文件,尤其是Excel(.xlsx和.xls)文件。在处理大量数据时,POI提供了一种高效的方法来读取和写入Excel文件,这对于数据分析、报告生成或其他需要...
WPS的ET文件本质上也是基于Excel的,所以你可以用类似的POI API来读写。不过,由于WPS的兼容性问题,可能需要处理一些特殊格式或者异常。如果POI在处理某些特定功能时有困难,可能需要借助其他工具或更新到更高版本...
在本例中,我们将聚焦于“poi3.9读写EXCEL”这一主题,特别是针对支持2007版Excel(XLSX格式)的特性。 Apache POI是Apache软件基金会的一个开源项目,其主要目标是提供一个API,使得Java程序员能够处理Microsoft ...
在Java开发中,Apache POI是一个非常重要的库,它允许开发者读取、写入和修改Microsoft Office格式的文件,特别是Excel文档(.xls和.xlsx)。本文将深入探讨如何使用POI组件来处理Excel文档,包括创建、填充数据、...
本篇文章将详细介绍如何利用Apache POI与Struts2来实现Excel的读写以及合并多个Excel工作表。 首先,Apache POI提供了HSSF和XSSF两个API,分别用于处理老版本的BIFF格式(.xls)和新版本的OOXML格式(.xlsx)。要...
"poi3.9读写excel兼容03和07版本"这个标题指的是使用Apache POI 3.9版本的API,能够兼容两种不同格式的Excel文件:.xls(Excel 2003及更早版本)和.xlsx(Excel 2007及更高版本)。 在描述中提到的"完美修订版本...
总的来说,Java开发者可以通过Apache POI和JExcelAPI轻松地读写Excel文件,进行各种操作,如设置列宽、处理合并或拆分的单元格。理解并熟练掌握这些库,将极大地提升你在处理Excel数据时的效率。在实际项目中,根据...
在标题"java poi 读写Excel jar包"中,我们关注的核心知识点是Java POI库的使用,以及如何在Java程序中处理Excel文件的读写操作。要实现这些功能,你需要下载相应的jar包。描述中提到的链接指向了一个CSDN博客文章,...
这篇博客“使用POI读写Excel文件(兼容xls与xlsx版本)”深入探讨了如何利用Apache POI库在Java环境中处理Excel文档。 首先,让我们了解一下Apache POI的基本概念。Apache POI提供了一组API,允许开发者创建、修改...
以下是对"java中poi读写excel封装工具类"这一主题的详细解释。 1. **Apache POI介绍** Apache POI是一个开源项目,允许Java开发者创建、修改和显示Microsoft Office文件,包括Excel、Word和PowerPoint。它的核心...
在这个"POI读写excel(.xls/.xlsx)的Demo"中,我们将深入探讨如何使用Apache POI库在Java中读取和写入Excel文件。 1. **Apache POI库介绍** Apache POI 提供了 HSSF(Horrible Spreadsheet Format)和 XSSF(XML ...