Как записать все содержимое папки в Excel, используя Apache POI? - PullRequest
0 голосов
/ 05 ноября 2019

Я кодировал это, чтобы поместить все файлы и папки по следующему пути C: \ Users \ hmoorthy \ workspace в Excel. Но переменная i создает некоторые проблемы. Я обнаружил, что рекурсия displayDirectoryContents (file, i) , используемая для поиска файла, является каталогом или нет, имея старое значение i , которое вызывает перезапись в excel. Таким образом, общее количество файлов не попадает внутрь Excel.

OUTPUT папка: C: \ Users \ hmoorthy \ workspace.metadata 0 file: C: \ Users \ hmoorthy \ workspace.metadata.bak_0.log 1 файл: C: \ Users \ hmoorthy \ workspace.metadata.lock 2 файл: C: \ Users \ hmoorthy \ workspace.metadata.log 3 папка: C: \ Users \ hmoorthy \ workspace.metadata.mylyn 4 папка:Файл C: \ Users \ hmoorthy \ workspace.metadata.mylyn.taskListIndex 5: C: \ Users \ hmoorthy \ workspace.metadata.mylyn.taskListIndex \ сегменты_1 6 файл: C: \ Users \ hmoorthy \ workspace.metadata.mylyn.taskLфайл \ write.lock 7: C: \ Users \ hmoorthy \ workspace.metadata.mylyn.tasks.xml.zip 7 папка: C: \ Users \ hmoorthy \ workspace.metadata.mylyn \ contexts 8 файл: C: \ Users \hmoorthy \ workspace.metadata.mylyn \ repositories.xml.zip 10 файл: C: \ Users \ hmoorthy \ workspace.metadata.mylyn \ tasks.xml.zip 11 папка: C: \ Users \ hmoorthy \ workspace.metadata.plugins 6папка: C: \ Users \ hmoorthy \ workspace.metadata.plugins \ oracle.eclipse.tools.common.services 7 папка: C: \ Users \ hmoorthy \ workspace.metadata.plugins\ oracle.eclipse.tools.common.services \ CompareExcel 8 file: C: \ Users \ hmoorthy \ workspace.metadata.plugins \ oracle.eclipse.tools.common.services \ CompareExcel \ 1.artifact.sjo 9 файл: C:\ Users \ hmoorthy \ workspace.metadata.plugins \ oracle.eclipse.tools.common.services \ CompareExcel \ 1.command.sjo 10 файл: C: \ Users \ hmoorthy \ workspace.metadata.plugins \ oracle.eclipse.tools. файл common.services \ CompareExcel \ command.num 11: C: \ Users \ hmoorthy \ workspace.metadata.plugins \ oracle.eclipse.tools.common.services \ CompareExcel \ project.num 12

