невозможно преобразовать файл .csv в формат .xls - PullRequest
0 голосов
/ 03 июля 2018

Я использую этот код для преобразования файла CSV в Excel. Но я получаю записи только 2 столбцов в моем преобразованном файле Excel. Какие изменения могут быть внесены в этот код ..

public static void main(String[] args) throws Exception {    
    /* Step -1 : Read input CSV file in Java */
    String inputCSVFile = "csv_2_xls.csv";
    CSVReader reader = new CSVReader(new FileReader(inputCSVFile));
    /* Variables to loop through the CSV File */
    String [] nextLine; /* for every line in the file */            
    int lnNum = 0; /* line number */
    /* Step -2 : Define POI Spreadsheet objects */          
    HSSFWorkbook new_workbook = new HSSFWorkbook(); //create a blank workbook object
    HSSFSheet sheet = new_workbook.createSheet("CSV2XLS");  //create a worksheet with caption score_details
    /* Step -3: Define logical Map to consume CSV file data into excel */
    Map<String, Object[]> excel_data = new HashMap<String, Object[]>(); //create a map and define data
    /* Step -4: Populate data into logical Map */
    while ((nextLine = reader.readNext()) != null) {
        lnNum++;                        
        excel_data.put(Integer.toString(lnNum), new Object[] {nextLine[0],nextLine[1]});                        
    }
    /* Step -5: Create Excel Data from the map using POI */
    Set<String> keyset = excel_data.keySet();
    int rownum = 0;
    for (String key : keyset) { //loop through the data and add them to the cell
        Row row = sheet.createRow(rownum++);
        Object [] objArr = excel_data.get(key);
        int cellnum = 0;
        for (Object obj : objArr) {
            Cell cell = row.createCell(cellnum++);
            if(obj instanceof Double)
                cell.setCellValue((Double)obj);
            else
                cell.setCellValue((String)obj);
        }
    }
    /* Write XLS converted CSV file to the output file */
    FileOutputStream output_file = new FileOutputStream(new File("CSV2XLS.xls")); //create XLS file
    new_workbook.write(output_file);//write converted XLS file to output stream
    output_file.close(); //close the file
}

Ответы [ 2 ]

0 голосов
/ 03 июля 2018
Код

можно упростить до чего-то подобного.

String inputCSVFile = "csv_2_xls.csv";
CSVReader reader = new CSVReader(new FileReader(inputCSVFile));
HSSFWorkbook new_workbook = new HSSFWorkbook();
HSSFSheet sheet = new_workbook.createSheet("CSV2XLS");
int rownum = 0;
String [] nextLine;
while ((nextLine = reader.readNext()) != null) {
    Row row = sheet.createRow(rownum++);
    int cellnum = 0;
    for (String value : nextLine) {
        Cell cell = row.createCell(cellnum++);
        cell.setCellValue(value);
    }
}
0 голосов
/ 03 июля 2018

Это потому, что вы добавляете только два значения столбца

excel_data.put(Integer.toString(lnNum), new Object[] {nextLine[0],nextLine[1]});                        

1.Не нужно иметь Object[] - вы можете объявить, что он содержит String[] как возвращено CSVReader.readNext

 excel_data.put(Integer.toString(lnNum), nextLine);

2. Как правильно заметил @gagan singh в комментарии, использование HashMap приведет к потере порядка вставки. Вы можете напрямую создавать значения ячеек Excel, как вы читаете из CSV. Если вы все еще хотите использовать карту, используйте LinkedHashMap, поскольку это сохраняет порядок вставки.

Кроме того, я вижу, что вы проверяете obj instanceof Double при создании ячейки Excel. CSVParser обрабатывает все значения как строку и, следовательно, это не может быть истиной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...