`

poi 读写excel 【给我发表点意见】

阅读更多
首先说明一下我没有完全明白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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是否查看详细错误报告?";
                    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读写excel

    poi读写excelpoi读写excelpoi读写excelpoi读写excelpoi读写excelpoi读写excelpoi读写excelpoi读写excelpoi读写excel

    poi读写excel+poi总结

    在本文中,我们将深入探讨如何使用POI进行Excel的读写操作,并进行总结。 1. POI基本概念 Apache POI 提供了HSSF(Horrible Spreadsheet Format)用于读写旧版的.xls格式的Excel文件,而XSSF则用于处理.xlsx格式的...

    java用poi读写excel表

    本文将详细介绍如何使用POI库在Java中进行Excel的读写操作,以及一个在Eclipse环境中运行的实例。 首先,我们需要了解Apache POI的基本概念。POI是Apache软件基金会的一个开源项目,它提供了Java API来处理...

    POI读写excel文件+poi简单文档

    在这个“POI读写excel文件+poi简单文档”中,我们将深入探讨如何利用Apache POI进行Excel文件的读写操作。 首先,我们需要了解POI的主要组件:HSSF(Horrible Spreadsheet Format)用于处理旧版的BIFF格式(.xls)...

    apache POI文件读写excel

    - **JExcelAPI**: 一个更简单的库,支持读写Excel文件,但不支持较新的OOXML格式。 - **Apache POI-HSMF**: 用于处理Outlook的MSG文件。 - **Apache POI-OOXML-Schemas**: 提供对OOXML标准的直接访问,用于自定义...

    java poi 读写excel

    遗憾的是,提供的文件列表中只有`jeebbs-db-3.sql`,这似乎是一个SQL数据库文件,与Java POI读写Excel的主题并不直接相关。通常,SQL文件用于导入或导出数据库的数据,如果博客作者有提到结合Java POI与SQL操作Excel...

    poi读写excel文件

    poi读写excel文件,解析xls文件中的内容:得到行数据,返回行数据数组

    POI读写海量Excel(代码)

    Apache POI是一个流行的Java库,专门用于处理Microsoft Office格式的文件,尤其是Excel(.xlsx和.xls)文件。在处理大量数据时,POI提供了一种高效的方法来读取和写入Excel文件,这对于数据分析、报告生成或其他需要...

    poi3.1读写excel,wps et

    WPS的ET文件本质上也是基于Excel的,所以你可以用类似的POI API来读写。不过,由于WPS的兼容性问题,可能需要处理一些特殊格式或者异常。如果POI在处理某些特定功能时有困难,可能需要借助其他工具或更新到更高版本...

    poi3.9读写EXCEL

    在本例中,我们将聚焦于“poi3.9读写EXCEL”这一主题,特别是针对支持2007版Excel(XLSX格式)的特性。 Apache POI是Apache软件基金会的一个开源项目,其主要目标是提供一个API,使得Java程序员能够处理Microsoft ...

    应用POI组件读写Excel文档

    在Java开发中,Apache POI是一个非常重要的库,它允许开发者读取、写入和修改Microsoft Office格式的文件,特别是Excel文档(.xls和.xlsx)。本文将深入探讨如何使用POI组件来处理Excel文档,包括创建、填充数据、...

    Poi 读写Excel 合并ExcelSheet Struts2实现

    本篇文章将详细介绍如何利用Apache POI与Struts2来实现Excel的读写以及合并多个Excel工作表。 首先,Apache POI提供了HSSF和XSSF两个API,分别用于处理老版本的BIFF格式(.xls)和新版本的OOXML格式(.xlsx)。要...

    poi3.9读写excel兼容03和07版本

    "poi3.9读写excel兼容03和07版本"这个标题指的是使用Apache POI 3.9版本的API,能够兼容两种不同格式的Excel文件:.xls(Excel 2003及更早版本)和.xlsx(Excel 2007及更高版本)。 在描述中提到的"完美修订版本...

    ExcelDemo_Excel导出_下载_POI读excel_JXL读写excel_java读写excel_列宽_读取合并或拆分单元格内容

    总的来说,Java开发者可以通过Apache POI和JExcelAPI轻松地读写Excel文件,进行各种操作,如设置列宽、处理合并或拆分的单元格。理解并熟练掌握这些库,将极大地提升你在处理Excel数据时的效率。在实际项目中,根据...

    java poi 读写Excel jar包

    在标题"java poi 读写Excel jar包"中,我们关注的核心知识点是Java POI库的使用,以及如何在Java程序中处理Excel文件的读写操作。要实现这些功能,你需要下载相应的jar包。描述中提到的链接指向了一个CSDN博客文章,...

    使用POI读写Excel文件(兼容xls与xlsx版本)

    这篇博客“使用POI读写Excel文件(兼容xls与xlsx版本)”深入探讨了如何利用Apache POI库在Java环境中处理Excel文档。 首先,让我们了解一下Apache POI的基本概念。Apache POI提供了一组API,允许开发者创建、修改...

    java中poi读写excel封装工具类(兼容office2003和2007等版本)

    以下是对"java中poi读写excel封装工具类"这一主题的详细解释。 1. **Apache POI介绍** Apache POI是一个开源项目,允许Java开发者创建、修改和显示Microsoft Office文件,包括Excel、Word和PowerPoint。它的核心...

    POI读写excel(.xls/.xlsx)的Demo

    在这个"POI读写excel(.xls/.xlsx)的Demo"中,我们将深入探讨如何使用Apache POI库在Java中读取和写入Excel文件。 1. **Apache POI库介绍** Apache POI 提供了 HSSF(Horrible Spreadsheet Format)和 XSSF(XML ...

Global site tag (gtag.js) - Google Analytics