【问题标题】:There is a way to read a Excel file downloaded from Firebase?有没有办法读取从 Firebase 下载的 Excel 文件?
【发布时间】:2020-04-18 12:35:08
【问题描述】:

我的安卓应用有问题;我希望用户可以在 Firebase 上上传一个 excel 文件,并使用该文件上的数据填充 RecyclerView。我没有关于填充 RecyclerView 的问题,我知道该怎么做,我在读取文件时遇到了问题。我把它上传到了 Firebase 上:

StorageReference stRef = storageRef.child("clienti.xlsx");
UploadTask task = stRef.putFile(file);
task.addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception exception) {
                    Toast.makeText(getActivity(), "Upload error: "+exception.getMessage() , Toast.LENGTH_SHORT).show();
                }
            }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    downloadFile("clienti");

                }

到目前为止一切正常,我还将文件从 firebase 下载到特定文件夹,但现在我不知道如何“读取”它并从中获取数据;我试过这个,但它总是对我说文件不存在。

String[][] arrays = read( Environment.getExternalStorageDirectory() + localFile.getPath());

            if(arrays == null){strHyouji="no such file";}else{

                for (String[] array : arrays) {
                    for (String v : array) {
                        strHyouji = strHyouji + v + ",";
                    }
                    strHyouji = strHyouji + "\n";
                    aList.add(strHyouji);
                }
            }


            Toast.makeText(getActivity(), strHyouji, Toast.LENGTH_SHORT).show();

这里是 read() 方法:

Workbook workbook = null;
    try {
        WorkbookSettings ws = new WorkbookSettings();
        ws.setGCDisabled(true);



        workbook = Workbook.getWorkbook(new File(dbStr), ws);
        Sheet sheet = workbook.getSheet(0);

        int rowCount = sheet.getRows();
        String[][] result = new String[rowCount][];
        for (int i = 0; i < rowCount; i++) {
            Cell[] row = sheet.getRow(i);

            result[i] = new String[row.length];
            for (int j = 0; j < row.length; j++) {
                result[i][j] = row[j].getContents();
            }
        }
        return result;


    } catch (BiffException e) {
        strHyouji=strHyouji+ e.toString();

    } catch (IOException e) {
        strHyouji=strHyouji+ e.toString();
    } catch (Exception e) {
        strHyouji=strHyouji+ e.toString();
    } finally {
        if (workbook != null) {
            workbook.close();
        }
    }

    return null;

【问题讨论】:

    标签: java firebase firebase-storage xlsx


    【解决方案1】:

    使用 Apache POI,您可以读取 excel。这里ColumnHeaderString是excel表的实际列标题,datafromcell是转换为String的标题下的值。

    读取文件

    File file = new File( path ) // String file path
    FileInputStream fileInputStream = new FileInputStream( file )
    XSSFWorkbook workbook = new XSSFWorkbook( fileInputStream )
    

    使用工作簿

        XSSFSheet sheet = workbook.getSheetAt( 0 );
        private DataFormatter excelDataFormatter = new DataFormatter()
    
        Iterator<Row> rowIterator = sheet.rowIterator();
        Row header = null;
        if( rowIterator.hasNext() )
        {
            header = rowIterator.next();
        }
        while( rowIterator.hasNext() )
        {
            Iterator<Cell> cellIterator = row.cellIterator();
            while( cellIterator.hasNext() )
            {
                Cell cell = cellIterator.next();
                int cellIndex = cell.getColumnIndex();
                String colHead = header.getCell( cellIndex ).toString();
    
                if( ColumnHeaderString.equals( colHead ) )  // Match the desired column header
                {
                    String datafromcell = excelDataFormatter.formatCellValue( cell ).strip();
                }
            }
        }
    

    【讨论】:

    • 我曾尝试使用 POI,但我不能,您有任何示例说明如何将此库添加到我的项目中吗?我的意思是gradle的一个例子
    • 这个链接可能会帮助你stackoverflow.com/questions/39626522/…并使用3.12版本..即org.apache.poi:poi:3.12
    • 这是由于依赖注入。请阅读此stackoverflow.com/questions/49676155/… 并排除冲突的依赖项。还要确保你的 gradle 文件中只有一个 poi 依赖项。
    • 好的,我添加了最新的 3.17 版本,但它不识别 XSSFWorkbook 和 XSSFSheet
    • 请使用3.12版本,新版本有冲突。我在一个项目中遇到过这种情况,让我知道它是否有效
    猜你喜欢
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    • 2020-04-21
    • 2022-01-23
    • 2019-04-27
    • 2021-02-12
    • 2021-04-10
    相关资源
    最近更新 更多