如何从XLS(Excel)文件中读取数据 [Java,Android]

19

我在stackoverflow上搜索过,但没有找到清晰的答案。我该如何从XLS文件的特定行和列中读取数据并将其读入我的Android应用程序?我该如何读取XLS文件?我不想将其转换为CSV,因为尝试转换时会出现错误。

也许我可以使用这个http://www.andykhan.com/jexcelapi/tutorial.html#reading,但我甚至不知道如何将它导入到我的项目中。请帮忙。

2个回答

17

你只需要包含一个外部的jxl jar文件,就可以学习相同的教程,了解如何读取Excel文件的过程。为了方便参考,我会贴一些读取Excel文件第一个sheet并创建resultset的代码。

    public List<String> read(String key) throws IOException  {
    List<String> resultSet = new ArrayList<String>();

    File inputWorkbook = new File(inputFile);
    if(inputWorkbook.exists()){
        Workbook w;
        try {
            w = Workbook.getWorkbook(inputWorkbook);
            // Get the first sheet
            Sheet sheet = w.getSheet(0);
            // Loop over column and lines
            for (int j = 0; j < sheet.getRows(); j++) {
                Cell cell = sheet.getCell(0, j);
                if(cell.getContents().equalsIgnoreCase(key)){
                    for (int i = 0; i < sheet.getColumns(); i++) {
                        Cell cel = sheet.getCell(i, j);
                        resultSet.add(cel.getContents());
                    }
                }
                continue;
            }
        } catch (BiffException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    else
    {
        resultSet.add("File not found..!");
    }
    if(resultSet.size()==0){
        resultSet.add("Data not found..!");
    }
    return resultSet;
}

问题在于我已经导入了那个文件,但是我收到一个错误,说找不到类源代码...我不明白为什么这个问题被投票否决了。 - Marek
1
你能分享一下你遇到的具体错误吗?还有一个建议,每当你提出问题时,请非常精确地描述你的问题(包括错误和/或代码,如果你认为这是必要的)。由于所有新问题都会被Stackoverflow上的其他朋友审核,如果有人发现你的问题不恰当/不完整,他们会投反对票。但是让我们不要担心这个,而是尝试解决你的问题,因为那更重要。 - dev2d
我刚把它复制到LIBS文件夹里,现在它可以工作了(之前我尝试导入但是不起作用)。我需要打开文件A,它在文件夹B里(B在主文件夹的包中)。这个代码不起作用:workBook = Workbook.getWorkbook(new File("/B/A.xls")); 有什么想法吗? - Marek
这里有一个不错的解决方案,可以解决读取文件的问题:http://stackoverflow.com/questions/16890883/how-to-get-reference-to-a-file-inside-a-package - Marek
请帮助我和其他用户:http://stackoverflow.com/questions/31891025/how-to-read-data-from-xls-excel-file-in-java-or-android - S.M_Emamian
显示剩余6条评论

1
private void printlnToUser(Cell str) {
    final Cell string = str;
    if (output.length() > 8000) {
        CharSequence fullOutput = output.getText();
        fullOutput = fullOutput.subSequence(5000, fullOutput.length());
        output.setText(fullOutput);
    }
    output.append(string + "\n");
}

public void ReadXLSX(File path) {
    try {
        FileInputStream fis = new FileInputStream(path);
        XSSFWorkbook myWorkBook = new XSSFWorkbook(fis);
        XSSFSheet mySheet = myWorkBook.getSheetAt(0);
        Iterator<Row> rowIterator = mySheet.iterator();
        while (rowIterator.hasNext()) {
            Row row = rowIterator.next();
            Iterator<Cell> cellIterator = row.cellIterator();
            while (cellIterator.hasNext()) {
                Cell cell = cellIterator.next();
                switch (cell.getCellType()) {
                    case Cell.CELL_TYPE_STRING:
                        break;
                    case Cell.CELL_TYPE_NUMERIC:
                        break;
                    case Cell.CELL_TYPE_BOOLEAN:
                        break;
                    default:
                }
                printlnToUser(cell);
            }
        }
        fis.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

你好!请指定你正在使用的库(名称和版本)(我猜测是iText),并对代码进行一些描述。 - Daniele Licitra
1
我使用的库是apache poi,包括"aa-poi-3.10-min-0.1.5.jar"和"aa-poi-ooxml-schemas-3.10-reduced-more-0.1.5.jar",导入的库有:import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; - Abdullah Maqbool

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接