`
lhq1013
  • 浏览: 87846 次
  • 性别: Icon_minigender_2
  • 来自: 丽水
社区版块
存档分类
最新评论

JAVA POI XSSFWorkbook Excel中插入图片

 
阅读更多
    /**
      * 在excel单元格中插入图片,一个单元格显示一张图片
      */
    private static void drawImage(XSSFWorkbook wb, XSSFSheet sheet, int curRowIdx, int curCol, XSSFRow row, JSONArray jsonArray){
        jsonArray = null == jsonArray? new JSONArray() : jsonArray;
        for(int a = 0; a < jsonArray.size(); a ++) {
            int idxColScreenShot = curCol;
            String imageUrl = jsonArray.getString(a);
            byte[] data = getImageData(imageUrl);
            if(null != data) {
                XSSFDrawing drawingPatriarch = sheet.createDrawingPatriarch();
                //一个单元格插入一张图片,图片与单元格边框留5格像素的距离
                XSSFClientAnchor anchor = new XSSFClientAnchor(XSSFShape.EMU_PER_PIXEL * 5, XSSFShape.EMU_PER_PIXEL * 5, XSSFShape.EMU_PER_PIXEL * (-5), XSSFShape.EMU_PER_PIXEL * (-5), (short)idxColScreenShot + a, curRowIdx, (short) idxColScreenShot + a+1, curRowIdx+1);
                anchor.setAnchorType(AnchorType.MOVE_AND_RESIZE);
                drawingPatriarch.createPicture(anchor, wb.addPicture(data, XSSFWorkbook.PICTURE_TYPE_PNG));
            } else {
                //图片已经不存在时这样处理?
                genNormalCell(wb, row, idxColScreenShot + a, "NOT FOUND: "+jsonArray.getString(a));
            }
            sheet.setColumnWidth(idxColScreenShot + a, 6750);
        }
        if(jsonArray.size() > 0) {
            row.setHeight((short)5550);
        }
    }

    private static XSSFCell genNormalCell(XSSFWorkbook wb, XSSFRow titleRow, int columnIdx, String cellValue){
        XSSFCell cell = titleRow.createCell(columnIdx);
        cell.setCellValue(new XSSFRichTextString(StringUtils.isBlank(cellValue)?"":cellValue));
        XSSFCellStyle style = getWhiteBgSytle(wb);
        cell.setCellStyle(style);
        return cell;
    }

    private static XSSFCellStyle getWhiteBgSytle (XSSFWorkbook xworkbook) {
        //设置样式
        XSSFCellStyle style = genBaseStyle(xworkbook, new XSSFColor(new Color(255,255,255)), new XSSFColor(new Color(242,242,242)));
        //设置字体
        XSSFFont font = genFontStyle(xworkbook);
        font.setFontHeightInPoints((short) 11);
        font.setFontName("微软雅黑 Light");
        style.setFont(font);
        return style;
    }

    private static XSSFCellStyle genBaseStyle(XSSFWorkbook xworkbook, XSSFColor bgColor, XSSFColor borderColor) {
        //设置样式
        XSSFCellStyle style = xworkbook.createCellStyle();
        //设置填充方案
        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        //设置自定义填充颜色
        if(null != bgColor) {
            style.setFillForegroundColor(bgColor);
        }
        //设置一个细边框
        if(null != borderColor) {
            style.setBorderTop(BorderStyle.THIN);
            style.setBorderBottom(BorderStyle.THIN);
            style.setBorderLeft(BorderStyle.THIN);
            style.setBorderRight(BorderStyle.THIN);
            style.setBorderColor(BorderSide.TOP, borderColor);
            style.setBorderColor(BorderSide.BOTTOM, borderColor);
            style.setBorderColor(BorderSide.LEFT, borderColor);
            style.setBorderColor(BorderSide.RIGHT, borderColor);
        }
        //启动单元格内换行
        style.setWrapText(true);
        style.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中
        return style;
    }

    /**
     * 将本地图片/图片url链接,转化成byte[]
     * @param filePath
     * @return
     */
    public static byte[] getImageData(String filePath){
        if(!checkImageContain(filePath)){
            return null;
        }
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        InputStream inStream = null;
        try {
            String tmpStr = filePath.toUpperCase();
            if(tmpStr.startsWith("HTTP://") || tmpStr.startsWith("HTTPS://") || tmpStr.startsWith("//")) {
                //但给的图片地址是url时
                URL httpUrl = new URL(filePath);
                HttpURLConnection conn = (HttpURLConnection)httpUrl.openConnection();
                conn.setRequestMethod("GET");
                conn.setConnectTimeout(5 * 1000);
                try {
                    inStream = conn.getInputStream();//通过输入流获取图片数据
                    if (null == inStream) {
                        return null;
                    }
                } catch (FileNotFoundException e) {
                    log.error("getImageData({}) : ", filePath, e);
                    return null;
                }
                //从输入流中获取数据
                byte[] buffer = new byte[1024];
                int len = 0;
                while( (len=inStream.read(buffer)) != -1 ){
                    baos.write(buffer, 0, len);
                }
                byte[] data = baos.toByteArray();
                return data;
            } else {
                BufferedImage bufferedImage = ImageIO.read(new File(filePath));
                String suffix = getSuffix(filePath);
                suffix = null == suffix? "png":suffix;
                ImageIO.write(bufferedImage, suffix, baos);
                byte[] data = baos.toByteArray();
                return data;
            }
        } catch (Exception e) {
            log.error("getImageData({}) : ", filePath, e);
        } finally {
            try {
                if(null != inStream) {
                    inStream.close();
                }
                baos.close();
            } catch (Exception e) {
                log.error("getImageData({}) fail to close(): ", filePath, e);
            }
        }
        return null;
    }

 

分享到:
评论

相关推荐

    POI向excel中插入图片

    在本文中,我们将深入探讨如何使用POI库向Excel工作簿中插入图片。这将涵盖相关的API,步骤以及一些实用技巧。 首先,我们需要理解Excel的内部结构。在Excel文件中,图片是以OLE对象的形式存储的。POI提供了...

    java实现在Excel中插入图片

    总结起来,Java实现Excel中插入图片的核心步骤包括:导入Apache POI库,创建并操作工作簿和工作表,读取和创建图片对象,创建绘图工作表,设置图片位置,最后保存工作簿。在实际开发中,可能还需要处理图片格式转换...

    JAVA poi 做EXCEL导出(包含图片) 完整版

    在Java编程环境中,Apache POI库是一个非常实用的工具,用于读取、写入和修改Microsoft Office格式的文件,特别是Excel(.xlsx 和 .xls)文件。本教程将详细介绍如何使用JAVA POI库来创建一个包含图片的完整Excel...

    利用java往excel中插入图片

    本篇文章将详细介绍如何利用Java和Apache POI库向Excel工作表中插入图片。 首先,我们需要理解Apache POI的工作原理。POI提供了一个名为HSSFPatriarch的类,它是Excel中的图形绘制容器,可以用于插入图片。对于....

    POI导出Excel工具类,自动设置标题 列名 文件名,可插入图片,合并单元格

    在这个场景中,我们关注的是如何使用POI来创建一个功能丰富的Excel导出工具类,它能够自动设置标题、列名、文件名,并且支持插入图片以及合并单元格。下面将详细介绍这些功能的实现。 首先,要创建一个Excel工作簿...

    java poi操作excel小例子

    POI 还支持更复杂的功能,如合并单元格、插入图片、应用公式、处理图表等。例如,你可以使用 `setCellStyle()` 为单元格设置样式,`setFormula()` 设置公式。 在学习和实践中,可以基于这个小例子不断扩展,了解并...

    通过POI将PPT插入图片并导出实例

    总结来说,Apache POI提供了一个强大的接口,让我们能够方便地在Java环境中创建和编辑PowerPoint文件,包括插入图片。通过熟练掌握POI库的使用,我们可以构建高效、灵活的PPT生成和编辑工具,满足各种业务需求。

    POI导出带图片的excel

    Apache POI是一个流行的Java库,用于读取、创建和修改Microsoft Office格式的文件,特别是Excel工作簿。在本文中,我们将深入探讨如何使用POI库将图片插入到Excel文档中,以便创建包含图像的丰富报告。 首先,让...

    java 通过poi操作excel jar包

    6. **图表和图片**:可以创建和修改Excel中的图表,插入图片到工作表中。 7. **高级功能**:如条件格式、数据验证、合并单元格等。 在实际使用中,Java开发者首先需要将对应的JAR包添加到项目的类路径中,然后就...

    利用POI解析excel并存入数据库demo

    在这个"利用POI解析excel并存入数据库demo"中,我们将关注如何使用 POI 库来读取 Excel 文件,并将数据有效地存入 MySQL 数据库。 首先,要开始使用 POI,你需要在你的项目中引入相应的依赖。如果你使用的是 Maven...

    POI操作Excel完美生成水印

    3. **插入图片**:加载Excel工作簿后,你可以使用Sheet对象的createDrawingPatriarch()方法创建一个绘图父元素,这是在Excel工作表上添加图形的起点。接下来,使用ClientAnchor类来定位和设置图片的大小,并使用...

    使用poi生成Excel所需要的jar包

    在POI-3.9版本中,你还可以使用高级特性,如图表、图片插入、公式计算等。不过要注意,这个版本相对较旧,可能不支持Apache POI的最新功能。对于新项目,通常建议使用较新的版本,以获取更好的性能和更多的功能支持...

    java poi 导出excel jar包

    在实际开发中,你可能还需要处理更复杂的情况,比如合并单元格、插入图片、读取数据验证规则等。Apache POI提供了一系列的API来处理这些功能。因此,熟练掌握Java POI库对于进行Java与Excel交互的开发者来说是至关...

    java POI完整示例,POI将word转HTML,数据库倒出数据到Excel等

    Java POI是一个强大的库,主要用于处理Microsoft Office格式的文件,如Word、Excel和PowerPoint。在本示例中,我们将探讨如何使用POI进行一系列操作,包括将Word文档转换为HTML,以及从数据库导出数据到Excel。 1. ...

    java 读取excel内容 创建excel 插入文字及图片

    以上代码示例涵盖了读取Excel内容、创建新的Excel文件、向Excel中插入文字以及插入图片的基本操作。请注意替换代码中的文件路径以匹配你的实际文件位置。通过这些基本操作,你可以根据需求构建更复杂的Excel处理逻辑...

    java基于poi通过excel模板导出

    2. **读取模板**:在Java代码中,你需要使用POI的XSSFWorkbook类打开模板文件。通过`OPCPackage.openExisting()`方法读取模板文件,然后使用`WorkbookFactory.create()`方法创建一个Workbook对象。 3. **数据准备**...

    java利用poi生成excel报表、处理word文档

    Java中的Apache POI库是一个强大的工具,专门用于处理Microsoft Office格式的文件,如Excel和Word。在本场景中,我们关注的是如何利用POI来生成Excel报表以及处理Word文档。 一、Java POI与Excel报表生成 1. 创建...

    Java POI处理excel文件

    例如,你可以使用`FormulaEvaluator`来评估单元格中的公式,或者使用`ClientAnchor`和`Drawing`接口来插入图片。 总之,Java POI为Java开发者提供了强大的工具来处理Excel文件。无论是简单的数据交换还是复杂的报告...

    java POI导出excel 包含jar

    在Java中,使用POI库可以方便地创建、修改和处理Excel文档,无论是.xls(BIFF8格式,Excel 97-2003)还是.xlsx(Office Open XML格式,Excel 2007及以上版本)。 首先,我们需要导入对应的POI库。在描述中提到"包含...

    java利用poi操作excel所需要的jar包

    8. **图表和图像**: 可以创建和编辑Excel中的图表,也可以插入图片到工作表中。 9. **事件模型**: 使用事件模型可以高效地处理大量数据,而不需要一次性加载整个工作簿到内存。 10. **高级功能**: 包括合并单元格...

Global site tag (gtag.js) - Google Analytics