0

我正在制作一个程序,我将从多个 excel 文件中读取数据并将数据存储在表格中。当用户提供文件的完整路径时,我已经设法制作了这个程序并且工作正常。我现在要做的是用户将提供所有 excel 文件所在的目录,自动查找所有 .xls 文件并为每个文件执行其余程序(读取数据,创建表并插入数据在里面)。

用户提供路径并打印所有 .xls 文件的代码是:

String dirpath = "";
Scanner scanner1 = new Scanner(System.in);
while (true) {
    System.out.println("Please give the directory:");
    dirpath = scanner1.nextLine();
    File fl = new File(dirpath);
    if (fl.canRead()) break;
    System.out.println("Error:Directory does not exists");
}
try{
    String files;
    File folder = new File(dirpath);
    File[] listOfFiles = folder.listFiles();

    for (int i = 0; i < listOfFiles.length; i++) {
        if (listOfFiles[i].isFile()) {
            files = listOfFiles[i].getName();
                if (files.endsWith(".xls") || files.endsWith(".XLS")) {
                    System.out.println(files);
                }
        }
    }
}catch (Exception e){
    System.out.println();
}

我如何让这些文件中的每一个在其余程序中继续?下面的代码描述了我接下来要做的事情:

List sheetData = new ArrayList();
FileInputStream fis = null;
try {
    fis = new FileInputStream(strfullPath);
    HSSFWorkbook workbook = new HSSFWorkbook(fis);
    HSSFSheet sheet = workbook.getSheetAt(0);

    Iterator rows = sheet.rowIterator();
    while (rows.hasNext()) {
        HSSFRow row = (HSSFRow) rows.next();
        Iterator cells = row.cellIterator();

        List data = new ArrayList();
        while (cells.hasNext()) {
            HSSFCell cell = (HSSFCell) cells.next();
            data.add(cell);
        }
        sheetData.add(data);
    }    
} catch (IOException e) {
    e.printStackTrace();
} finally {
    if (fis != null) {
        fis.close();
    }
}

在这段代码之后,我正在创建表,然后我用数据填充它。

4

3 回答 3

0

将代码包装成一个方法,而不是

System.out.println(files);

调用此方法并通过listOfFiles[i].

于 2013-05-27T07:18:25.597 回答
0

您可以将 XLS 文件添加到文件列表中,然后对其进行迭代以获取 xls 文件处理代码。

//Delcare
List<File> xlsFiles = new ArrayList<File>();


//Add the below code in the if loop 
xlsFiles.add(listOfFiles[i])

for(File xlsFile : xlsFiles){

List sheetData = new ArrayList();
FileInputStream fis = null;
try {
    fis = new FileInputStream(xlsFile);
}

问候, Dinesh.R

于 2013-05-27T07:45:29.303 回答
0

您可以从 excel 文件中读取数据,并将其用于进一步的执行过程。

请找到以下相同的示例。

private void getSpecificExcelWSheetDataList(String absolutePath) {

    LogLoader.serverLog.trace("In getSpecificExcelWSheetDataList() [File Location : " + absolutePath + "]");

    try {

        File file = new File(absolutePath);

        if (!file.isAbsolute()) {
            LogLoader.serverLog.error("Source file does not exist");
        } else if (!file.canRead()) {
            LogLoader.serverLog.error("Source file doesn't have permission for read operation");
        } else {
            FileInputStream ExcelFile = new FileInputStream(absolutePath);

            excelWBook = new XSSFWorkbook(ExcelFile);

            Iterator<Sheet> sheetIterator = excelWBook.sheetIterator();

            while (sheetIterator.hasNext()) {
                XSSFSheet excelWSheet = (XSSFSheet) sheetIterator.next();
                Iterator<Row> rowIterator = excelWSheet.rowIterator();

                while (rowIterator.hasNext()) {
                    Row row = rowIterator.next();
                    if (row.getRowNum() != 0) {
                        this.serviceProcessData = new ServiceProcessData();
                        Iterator<Cell> cellIterator = row.cellIterator();

                        while (cellIterator.hasNext()) {
                            Cell cell = cellIterator.next();
                            int columnIndex = cell.getColumnIndex();
                            String cellValue = dataFormatter.formatCellValue(cell).trim();

                            System.out.println("Row Number :"+row.getRowNum()
                                        +"Column Number :"+columnIndex
                                        +"Value : "+cellValue);
                        }
                    }
                }
            }
        }

    } catch (Exception e) {
        LogLoader.errorLog.error(e.getMessage(), e);
        LogLoader.serverLog.error(e.getMessage());
    }

    LogLoader.serverLog.trace("Out getSpecificExcelWSheetDataList()");
}
于 2018-03-13T16:48:24.383 回答