Вы можете видетьдва раза i печатает 11. Итак, предыдущее значение в 11-1-й строке в excel заменяется. Я хочу напечатать все значения.

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class App2 {

    private static String dest = "C:\\Users\\hmoorthy\\test.xls";
    private static HSSFWorkbook myWorkBook = new HSSFWorkbook();
    private static HSSFSheet mySheet = myWorkBook.createSheet();

    public static void excelLog(String filename, String message, int rowNum) {

        HSSFRow myRow = null;
        HSSFCell myCell = null;
        String excelData[][] = new String[1][2];
        excelData[0][0] = filename;
        excelData[0][1] = message;

        myRow = mySheet.createRow(rowNum);

        for (int cellNum = 0; cellNum < 2; cellNum++) {
            myCell = myRow.createCell(cellNum);
            myCell.setCellValue(excelData[0][cellNum]);
        }
        try {
            FileOutputStream out = new FileOutputStream(dest);
            myWorkBook.write(out);
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        int i = 0;
        File currentDir = new File("C:\\Users\\hmoorthy\\workspace");
        displayDirectoryContents(currentDir,i);
    }
    public static void displayDirectoryContents(File dir,int i) {
        try {
            File[] files = dir.listFiles();
            for (File file : files) {
                if (file.isDirectory()) {
                    //System.out.println("folder:" + file.getCanonicalPath());
                    //System.out.println("file          "+i);
                    excelLog("Folder",file.getCanonicalPath(),i);
                    i=i+1;
                    displayDirectoryContents(file,i);
                    i=i+1;
                } else {
                    //System.out.println("file:" + file.getCanonicalPath());
                    excelLog("File ",file.getCanonicalPath(),i);
                    i=i+1;
                }

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

СПАСИБО;)

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

Я получил ответ. Спасибо за вашу помощь: -)

Чтобы обновить значение i , я сделал функцию displayDirectoryContents () для возврата значения i .

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class writeExcel {

private static String dest = "C:\\Users\\hmoorthy\\test.xls";
private static HSSFWorkbook myWorkBook = new HSSFWorkbook();
private static HSSFSheet mySheet = myWorkBook.createSheet();

public static void excelLog(String filename, String message, int rowNum) {

    HSSFRow myRow = null;
    HSSFCell myCell = null;
    String excelData[][] = new String[1][2];
    excelData[0][0] = filename;
    excelData[0][1] = message;

    myRow = mySheet.createRow(rowNum);

    for (int cellNum = 0; cellNum < 2; cellNum++) {
        myCell = myRow.createCell(cellNum);
        myCell.setCellValue(excelData[0][cellNum]);
    }
    try {
        FileOutputStream out = new FileOutputStream(dest);
        myWorkBook.write(out);
        out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public static void main(String[] args) {
    int i = 0;
    File currentDir = new File("C:\\Users\\hmoorthy\\workspace");
    displayDirectoryContents(currentDir,i);
}
public static int displayDirectoryContents(File dir,int i) {
    try {
        File[] files = dir.listFiles();
        for (File file : files) {
            if (file.isDirectory()) {
                System.out.println("folder:" + file.getCanonicalPath()+"        "+i);
                //System.out.println("file          "+i);
                excelLog("Folder",file.getCanonicalPath(),i);
                i=i+1;
                i = displayDirectoryContents(file,i);
                //i=i+1;
            } else {
                System.out.println("file:" + file.getCanonicalPath()+"        "+i);
                excelLog("File ",file.getCanonicalPath(),i);
                i=i+1;
            }

        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return i;
}

}

0 голосов
/ 05 ноября 2019

Проверьте, работает ли это для вас:

public static void main(String[] args) {
    javax.swing.filechooser.FileNameExtensionFilter filtroExcel = new javax.swing.filechooser.FileNameExtensionFilter("Documento Microsoft Excel 2003/2013", "xls");
    final JFileChooser miFile = new JFileChooser();
    miFile.setFileFilter(filtroExcel);
    int retornaValor = miFile.showSaveDialog(null);
    miFile.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    if (retornaValor == JFileChooser.APPROVE_OPTION) {
        FileOutputStream fileNew = null;
        File fileExcel = null;
        try{
            fileExcel = miFile.getSelectedFile();
            String nombre = fileExcel.getName();
            if (nombre.indexOf('.') == -1) {
                nombre += ".xls";
                fileExcel = new File(fileExcel.getParentFile(), nombre);
            }
            fileNew = new FileOutputStream(fileExcel);
            // header
            HSSFWorkbook book=new HSSFWorkbook();
            HSSFSheet sheet = book.createSheet("File List");
            CellStyle estilo=book.createCellStyle();
            estilo.setFillBackgroundColor(IndexedColors.GREY_40_PERCENT.getIndex());
            HSSFFont fondo = book.createFont();
            fondo.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
            estilo.setFont(fondo);
            estilo.setAlignment(CellStyle.ALIGN_CENTER);

            HSSFRow title = sheet.createRow((short) 0);
            HSSFCell celda = title.createCell((short) 0);
            celda.setCellStyle(estilo);
            celda.setCellValue("My file list");
            writeFiles(sheet, "C:\\Users\\hmoorthy\\workspace");

            book.write(fileNew);
        }
        catch(IOException ex){
            System.out.println(ex.getMessage());
        }
        finally {
            try {
                fileNew.close();
                // open file xls
                if (System.getProperty("os.name").equals("Linux"))
                    Runtime.getRuntime().exec("libreoffice " + fileExcel.getAbsolutePath());
                else
                    Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + fileExcel.getAbsolutePath());
            } 
            catch (IOException ex) {
                System.out.println(ex.getMessage());
            }
        }
    }
}

public static void writeFiles(HSSFSheet sheet, String path){
    File directorio=new File(path);
    if(directorio.exists()){
        File[] files=directorio.listFiles();
        for(int i=0;i<files.length;i++){
            try {
                if(files[i].isDirectory())
                    writeFiles(sheet, files[i].getCanonicalPath());
                else {
                    HSSFRow row=sheet.createRow((short)(i + 1));
                    HSSFCell celdasReg = row.createCell(0);
                    celdasReg.setCellValue(files[i].getCanonicalPath());
                }
            }
            catch (IOException ex){
                System.out.println(ex.getMessage());
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...