`

Java lib 操作 excel 插入图片

阅读更多
https://poi.apache.org/components/spreadsheet/quick-guide.html


1、添加依赖(Maven)

https://mvnrepository.com/artifact/org.apache.poi/poi


		<dependency>
		    <groupId>org.apache.poi</groupId>
		    <artifactId>poi</artifactId>
		    <version>4.0.0</version>
		</dependency>



代码实现:


import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

import javax.imageio.ImageIO;

import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.WorkbookUtil;

// https://poi.apache.org/components/spreadsheet/quick-guide.html

public class Excel_01_Basic {
    
    private static String BASE_PATH = "/Users/tiger/Documents/";
    
    private static String FILE_NAME;
    
    private HSSFWorkbook workBook;
   
    public void createWorkBook() throws Exception{
        
        workBook = new HSSFWorkbook();
        
      //============  header ===================================================
        HSSFSheet sheet = workBook.createSheet("2019 Products");
       
        //------------------ 设置列宽
        
        sheet.setColumnWidth(0, 24 * 256); // 24 个字符
        
        
        
        
        //-------------------- 设置行高
        
        Row row = sheet.createRow(2);
        row.setHeightInPoints(30);

        /**
         * HorizontalAlignment.CENTER - one cell
         * HorizontalAlignment.CENTER_SELECTION - multiple cell
         */
        createCell(workBook, row, 0, HorizontalAlignment.CENTER, VerticalAlignment.BOTTOM);
        createCell(workBook, row, 1, HorizontalAlignment.CENTER_SELECTION, VerticalAlignment.BOTTOM);
        
        /**
         * HorizontalAlignment.FILL - left
         * HorizontalAlignment.GENERAL - left
         */
        createCell(workBook, row, 2, HorizontalAlignment.FILL, VerticalAlignment.CENTER);
        createCell(workBook, row, 3, HorizontalAlignment.GENERAL, VerticalAlignment.CENTER);
        
        createCell(workBook, row, 4, HorizontalAlignment.JUSTIFY, VerticalAlignment.JUSTIFY);
        createCell(workBook, row, 5, HorizontalAlignment.LEFT, VerticalAlignment.TOP);
        createCell(workBook, row, 6, HorizontalAlignment.RIGHT, VerticalAlignment.TOP);
        
        
        
        //------------------------------ Cell2
        
        // merging cells
        int rowIndex = 4;
        Row row2 = sheet.createRow(rowIndex);
        
        Cell cell2 = row2.createCell(1);
        cell2.setCellValue("This is a test of merging");
        
        CellStyle style2 = workBook.createCellStyle();
       
        //------------------------------ Cell Merging
        
        sheet.addMergedRegion(new CellRangeAddress(
                rowIndex, //first row (0-based)
                rowIndex, //last row  (0-based)
                1, //first column (0-based)
                8  //last column  (0-based)
        ));
        
        
        //------------------------------- Heights
        row2.setHeightInPoints(141);
        
        //------------------------------- Fonts
        // Note, the maximum number of unique fonts in a workbook is limited to 32767. 
        // You should re-use fonts in your applications instead of creating a font for each cell. 
        //

        Font font_30 = workBook.createFont();
        font_30.setFontHeightInPoints((short)30);
        font_30.setFontName("Courier New");
        font_30.setItalic(true);
        font_30.setStrikeout(true);
        
        style2.setFont(font_30);
        
        cell2.setCellStyle(style2);
        
        //--------------------------------- Picture
        
        Row row0 = sheet.createRow(0);
        row0.setHeightInPoints(180);
        
        Row row1 = sheet.createRow(1);
        row1.setHeightInPoints(180);
        
        ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();     // 先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray
        BufferedImage bufferImg = ImageIO.read(new File("/Users/tiger/Downloads/2018-11-28_16-56-28-node.jpg")); //将图片读到BufferedImage 
        ImageIO.write(bufferImg, "png", byteArrayOut); // 将图片写入流中  
        
        
     // 利用HSSFPatriarch将图片写入EXCEL  
        HSSFPatriarch patriarch = sheet.createDrawingPatriarch();  
        /**
         * 该构造函数有8个参数
         * 前四个参数是控制图片在单元格的位置,分别是图片距离单元格left,top,right,bottom的像素距离
         * 后四个参数,前连个表示图片左上角所在的columnNum和 rowNum,后天个参数对应的表示图片右下角所在的columnNum和rowNum,
         * excel中的columnNum和rowNum的index都是从0开始的
         *  
         */  
        HSSFClientAnchor anchor0 = new HSSFClientAnchor(0, 0, 950, 245 ,  
                (short) 0, 0, (short)0, 0);
        // 插入图片  
        patriarch.createPicture(anchor0, workBook.addPicture(byteArrayOut  
                .toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));  
        
        //图片一导出到单元格B2中  
        HSSFClientAnchor anchor1 = new HSSFClientAnchor(0, 0, 950, 245,  
                (short) 0, 1, (short) 0, 1);
        // 插入图片  
        patriarch.createPicture(anchor1, workBook.addPicture(byteArrayOut  
                .toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));  
              
        byteArrayOut.close();
        
        //============  footer ===================================================
        
        
        
        
        String safeName = WorkbookUtil.createSafeSheetName("workbook.xls");
        FILE_NAME = BASE_PATH + safeName;
        try  ( OutputStream fileOut = new FileOutputStream(FILE_NAME) ) {
            workBook.write(fileOut);
        }
    }

    /**
     * Creates a cell and aligns it a certain way.
     *
     * @param wb     the workbook
     * @param row    the row to create the cell in
     * @param column the column number to create the cell in
     * @param halign the horizontal alignment for the cell.
     * @param valign the vertical alignment for the cell.
     */
    private void createCell(Workbook wb, Row row, int column, HorizontalAlignment halign, VerticalAlignment valign) {
        Cell cell = row.createCell(column);
        
        cell.setCellValue("Align It");
        
        CellStyle cellStyle = wb.createCellStyle();
        
        // set alignment
        cellStyle.setAlignment(halign);
        cellStyle.setVerticalAlignment(valign);

        // set borders
        cellStyle.setBorderBottom(BorderStyle.THIN);
        cellStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());
        
        cellStyle.setBorderLeft(BorderStyle.THIN);
        cellStyle.setLeftBorderColor(IndexedColors.GREEN.getIndex());
        
        cellStyle.setBorderRight(BorderStyle.THIN);
        cellStyle.setRightBorderColor(IndexedColors.BLUE.getIndex());
        
        cellStyle.setBorderTop(BorderStyle.MEDIUM_DASHED);
        cellStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());
        
        // set background color // Aqua background
        // cellStyle.setFillBackgroundColor(IndexedColors.AQUA.getIndex());
        // cellStyle.setFillPattern(FillPatternType.BIG_SPOTS);
        
        // set // Orange "foreground", foreground being the fill foreground not the font color.
        cellStyle.setFillForegroundColor(IndexedColors.ORANGE.getIndex());
        cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        
        //
        cell.setCellStyle(cellStyle);
    }
    
    
    
    public static void main(String[] args) {
        Excel_01_Basic excelWorkBook = new Excel_01_Basic();
        try {
            excelWorkBook.createWorkBook();
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("excel is created successfully!");
        System.out.printf("file path = %s\n", FILE_NAME);
        
        System.out.println("Working Directory = " +
                System.getProperty("user.dir"));
    }

}












转载请注明,
原文出处:https://lixh1986.iteye.com/blog/2436814























-
  • 大小: 165.1 KB
  • 大小: 165.1 KB
分享到:
评论

相关推荐

    java POI-lib,word中写入图片

    在Java中,如果你需要在Word文档中插入图片,POI库提供了解决方案。这个过程涉及到对Word文档的内部结构有深入的理解,包括其XML表示形式,以及如何通过API来操作这些元素。 首先,我们需要导入必要的库,包括POI的...

    Java实现Excel读写的poi 5.2.1版本jar

    例如,通过使用POI库,你可以创建一个新的Excel工作簿,添加工作表,插入数据,设置单元格样式,应用公式,甚至处理图表和图片。同时,也可以读取已存在的Excel文件,提取数据,进行分析,然后将结果写回Excel或保存...

    Java操作EXCEL 学习笔记

    本学习笔记将深入探讨如何使用Apache POI库来实现Java对Excel的高效操作。 Apache POI是一个开源项目,提供了读写Microsoft Office格式文档的能力,包括Excel(.xlsx和.xls)。在Java中,我们可以借助POI库来创建、...

    Java操作Excel所需的jar包

    为了在Java中操作Excel,我们需要引入特定的库,这些库通常以JAR(Java Archive)文件的形式存在。标题“Java操作Excel所需的jar包”和描述都指向了这个主题,暗示我们将讨论如何在Java项目中集成这些库来处理Excel...

    java中生成Excel表的封装类

    在Java编程中,生成Excel...记得在实际项目中,可能需要处理更复杂的情况,如合并单元格、插入图片、设置公式等,这时可以进一步扩展`CreateExcelService`以满足需求。同时,确保正确管理和释放资源,防止内存泄漏。

    免费Java Excel类库-Free Spire.XLS for Java-2.2.0

    - 图像处理:可以插入和调整Excel中的图像,包括图片和形状。 3. **API使用**: - 类库结构清晰:Free Spire.XLS for Java的API设计直观,易于理解和使用,开发者可以通过简单的代码实现复杂的Excel操作。 - ...

    通过java操作excel表格的工具类库jxl

     通过java操作excel表格的工具类库  支持Excel 95-2000的所有版本  生成Excel 2000标准格式  支持字体、数字、日期操作  能够修饰单元格属性  支持图像和图表  应该说以上功能已经能够大致满足我们的需要。最...

    jxl.jar文件,用于实现java对excel的操作

    6. **读取和写入图片**:如果你需要在Excel文件中插入或提取图片,`jxl`库也能胜任。`Picture`类提供了相关的操作。 7. **性能优化**:`jxl`库采用流式处理,允许在内存有限的情况下处理大型Excel文件,降低了内存...

    java后台生成echarts图表

    1. 引入 `echartspoi` 和 `echarts-java` 的依赖,将jar包放入项目的lib目录或者配置到构建工具(如Maven或Gradle)中。 2. 初始化 `ECharts` 对象,并设置所需的图表配置,如图表类型、数据、标题等。 3. 使用 `...

    java操作doc实例

    虽然提供的部分内容主要展示了如何操作Excel(.xls)文件,但可以推断出处理DOC文件的基本原理是类似的,通常会使用类似Apache POI库这样的第三方库来实现。 Apache POI是一个流行的Java API,用于读写Microsoft ...

    关于jxl操作excel说明以及jxl.jar包下载2.6

    JXL支持将图像插入Excel文件,但需要注意,图片必须是BMP格式。使用`Picture`类创建图像对象,然后添加到工作表。 6. **行和列操作**: 可以使用`Row`和`Column`对象来操作Excel的行和列,包括插入、删除、设置...

    java_jacob_操作word_文档

    - 使用 `InlineShapes` 集合的 `AddPicture` 方法插入图片。 - 需要提供图片文件的路径。 #### 五、注意事项 - **内存泄漏问题:** - 使用完毕后,应及时关闭文档和 Word 应用程序实例,避免内存泄漏。 - **...

    aspose-excel jar包

    5. **图表与图形**:插入和操作图表,包括柱状图、饼图、线图等,以及形状和图片。 6. **公式与函数**:支持Excel内置的公式和函数,进行复杂的计算。 7. **数据处理**:执行数据排序、过滤、查找和替换操作。 8....

    aspose-cells-19.5-java.zip

    4. **图片处理**:支持在Excel工作簿中插入、移动或删除图片。 5. **公式计算**:支持读取和计算Excel中的公式,得到结果。 6. **图表处理**:能够创建、修改和复制Excel图表。 7. **样式和格式设置**:可以设置...

    Java Word控件-Free Spire.Doc for Java_2.0.0

    对于图片,支持插入、替换、裁剪、调整大小等操作。 4. **页眉和页脚编辑**:可以创建和修改文档的页眉和页脚,添加页码、日期、公司标志等,实现统一的文档格式。 5. **模板应用**:可以利用模板来快速生成大批量...

    jxl.jar excel包

    如果需要在Excel中插入图片,可以使用`Picture`类,配合`WritableImage`来实现。需要注意的是,图片数据需要转换为特定的二进制格式。 五、性能与优化 由于jxl.jar是基于Java的,其性能可能不如专门的本地Excel库...

    poi必须的jar包导出导入excel文件

    7. **图片处理**:在工作表中插入图片,如Logo或图表,使用`Sheet.addPicture()`方法。 8. **工作表操作**:可以添加、删除、重命名工作表,调整工作表顺序等。 9. **数据验证**:可以设置数据验证规则,限制...

    java的jxl.jar

    6. **图像操作**:JXL也支持在工作表中插入图片。 ```java import jxl.write.*; Picture pic = new Picture(0, 0, Image.getInstance("image.jpg")); sheet.addImage(pic); ``` JXL库虽然历史悠久,但仍然广泛...

    JAVA不使用POI,用PageOffice动态导出Word文档[参考].pdf

    插入图片需要调用PageOffice的图片操作接口,指定图片源和位置。 4. **第三段**:14号华文彩云字体,2倍行间距,左对齐,首行缩进。这里涉及到更特殊的字体选择和行距设置。 通过PageOffice提供的API,可以方便地...

Global site tag (gtag.js) - Google Analytics