2016-02-09 5 views
-1

Я работаю разработчиком java, и я хочу преобразовать CSV-файл в формат .xls 2003, чтобы мой csv был преобразован в .xls-файл в структуру моего. CSV-файл будет какПреобразование csv в xls в java, заботясь о столбце

REC_STATUS,TRADE_ID,SETTLEMENT_DATE,TRADE_EFFECTIVE_DATE,PAYMENT_TYPE,VERSION,BREAK_DOWN_BUCKET,CAUSE,NUM_CASHFLOWS_AFFECTED,PROFILE 
Found only in File :B,178942690,01-Feb-16,03-Dec-14,"Coupon",5,NOISY_BREAK_BUCKET,REC_TOOL_ISSUE_PAYMENT_DIRECTION_MISMATCH | REC_TOOL_ISSUE_NOTIONAL_MISMATCH | TRADE_VERSION,1,AVS Offshore 
Found only in File :B,197728700,Various,21-Dec-15,"Coupon,(x20)",2,ACTUAL DATA BREAK BUCKET,ACTUAL_DATA_BREAK,20,AVS Offshore 

Теперь, как вы можете видеть, что файл .csv является разделенной запятой, но для значения по типу платежа значения, как "Coupon,(x20)" теперь это значению следует рассматривать как одного, так что логика должна быть как и для пятого столбца, так как индексирование будет указывать начиная с 0, так что позиция столбца фиксируется внутри .csv-файла, поэтому для значения типа оплаты пятого столбца, если значение равно "Coupon,(x20)", тогда его следует рассматривать как single не разделяет это значение пятого столбца, поэтому для значения пятого столбца логика должна начинаться с двойных кавычек и заканчиваться двойными кавычками, поэтому, пожалуйста, сообщите, как я буду преобразовывать .csv в .xls, заботясь о пятом столбце, также

то, что я попытался это, как показано ниже, пожалуйста, посоветуйте, как я могу исправить этот код, и преодолеть от проблемы

public class CSVToExcelConverter { 

public static void main(String args[]) throws IOException 
{ 
ArrayList arList=null; 
ArrayList al=null; 
String fName = "test.csv"; 
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 strar[] = thisLine.split(","); 
for(int j=0;j<strar.length;j++) 
{ 
al.add(strar[j]); 
} 
arList.add(al); 
System.out.println(); 
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(Cell.CELL_TYPE_STRING); 
data=data.replaceAll("\"", ""); 
data=data.replaceAll("=", ""); 
cell.setCellValue(data); 
}else if(data.startsWith("\"")){ 
data=data.replaceAll("\"", ""); 
cell.setCellType(Cell.CELL_TYPE_STRING); 
cell.setCellValue(data); 
}else{ 
data=data.replaceAll("\"", ""); 
cell.setCellType(Cell.CELL_TYPE_NUMERIC); 
cell.setCellValue(data); 
} 
//*/ 
// cell.setCellValue(ardata.get(p).toString()); 
} 
System.out.println(); 
} 
FileOutputStream fileOut = new FileOutputStream("test.xls"); 
hwb.write(fileOut); 
fileOut.close(); 
System.out.println("Your excel file has been generated"); 
} catch (Exception ex) { 
ex.printStackTrace(); 
} //main method ends 
} 
} 
+0

Используйте счетчик для столбца. Когда вы столкнулись с пятым столбцом, просто прочитайте два столбца и перейдите в 7-й столбец. –

+0

@NikithaReddy Большое спасибо, может быть, вам понравится, пожалуйста, немного, было бы здорово, если бы вы могли отправить код, я бы отлаживал его, чтобы понять спасибо заранее – sss

+0

@SheetalMohanSharma Я отредактировал и добавил код, пожалуйста, проверьте – sss

ответ

0
public class CSVToExcelConverter { 

    public static void main(String args[]) throws IOException 
    { 
     ArrayList arList=null; 
     ArrayList al=null; 
     String fName = "test.csv"; 
     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 strar[] = thisLine.split(","); 
       for(int j=0;j<strar.length;j++) 
       { 
        if(j == 5){ 
         a1.add(strar[j] + "," + strar[j+1]); 
         j++; 
        } 
        al.add(strar[j]); 
       } 
       arList.add(al); 
       i++; 
     } 
    } 
} 
+0

Спасибо, но, пожалуйста, сообщите мне о моем решении выше, поскольку мне нужно реализовать логику в моем решении выше. – sss

+0

I не видите никакого кода в вашем вопросе - @sss –

+0

, пожалуйста, зарегистрируйтесь сейчас – sss

0

Вы можете использовать opencsv

CSVReader reader = new CSVReader(
       new FileReader("c:/xxx.csv"), ',', '"', 1); 
// Read all rows at once 
List<String[]> allRows = reader.readAll(); 

Этот код игнорирует разделитель - , в кавычках - " и пропустите первую строку (REC_STATUS,TRADE_ID,SETTLEMENT_DATE ...).

Если вам не нужно, чтобы пропустить первую строку просто использовать значения по умолчанию (сепаратор - , котировки - ")

CSVReader reader = new CSVReader(
        new FileReader("c:/xxx.csv")); 
// Read all rows at once 
List<String[]> allRows = reader.readAll(); 
+0

Пожалуйста, сообщите, что означает пропустить первую строку с контекстом. CSV-файл, который я дал – sss

+0

@sss Я обновляю свой ответ –

+0

Возможно, строка заголовка будет пропущена –

Смежные вопросы