Java解析excel表格中的图片的方式

    我们要用java解析首先得在项目中引入解析excel的相关包,我们这里使用的是apache的poi-3.12.jar来做开发。

    首先获取excel文件,获取文件的方式这里就不细说了,获取到文件后,将文件转成文件输入流

FileInputStream fis = new FileInputStream(new File(pathname));//pathname文件路径

    定义方法getPictureFromExcel(FileInputStream fis, int sheetNum),接收输入流fis,和Excel表中的sheet编号,即在第几张表格中。方法返回值为一个Map<String,PictureData>,引入org.apache.poi.ss.usermodel.PictureData对象:

import org.apache.poi.ss.usermodel.PictureData;

     通过WorkbookFactory这个工厂通过输入流获取到HSSFWorkbook对象,引入两个包:

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

    具体实现方法如下:

 /**
     * 获取excel表中的图片
     * @return
     * @Param fis 文件输入流
     * @Param sheetNum Excel表中的sheet编号
     * @throws IOException 
     * @throws InvalidFormatException 
     * @throws EncryptedDocumentException 
     */
    public Map<String, PictureData> getPictureFromExcel(FileInputStream fis, int 
sheetNum) throws EncryptedDocumentException, InvalidFormatException, IOException{
    	 //创建Map
         Map<String, PictureData> map = new HashMap<String, PictureData>();
         //获取HSSFWorkbook对象
    	 HSSFWorkbook workbook = (HSSFWorkbook) WorkbookFactory.create(fis);
         //获取图片HSSFPictureData集合
    	 List<HSSFPictureData> pictures = workbook.getAllPictures();
         //获取当前表编码所对应的表 
    	 HSSFSheet sheet = (HSSFSheet) workbook.getSheetAt(sheetNum - 1);
         //对表格进行操作
    	 for (HSSFShape shape : sheet.getDrawingPatriarch().getChildren()) {
    		 HSSFClientAnchor anchor = (HSSFClientAnchor) shape.getAnchor();
    		 if (shape instanceof HSSFPicture) {
    		    HSSFPicture pic = (HSSFPicture) shape;
                    //获取行编号
    		    int row = anchor.getRow2();
                    //获取列编号 
                    int col = anchor.getCol2();
                    int pictureIndex = pic.getPictureIndex()-1;
                    HSSFPictureData picData = pictures.get(pictureIndex);
                    map.put(row+":"+col, picData);
    		 }
    	 }
    	return map;
    }

    最后只需要调用此方法转成文件保存(或者上传ftp服务器,传ftp的方法就不写了)就行了

public static void main(String [] args){
    PictureData picData = map.get(hang-1+":"+20);
    //String ext = picData.suggestFileExtension();//获取图片的后缀名
    byte[] data = picData.getData();
    String fileName = UUID.randomUUID().toString();
    //文件夹路径:temporarypath 
    String temporarypath = FtpPropertiesLoader.get("temporarypath");
    FileOutputStream out = new FileOutputStream(temporarypath + fileName + ".jpg");
    out.write(data); 
    out.close();
}

 

  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
Java 解析复杂表格Excel 文件通常需要使用第三方库,比如 Apache POI 和 EasyExcel。 其,Apache POI 是一个流行的 Java 库,可以读取和写入 Microsoft Office 格式文件,包括 Excel、Word 和 PowerPoint。它提供了丰富的 API,可以用于解析各种类型的 Excel 文件,包括复杂表格和数据格式。 以下是一个使用 Apache POI 解析 Excel 文件的示例代码: ```java import org.apache.poi.ss.usermodel.*; import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class ExcelParser { public static void main(String[] args) throws IOException { // 创建输入流,读取 Excel 文件 FileInputStream inputStream = new FileInputStream(new File("path/to/excel/file.xlsx")); // 创建工作簿对象 Workbook workbook = WorkbookFactory.create(inputStream); // 获取第一个工作表 Sheet sheet = workbook.getSheetAt(0); // 遍历行 for (Row row : sheet) { // 遍历单元格 for (Cell cell : row) { // 获取单元格的值 String value = getCellValue(cell); System.out.print(value + "\t"); } System.out.println(); } // 关闭工作簿和输入流 workbook.close(); inputStream.close(); } // 获取单元格的值 private static String getCellValue(Cell cell) { if (cell == null) { return ""; } switch (cell.getCellType()) { case STRING: return cell.getStringCellValue(); case NUMERIC: if (DateUtil.isCellDateFormatted(cell)) { return cell.getDateCellValue().toString(); } else { return String.valueOf(cell.getNumericCellValue()); } case BOOLEAN: return String.valueOf(cell.getBooleanCellValue()); case FORMULA: return cell.getCellFormula(); default: return ""; } } } ``` 在上述代码,首先创建一个输入流,用于读取 Excel 文件。然后通过 `WorkbookFactory.create()` 方法创建一个工作簿对象,再通过 `Workbook.getSheetAt()` 方法获取第一个工作表。 接着,通过遍历行和单元格,可以逐个获取单元格的值。在 `getCellValue()` 方法,通过 `Cell.getCellType()` 方法判断单元格类型,并返回相应的值。注意,对于日期类型的单元格,需要使用 `DateUtil.isCellDateFormatted()` 方法判断单元格是否为日期格式,然后再使用 `Cell.getDateCellValue()` 方法获取日期值。 最后,别忘了在程序结束时关闭工作簿和输入流。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值