详解使用poi读取Excel中的数据和图片信息

背景

在一些业务需求下,比如导入excel数据,而这些excel文档中又包含图片等内容,那如何读取到excel图片内容,并保存下来呢?

解决方案

首先,在Springboot 环境下导入poi包,pom.xml如下

        <!--poi excel -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.16</version>
        </dependency>

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.16</version>
        </dependency>

导入excel文件方法,写库的部分,跟现在的说的业务无关,暂时可不关心

 public void ImportDeptdata(int mode,String filename) {
   
 /*
     如果是xls格式,使用HSSFWorkbook,HSSFSheet,HSSFRow来进行相关操作
     如果是xlsx格式,使用XSSFWorkbook,XSSFSheet,XSSFRow来进行相关操作,目前只支持xlsx
 */

 try {
   
     File cfgFile = ResourceUtils.getFile(filename);
     InputStream inputStream = new FileInputStream(cfgFile);
     //读取excel数据
     XSSFWorkbook wb = new XSSFWorkbook(inputStream);

     try{
   
         //获取sheet表格,及读取单元格内容
         XSSFSheet sheet = wb.getSheetAt(0);

         Map<String,String> tMap = saveExcelImgToServer(sheet);//读取excel图片文件,存储到服务器目录

         //先将获取的单元格设置为String类型,下面使用getStringCellValue获取单元格内容
         //如果不设置为String类型,如果单元格是数字,则报如下异常
         //java.lang.IllegalStateException: Cannot get a STRING value from a NUMERIC cell
         int rowIndex = 3;
         while (true) {
   //设置无限循环
             int cellIndex = 0;
             if(sheet.getRow(rowIndex)==null || sheet.getRow(rowIndex).getCell(cellIndex)==null){
   //第一列为空,则数据读取结束,跳出循环
                 break;
             }
             sheet.getRow(rowIndex).getCell(cellIndex).setCellType(CellType.STRING);//将获取的单元格设置为String类型
             //读取单元格内容
             String cellDeptname = sheet.getRow(rowIndex).getCell(cellIndex).getStringCellValue(
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
您好!关于您的问题,我可以给您提供一些参考信息。 Java POI是一个开源的Java API,可以用于读取和操作Excel文件。它提供了许多用于在Excel插入图像、文本、数字、图表和其他元素的方法。 要在Excel画线,可以使用Java POI的HSSFDrawing类。HSSFDrawing类是HSSF工作簿所有绘图对象的基类。您可以使用此类来添加各种绘图对象,例如线条、箭头、形状、文本框等。 以下是一个简单的示例代码,展示如何在Excel画一条红色的线: ``` import java.io.FileOutputStream; import org.apache.poi.hssf.usermodel.HSSFClientAnchor; import org.apache.poi.hssf.usermodel.HSSFDrawing; import org.apache.poi.hssf.usermodel.HSSFShape; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.ClientAnchor.AnchorType; import org.apache.poi.ss.usermodel.ShapeTypes; public class DrawLineInExcel { public static void main(String[] args) throws Exception { HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet("Line Sheet"); HSSFDrawing drawing = sheet.createDrawingPatriarch(); HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0, (short) 1, 1, (short) 5, 5); anchor.setAnchorType(AnchorType.DONT_MOVE_AND_RESIZE); HSSFShape shape = drawing.createShape(anchor, ShapeTypes.LINE); shape.setLineWidth(2); shape.setLineStyleColor(255, 0, 0); FileOutputStream fileOut = new FileOutputStream("line.xlsx"); workbook.write(fileOut); fileOut.close(); System.out.println("Line drawn successfully!"); } } ``` 此代码将创建一个新的Excel工作簿,并在名称为“Line Sheet”的工作表绘制一条线。然后将工作簿写入名为“line.xlsx”的文件。 希望这可以帮助您开始解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值