Преобразование файла CSV в файл XLS, возникли проблемы с запятыми - PullRequest
0 голосов
/ 29 апреля 2019

Я конвертирую файл CSV в файл XLS. Когда я делаю преобразование, все работает идеально; однако, когда внутри ячейки запятая, она разделяет столбец на два столбца.

EX: | Привет, мир! | CSV FILE |

после конвертации

| Привет | Мир! | CSV FILE | X --- Что я получаю в настоящее время

| Привет, мир! | CSV FILE | O --- Что я хочу

String ab = thisLine.replaceAll (",", "");

Предполагая, что все используют пробел после запятой, replaceAll будет работать, но это не идеальное решение.

public void csv2excel(String csv) throws Exception
    {
        String inputCSVFile = csv + ".csv";
        ArrayList arList=null;
        ArrayList al=null;
        String fName = inputCSVFile;
        String thisLine; 
        int count=0; 
         FileInputStream fis = new FileInputStream(fName);
         DataInputStream myInput = new DataInputStream(fis);
        int i=0;
        arList = new ArrayList();
        while ((thisLine = myInput.readLine()) != null)
        {
         al = new ArrayList();
         //String ab = thisLine.replaceAll(", ", " ");
         //String strar[] ab.split(",");

         String strar[] = thisLine.split(",");
//Here is where I split the columns.


         for(int j=0;j<strar.length;j++)
         {
         al.add(strar[j]);
         }
         arList.add(al);
         i++;
        } 
        try
        {
         HSSFWorkbook hwb = new HSSFWorkbook();
         HSSFSheet sheet = hwb.createSheet("new sheet");
          for(int k=0;k<arList.size();k++)
          {
           ArrayList ardata = (ArrayList)arList.get(k);
           HSSFRow row = sheet.createRow((short) 0+k);
           for(int p=0;p<ardata.size();p++)
           {
            HSSFCell cell = row.createCell((short) p);
            String data = ardata.get(p).toString();
            if(data.startsWith("=")){
             cell.setCellType(CellType.STRING);
             data=data.replaceAll("\"", "");
             data=data.replaceAll("=", "");
             cell.setCellValue(data);
            }else if(data.startsWith("\"")){
                data=data.replaceAll("\"", "");
                cell.setCellType(CellType.STRING);
                cell.setCellValue(data);
            }else{
                data=data.replaceAll("\"", "");
                cell.setCellType(CellType.NUMERIC);
                cell.setCellValue(data);
            }
            //*/
         //   cell.setCellValue(ardata.get(p).toString());
           }
          } 
         FileOutputStream fileOut = new FileOutputStream(csv + ".xls");
         hwb.write(fileOut);
         fileOut.close();
        } catch ( Exception ex ) {
             ex.printStackTrace();
        }
        myInput.close();
        fis.close();
    }

Интересно, есть ли способ разбить столбец на столбец?

1 Ответ

0 голосов
/ 30 апреля 2019
public void csv2excel(String csv) throws Exception
    {
        String inputCSVFile = csv + ".csv";
        ArrayList arList=null;
        ArrayList al=null;
        String fName = inputCSVFile;
        String thisLine; 
        int count=0; 
         FileInputStream fis = new FileInputStream(fName);
         DataInputStream myInput = new DataInputStream(fis);
        int i=0;
        arList = new ArrayList();
        while ((thisLine = myInput.readLine()) != null)
        {
         al = new ArrayList();
         StringBuilder myLine = new StringBuilder(thisLine);
         int lineLength = thisLine.length();
         int bool = 0;
         for (int k = 0; k < lineLength; k++)
         {
             if (thisLine.charAt(k) == '"')
             {
                 bool++;
             }
             else if (thisLine.charAt(k) == ',' && bool % 2 != 0)
             {
                 myLine.setCharAt(k, ' ');
             }
         }

         //System.out.println(myLine);
         //String ab = thisLine.replaceAll(", ", " ");
         String strar[] = myLine.toString().split(",");
         for(int j=0;j<strar.length;j++)
         {
         al.add(strar[j]);
         }
         arList.add(al);
         i++;
        } 
        try
        {
         HSSFWorkbook hwb = new HSSFWorkbook();
         HSSFSheet sheet = hwb.createSheet("new sheet");
          for(int k=0;k<arList.size();k++)
          {
           ArrayList ardata = (ArrayList)arList.get(k);
           HSSFRow row = sheet.createRow((short) 0+k);
           for(int p=0;p<ardata.size();p++)
           {
            HSSFCell cell = row.createCell((short) p);
            String data = ardata.get(p).toString();
            if(data.startsWith("=")){
             cell.setCellType(CellType.STRING);
             data=data.replaceAll("\"", "");
             data=data.replaceAll("=", "");
             cell.setCellValue(data);
            }else if(data.startsWith("\"")){
                data=data.replaceAll("\"", "");
                cell.setCellType(CellType.STRING);
                cell.setCellValue(data);
            }else{
                data=data.replaceAll("\"", "");
                cell.setCellType(CellType.NUMERIC);
                cell.setCellValue(data);
            }
            //*/
         //   cell.setCellValue(ardata.get(p).toString());
           }
          } 
         FileOutputStream fileOut = new FileOutputStream(csv + ".xls");
         hwb.write(fileOut);
         fileOut.close();
        } catch ( Exception ex ) {
             ex.printStackTrace();
        }
        myInput.close();
        fis.close();
    }

Я закодировал, чтобы обойти это ... Выглядит некрасиво, но работает ...

Хотелось бы узнать, есть ли у кого-нибудь лучший ответ.

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