2016-02-09 33 views
-1

我作爲java開發人員工作,我想將.csv文件轉換爲.xls 2003格式,以便將我的csv轉換爲.xls文件的結構。 CSV文件會像在java中將csv轉換爲xls照顧列

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)"那麼它應該被視爲單獨不分割這第五列的值,所以對於第五列值邏輯應該從雙引號開始,並以雙引號結束,所以請告訴我如何將.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

使用計數器列。當你遇到第5列時,只需閱讀兩列並跳到第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

我在你的問題中沒有看到任何代碼 - @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

可能會跳過標題行 –