`
sha1064616837
  • 浏览: 40455 次
  • 性别: Icon_minigender_2
  • 来自: 湖南
社区版块
存档分类
最新评论

POI操作Excel

阅读更多
POI:Excel中插入图片,解析Excel(poi-3.7-20101029.jar,poi-ooxml-3.7-20101029.jar)
   /**
     * 在Excle2003文档插入条形码
     * 
     * @param fileWordPath
     *            Excel文档绝对路径
     * @param newText
     *            需要插入的条形码图片的绝对路径
     */
    public static boolean insertImage2Excel03(String fileExcelPath,String fileImagePath) {
        FileOutputStream fileOut = null;
        BufferedOutputStream bos = null;
        BufferedImage bufferImg = null;
        ByteArrayOutputStream byteArrayOut = null;
        FileInputStream fis = null;
        HSSFWorkbook wb = null;
        try {
            bufferImg = ImageIO.read(new File(fileImagePath));
            fis = new FileInputStream(new File(fileExcelPath));
            wb = new HSSFWorkbook(fis);
            //遍历该excel下的所有页签
            for (int i = 0; i < wb.getNumberOfSheets(); i++) {
                byteArrayOut = new ByteArrayOutputStream();
                HSSFSheet sheet = wb.getSheetAt(i);
                ImageIO.write(bufferImg, "jpeg", byteArrayOut);//将图像写入outputStream
                sheet.shiftRows(0, sheet.getLastRowNum(), 1, false, false);//获得区域,在第一行上面插入一行
                HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
                //如果第一行不为空
                if (null != sheet.getRow(0)) 
                {
                    //设置第一行高度
                    sheet.getRow(0).setHeightInPoints((float) 65);
                    HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0,(short) 0, 0, (short)2, 1);//设置条码位置在(0列,0行,1列,1行)
                    HSSFPicture picture = patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));//把jpeg图片通过流写入该sheet1
                    picture.resize();//把图片设置成原始大小
                }
                byteArrayOut.flush();
                byteArrayOut.close();
                byteArrayOut = null;
            }
            fileOut = new FileOutputStream(fileExcelPath);
            bos = new BufferedOutputStream(fileOut);
            wb.write(bos);
            bos.flush();
            bos.close();
        } catch (IOException io) {
            io.printStackTrace();
            return false;
        } finally {
            if (null != byteArrayOut)//关闭byteArrayOut流
                try {
                    byteArrayOut.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            if (null != fis) //关闭fis流
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            if (null != fileOut)//关闭fileOut流
                try {
                    fileOut.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            if (null != bos)//关闭fileOut流
                try {
                    bos.close();
                    bos = null;
                } catch (IOException e) {
                    e.printStackTrace();
                }   
        }
        return true;
    }

/**
*解析Excel03
*/
    public List<List<Map<Integer, DynamicDataEvt>>> readExcel03(String filePath)
    {
        int startRow = 1;// 开始行
        List<List<Map<Integer, DynamicDataEvt>>> content = new ArrayList<List<Map<Integer, DynamicDataEvt>>>();
        HSSFWorkbook workbook = null;
        FileInputStream input = null;
        try
        {
            input = new FileInputStream(new File(filePath));
            workbook = new HSSFWorkbook(input);
        }
        catch (Exception e)
        {
            return null;
        }
        int colsum = 0;
        HSSFSheet sheet = null;
        HSSFRow dataRow = null;
        int sheetnum = workbook.getNumberOfSheets();// 获取页签数
        for (int z = 0; z < sheetnum; z++)// 循环页签
        {
            sheet = workbook.getSheetAt(z);
            if (sheet.getFirstRowNum() == sheet.getLastRowNum())// 如果起止行相等说明页签为空
            {
                continue;
            }
            if ((startRow - 1) >= sheet.getLastRowNum())
            {
                continue;
            }
            List<Map<Integer, DynamicDataEvt>> page = new ArrayList<Map<Integer, DynamicDataEvt>>();
            for (int x = (startRow - 1); x <= sheet.getLastRowNum(); x++)
            {
                dataRow = sheet.getRow(x);
                boolean flag = true;
                int lastcol = 0;
                if (dataRow == null)
                {
                    flag = false;
                    lastcol = colsum;
                }
                else
                {
                    colsum = colsum < dataRow.getLastCellNum() ? dataRow
                            .getLastCellNum() : colsum;
                    lastcol = dataRow.getLastCellNum();
                }
                Map<Integer, DynamicDataEvt> cell = new HashMap<Integer, DynamicDataEvt>();
                for (int y = 0; y < lastcol; y++)
                {
                    DynamicDataEvt dy = new DynamicDataEvt();
                    if (flag)
                    {
                        MergeCellTwoEvt mer = getHSSFCell(sheet, x, y);
                        dy.setValue(retrievalCell03(mer.getHcell()));// 单元格的值
                        dy.setRowNumber(x);// 单元格跨行数
                        dy.setColNumber(y);// 单元格跨列数
                        if (mer.isDelegateCall())
                        {
                            dy.setRowUniteId(mer.getMergedrowSum());
                            dy.setColUniteId(mer.getMergedcolSum());
                        }
                        else
                        {
                            if (mer.isMergedRowSign())
                            {
                                dy.setRowUniteId(-1);

                            }
                            if (mer.isMergedColSign())
                            {
                                dy.setColUniteId(-1);//
                            }
                        }
                    }
                    else
                    {
                        dy.setValue("NULL");
                        dy.setRowNumber(x);
                        dy.setColNumber(y);
                    }
                    dy.setSheetNumber(z);
                    cell.put(y, dy);
                }
                page.add(cell);
            }
            content.add(page);
        }
        return content;
    }

    /**
     * 03单元格解析
     *
     * @param sheet
     * @param x
     * @param y
     * @return
     */
    public MergeCellTwoEvt getHSSFCell(HSSFSheet sheet, int x, int y)
    {
        MergeCellTwoEvt merEvt = new MergeCellTwoEvt();
        for (int numMR = 0; numMR < sheet.getNumMergedRegions(); numMR++)
        {
            CellRangeAddress region = sheet.getMergedRegion(numMR);
            if (region.getFirstRow() <= x && region.getLastRow() >= x
                    && region.getFirstColumn() <= y
                    && region.getLastColumn() >= y)
            {

                if (region.getFirstRow() == x && region.getFirstColumn() == y)
                {
                    merEvt.setHcell(sheet.getRow(x).getCell(y));
                    merEvt.setDelegateCall(true);
                }
                else
                {

                    merEvt.setHcell(sheet.getRow(region.getFirstRow()).getCell(
                            region.getFirstColumn()));
                }

                int info = 0;
                if ((info = region.getLastRow() - region.getFirstRow()) > 0)
                {
                    merEvt.setMergedrowSum(info + 1);
                    merEvt.setMergedRowSign(true);
                }
                if ((info = region.getLastColumn() - region.getFirstColumn()) > 0)
                {
                    merEvt.setMergedcolSum(info + 1);
                    merEvt.setMergedColSign(true);
                }

                break;
            }
            else
            {
                merEvt.setHcell(sheet.getRow(x).getCell(y));
            }
        }

        if (merEvt.getHcell() == null)
        {
            merEvt.setHcell(sheet.getRow(x).getCell(y));
        }

        return merEvt;
    }
/**
*获取单元格的值
*/
    public String retrievalCell03(HSSFCell hcel)
    {
        String dataEvt = "";
        if (null == hcel)
        {
            dataEvt = "NULL";
        }
        // 字符串
        else if (hcel.getCellType() == HSSFCell.CELL_TYPE_STRING)
        {
            dataEvt = (hcel.toString());
        }
        // 公式
        else if (hcel.getCellType() == HSSFCell.CELL_TYPE_FORMULA)
        {
            dataEvt = (getConversionNumber(getCellValue03(hcel)));
        }
        else if (hcel.getCellType() == HSSFCell.CELL_TYPE_NUMERIC)
        {
            if (HSSFDateUtil.isCellDateFormatted(hcel))
            {
                Date date = hcel.getDateCellValue();
                SimpleDateFormat dateFormat = new SimpleDateFormat(
                        "yyyy年MM月dd日");
                dataEvt = (dateFormat.format(date));
            }
            else
            {
                dataEvt = (getConversionNumber(String.valueOf(hcel
                        .getNumericCellValue())));
            }
        }
        else if (hcel.getCellType() == HSSFCell.CELL_TYPE_BLANK)
        {

            dataEvt = "NULL";

        }
        else if (hcel.getCellType() == HSSFCell.CELL_TYPE_ERROR)
        {
            dataEvt = "ERROR";
        }

        return dataEvt;

    }
-------------
还有一个牛人整理的POI使用pdf。借鉴借鉴。
分享到:
评论

相关推荐

    poi 操作excel案例 直接运行 适合参考

    标题中的“poi操作excel案例”指的是使用Apache POI库来处理Excel文件的示例项目。Apache POI是一个开源的Java库,它允许开发者创建、修改和显示Microsoft Office格式的文件,包括Excel工作簿(XLS和XLSX)。在这个...

    POI操作Excel常用方法总结

    这篇博客文章“POI操作Excel常用方法总结”可能详细介绍了如何利用Apache POI库在Java环境中读写Excel文件。以下是对该主题的一些关键知识点的详细说明: 1. **Apache POI介绍**: Apache POI是开源项目,提供了...

    poi操作excel所需完整jar包

    "poi操作excel所需完整jar包"指的是包含了所有必要组件的Apache POI库,这样在导入IDE并添加到构建路径后,就可以避免出现`NoClassDefFoundError`这样的运行时错误。 Apache POI 提供了丰富的API,允许开发者读取、...

    POI生成Excel POI操作Excel POI读取Excel POI类库

    Apache POI是一个强大的Java库,专门用于处理...通过lib.rar和Poi02.rar中的示例代码,你可以更深入地了解和学习POI操作Excel的具体实现。在实践中,结合这些资源,你将能够熟练地在Java Web项目中集成Excel处理功能。

    java 通过poi操作excel jar包

    标题中的"java通过poi操作excel jar包"指的是使用Apache POI库来处理Excel文件的Java程序,通常需要引入特定版本的POI JAR包。在这个案例中,我们有两个版本的JAR包可供使用:poi_3.17.jar和poi_3.15.jar。这些版本...

    poi操作excel表格导入和导出

    在“poi操作excel表格导入和导出”这个主题中,我们将深入探讨如何利用Apache POI进行Excel数据的处理,包括导入和导出。 一、Apache POI简介 Apache POI是一个开源项目,它提供了API来处理Microsoft Office格式的...

    poi操作excel的Demo

    这个"poi操作excel的Demo"很可能是提供了一个使用Apache POI库来读取、写入或修改Excel文件的示例代码。下面将详细介绍Apache POI在处理Excel时的一些关键知识点。 1. **Apache POI概述**: Apache POI 是Java平台...

    POI操作Excel的封装

    在这个场景中,"POI操作Excel的封装"指的是对POI API进行的高级抽象和简化,以便于开发人员更方便地处理Excel文件。通过反射和约定,可以创建一个易于使用的API,隐藏底层复杂的POI细节。 反射是Java编程语言中的一...

    Java Poi 操作excel的API 好用

    二、Java POI操作Excel的核心功能 1. 创建新的Excel工作簿 使用`WorkbookFactory.create()`方法可以创建一个新的Excel工作簿对象,然后通过工作簿对象创建工作表。 2. 读取Excel工作簿 同样,使用`WorkbookFactory....

    poi操作excel所需jar包及poi源码

    poi操作excel所需jar包及poi源码 包含内容 poi-3.7.jar poi-ooxml-3.7.jar poi-ooxml-schemas-3.7.jar poi-scratchpad-3.7.jar Lib--&gt;commons-logging-1.1.jar lib--&gt;junit-3.8.1.jar lib--&gt;log4j.1.2.13.jar ooxml-...

    poi操作Excel文件jar包

    "poi操作Excel文件jar包"指的是包含Apache POI库的Java归档(JAR)文件,可以集成到Java项目中以实现Excel文件的处理功能。 1. **Apache POI 简介** Apache POI 是Apache软件基金会的一个顶级项目,最初由Markus ...

    poi操作excel2007

    接下来,我们将讨论如何使用Apache POI操作Excel 2007(.xlsx)文件的主要步骤: 1. **创建Workbook对象**:这是Excel工作簿的Java表示。你可以使用`XSSFWorkbook`类来创建一个新的Excel工作簿。 ```java import...

    POI操作excel的 JAR包

    这个“POI操作excel的JAR包”是Apache POI项目的一部分,它提供了一系列API,使得Java开发者可以方便地创建、读取、修改Excel电子表格。 在Java开发中,使用Apache POI库可以实现以下功能: 1. **创建Excel工作簿*...

    poi操作excel全部jar包

    "poi操作excel全部jar包"指的是使用Apache POI进行Excel操作所需的所有库文件集合,通常包含多个JAR文件,每个文件服务于不同的功能模块。 Apache POI 主要分为三个部分: 1. **HSSF**: 这是处理Microsoft Excel的...

    java poi操作excel批量导入导出项目需要的jar包

    Java中的Apache POI库是处理...以上是Java POI操作Excel的基本概念和关键点,理解并熟练运用这些知识点,你就可以在项目中高效地进行批量导入导出操作了。记住,持续学习和适应新的库版本是保持技术领先的关键。

    POI操作Excel 调用高德API操作示例

    使用POI操作Excel调用高德地图API操作Excel示例

    poi操作excel的jar包集.rar

    "poi操作excel的jar包集.rar"文件包含了运行Apache POI库所需的全部依赖,让你能够无缝进行Excel文件的操作,无论是2003的老版本还是2007及以后的新版本。 首先,我们需要理解Apache POI的主要组件: 1. **HSSF...

    POI操作Excel总结实例

    这个"POI操作Excel总结实例"的资料可能包含了一系列示例代码,教你如何利用Apache POI库来读取、写入和操作Excel文件。下面,我将详细讲解关于POI操作Excel的一些关键知识点。 1. **创建Excel工作簿(Workbook)** ...

    POI 操作Excel工具类

    在这个场景中,我们关注的是如何使用 POI 操作 Excel 工具类。这个工具类可以帮助开发者在 Java 环境下读写 Excel 文件,从而实现数据导入、导出等功能。下面将详细介绍 POI 操作 Excel 的关键知识点。 1. **工作簿...

Global site tag (gtag.js) - Google Analytics