gpt4 book ai didi

java - 通过java将csv转换为.xls,其中分隔分隔未正确完成

转载 作者:行者123 更新时间:2023-12-02 03:56:39 29 4
gpt4 key购买 nike

我有以下名为 Vabc.csv 的 csv 文件

REC_STATUS,TRADE_ID,   SETTLEMENT_DATE,     TRADE_EFFECTIVE_DATE,  PAYMENT_TYPE,                        VERSION,      BREAK_DOWN_BUCKET,         CAUSE,                     NUM_CASHFLOWS_AFFECTED,   PROFILE
Found , 178942690, 01-Feb-16, 03-Dec-14, "Coupon", 5, NOISY_BREAK_BUCKET, REC_TOOL_I | REC_TOOL_H , 1, TRADE_ Offshore
Found , 197743320, Various, 21-Dec-15, "Brokerage Estimated,Upfront Fee", 1, ACTUAL DATA BREAK BUCKET,ACTUAL_DATA_BREAK, 2, AVS Offshore

正如您在上面的 csv 文件中看到的,将其转换为 .xls 文件时,需要特别注意 PAYMENT_TYPE 列,因为其值之间包含一个逗号,但不应将其视为分隔符,并且它的值以以下开头双引号并以双引号结尾,因此应将其视为单值。

现在 PAYMENT_TYPE 列的位置(索引)也已固定在 csv 文件中,它将始终位于第五位置,如您在上面的 csv 文件中看到的那样,现在我必须将上面的 .csv 文件转换为 .csv 文件。通过java .xls 2003格式,我使用jdk 1.5

现在 .xls 中的列应如下所示,但问题是付款值应被视为从双引号开始并以双引号结束的单数,其余分隔符以逗号分隔

REC_STATUS,TRADE_ID,   SETTLEMENT_DATE,     TRADE_EFFECTIVE_DATE,  PAYMENT_TYPE,                        VERSION,      BREAK_DOWN_BUCKET,         CAUSE,                     NUM_CASHFLOWS_AFFECTED,   PROFILE
Found , 178942690, 01-Feb-16, 03-Dec-14, "Coupon", 5, NOISY_BREAK_BUCKET, REC_TOOL_I | REC_TOOL_H , 1, TRADE_ Offshore
Found , 197743320, Various, 21-Dec-15, "Brokerage Estimated,Upfront Fee", 1, ACTUAL DATA BREAK BUCKET,ACTUAL_DATA_BREAK, 2, AVS Offshore

我设计了以下程序,该程序不会生成上述格式的 .xls,请告知我如何更正我的上述程序,以便它可以生成 .xls,并且列应按上面所示的顺序排列.xls 表,下面是我的程序,请告知如何纠正

public class CSVToExcelConverter {

public static void main(String args[]) throws IOException
{
ArrayList arList=null;
ArrayList al=null;
String fName = "C:\\Vabc.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 == 4){
al.add(strar[j] + "," + strar[j+1]);
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("C:\\test.xls");
hwb.write(fileOut);
fileOut.close();
System.out.println("Your excel file has been generated");
} catch ( Exception ex ) {
ex.printStackTrace();
} //main method ends
}
}

各位,请告知任何早期帮助,任何解决方案,我们将不胜感激

最佳答案

我强烈建议使用现有的库来编写Excel文档,例如Apache POI 。它有两个组件

  • HSSF 用于处理 Excel '97(-2007) 文件格式
  • 用于处理 Excel 2007 OOXML (.xlsx) 文件格式的 XSSF

两者都是纯 Java 实现,因此您不需要安装 MS-Excel。

顺便说一句:我建议使用现有的解析器,而不是编写自己的 CSV 解析器,例如:

OpenCSV 的 Psydocode:

 CSVReader reader = new CSVReader(new FileReader("yourfile.csv"), ',', '"');
List<String[]> allLines = reader.readAll();
...
HSSFWorkbook hwb = new HSSFWorkbook();
HSSFSheet sheet = hwb.createSheet("new sheet");
...
for(String line: allLines) {
HSSFRow row = sheet.createRow((short)sheet.getLastRowNum());
for(int colIndex = 0; colIndex < line.lenght; colIndex ++) {
HSSFCell cell = row.createCell((short) colIndex);
cell.setCellType(Cell.CELL_TYPE_STRING);
cell.setCellValue(line[colIndex]);
}
}

关于java - 通过java将csv转换为.xls,其中分隔分隔未正确完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35380792/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com