需要把 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用什么版本?具体的代码展示一下。还有就是提示没有权限是什么原因呢?
类似数据库中的查找,先用其他字段定位行,然后再定位图像具体的列
报了权限,肯定是权限相关的问题哈;
你这个报错,我怀疑是路径的问题,你路径不对,所以导致错误;
安卓中,就有很多类似这种路径的问题会发生这个报错。
你检查下路径;或换下
遇到过这个问题,依赖包版本没引用对。
可以通过锚点得到图片所在的行和列的信息,同时通过序号可以得到图片的数据。代码如下我都做了注释,有帮助请采纳谢谢!
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是已经存在的文件吗?
这个问题一看就是没获取动态权限
// 申请权限, 在第一个界面申请
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;
/**
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百度去哈哈获取列