如何使用java创建Excel表格中存在的数据的文件夹和子文件夹

时间:2015-03-12 06:59:06

标签: java excel apache-poi

我正在尝试使用excel的内容创建文件夹。我能够使用正确的数据读取excel文件,但我无法从该数据创建文件夹。

到目前为止我写的代码:

public static void main(String[] args) {

    try {

        InputStream ExcelFileToRead = new FileInputStream("C:\\Users\\430427\\Desktop\\vivek.xlsx");
        XSSFWorkbook wb = new XSSFWorkbook(ExcelFileToRead);
        XSSFWorkbook test = new XSSFWorkbook();
        XSSFSheet sheet = wb.getSheetAt(0);
        XSSFRow row;
        XSSFCell cell;
        Iterator rows = sheet.rowIterator();
        while (rows.hasNext()) {

            row = (XSSFRow) rows.next();
            Iterator cells = row.cellIterator();
            int i = 0;

            while (cells.hasNext()) {

                cell = (XSSFCell) cells.next();
                XSSFCell cell2 = row.getCell(i);
                i++;
                if(cell2 !=null){
                //if(cell2.toString().replaceAll("\\s", "").length()>0)
                    System.out.print("/"+cell2);
                    String dirName = "C:\\Users\\430427\\Desktop\\"+cell2;
                    new File(dirName).mkdir();
                }

            }
            System.out.println();
            i = 0;
        }

        System.out.println("\n");

    } 
    catch (IOException ex) {
        ex.printStackTrace();
    }

}

1 个答案:

答案 0 :(得分:1)

https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFCell.html

cell2是XSSFCell对象而不是字符串。

尝试cell2.getStringCellValue()中的String dirName = "C:\\Users\\430427\\Desktop\\"+cell2;获取字符串值。

我建议您从代码中获取用户配置文件,而不是硬编码路径。


修改

apache poi中没有columnIterator。所以我提出了另一种方法。 这个代码只对你的情况有意义(在第一列只有一行,在最后一列只有一行或多行),就像你在评论中说的那样:

  

数据类似于B1,101中的CALEG,C1中的html,标题A,标题   B,标题C,标题D分别在D1,D2,D3,D4中。

我希望能给你一些想法来实现你所需要的。

public static void main(String[] args) {

        XSSFWorkbook wb = null;

        try {
            // input file path here    
            InputStream ExcelFileToRead = new FileInputStream("D:\\test.xlsx");
            wb = new XSSFWorkbook(ExcelFileToRead);
            XSSFSheet sheet = wb.getSheetAt(0);
            XSSFRow row;
            XSSFCell cell;
            Iterator<Row> rows = sheet.rowIterator();

            // destination path here    
            String dirName = "D:\\tmp";
            String parentPath = null;

            int lastCellIdx = 0;

            while (rows.hasNext()) {

                row = (XSSFRow) rows.next();

                if (lastCellIdx != 0) {

                    new File(parentPath + "\\" + row.getCell(lastCellIdx).toString()).mkdir();

                } else {

                    Iterator<Cell> cells = row.cellIterator();

                    while (cells.hasNext()) {
                        cell = (XSSFCell) cells.next();

                        if (cell != null) {
                            dirName = dirName + "\\" + cell.toString();
                        }
                    }

                    lastCellIdx = row.getLastCellNum() - 1;
                    parentPath = new File(dirName).getParent();
                    new File(dirName).mkdirs();
                }

            }

        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            try {
                wb.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }