安卓解析Excel图片没法知道是在哪个行

需要把 Excel 的数据解析全部上传到服务器。excel表格的每一行会封装成javabean上传到bmob云服务器。文字很好操作,就是有个列,里面存的是图片,使用 poi 框架 workbook.getAllPictures() 该方法是获取全部的图片,并不知道对应行。要如何知道图片对应的行呢?
已经搜索过相关的博客,但是使用poi的时候总是报错,也不知道什么原因。
implementation 'org.apache.poi:poi:5.2.0'
implementation 'org.apache.poi:poi-ooxml:5.2.0'
Workbook workbook = WorkbookFactory.create(file);报错是这行代码,报错信息: open failed: EACCES (Permission denied)
就是权限没有,可是已经动态给过权限了。
请问可以有序解析图片的poi用什么版本?具体的代码展示一下。还有就是提示没有权限是什么原因呢?

img

img

类似数据库中的查找,先用其他字段定位行,然后再定位图像具体的列

报了权限,肯定是权限相关的问题哈;
你这个报错,我怀疑是路径的问题,你路径不对,所以导致错误;

安卓中,就有很多类似这种路径的问题会发生这个报错。

你检查下路径;或换下

遇到过这个问题,依赖包版本没引用对。

可以通过锚点得到图片所在的行和列的信息,同时通过序号可以得到图片的数据。代码如下我都做了注释,有帮助请采纳谢谢!

        List<HSSFPictureData> pictures = workbook.getAllPictures();  
        if (pictures.size() != 0) {  
            for (HSSFShape shape : sheet.getDrawingPatriarch().getChildren()) {  
                HSSFClientAnchor anchor = (HSSFClientAnchor) shape.getAnchor();      //得到picture的锚点
                if (shape instanceof HSSFPicture) {  
                    HSSFPicture pic = (HSSFPicture) shape;  
                    int pictureIndex = pic.getPictureIndex() - 1;  
                    HSSFPictureData picData = pictures.get(pictureIndex);          //通过索引得到图片的序号,并能得到图片的数据,是你要的图片数据
                    String picIndex = String.valueOf(sheetNum) + "_"  
                            + String.valueOf(anchor.getRow1()) + "_"              //通过锚点得到图片所在的行,就是你要的行
                            + String.valueOf(anchor.getCol1());                  //通过锚点得到图片所在的列,就是你要的列
                }  
            }  
        }  

试一试 利用POI 解析Excel org.apache.poi:poi:3.16 和 org.apache.poi:poi-ooxml:3.16
或参考这篇:https://zhuanlan.zhihu.com/p/94573367

不能通过索引来操作么

图片看不清楚啊,不知道你表达的意思啊

你用的android sdk什么版本?

你的file是已经存在的文件吗?

https://ask.csdn.net/questions/7635463?spm=1005.2026.3001.5635&utm_medium=distribute.pc_relevant_ask_down.none-task-ask-2~default~OPENSEARCH~Rate-1.pc_feed_download_top3ask&depth_1-utm_source=distribute.pc_relevant_ask_down.none-task-ask-2~default~OPENSEARCH~Rate-1.pc_feed_download_top3ask

这个问题一看就是没获取动态权限

// 申请权限, 在第一个界面申请
Activity调用 Permissions.check(UpFoUserLoginAc.this);
//下面是工具类

import android.Manifest;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;

import java.util.ArrayList;

/**

  • Created by shaofa on 2017/11/14.
  • /

public class Permissions
{
// 检查和申请权限
static final int PERMISSION_REQ_CODE = 1;
public static void check(Activity activity)
{
// 要申请的权限列表
final String[] iwant = {
Manifest.permission.INTERNET,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.RECORD_AUDIO,
Manifest.permission.CAMERA,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.SYSTEM_ALERT_WINDOW,
Manifest.permission.DISABLE_KEYGUARD
};

    // 查看已经有了哪些权限
    ArrayList<String> ihavenot = new ArrayList();
    for(int i=0; i<iwant.length; i++)
    {
        if( ContextCompat.checkSelfPermission(activity, iwant[i])
                != PackageManager.PERMISSION_GRANTED )
        {
            ihavenot.add( iwant[i]);
        }
    }

    // 如果有未授权内容, 则申请授权
    if (ihavenot.size() > 0)
    {
        // 系统将弹出一个对话框,询问用户是否授权
        String[] ineed = new String[ihavenot.size()];
        for(int i=0; i<ihavenot.size(); i++)
        {
            ineed[i] = ihavenot.get(i);
        }
        ActivityCompat.requestPermissions(activity, ineed, PERMISSION_REQ_CODE);
    }
}
}

解析doc百度去哈哈获取列