我将.xls转换为csv文件。我的代码很好。但是有一个问题,我正面临着。像一些单元格值有(xxx,Md)这些单元格值应该考虑一个值但是需要两个column.how在这里纠正问题,我附上了我的代码。
try
{
FileOutputStream fos = new FileOutputStream(outputFile);
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(inputFile));
workbook.setMissingCellPolicy(Row.CREATE_NULL_AS_BLANK);
HSSFSheet sheet = workbook.getSheetAt(0);
for(int rowIndex = sheet.getFirstRowNum(); rowIndex <= sheet.getLastRowNum(); rowIndex++)
{
Cell cell=null;
Row row = null;
int previousCell = -1;
int currentCell = 0;
row = sheet.getRow(rowIndex);
for(int colIndex=row.getFirstCellNum(); colIndex < row.getLastCellNum(); colIndex++)
{
cell = row.getCell(colIndex);
currentCell = cell.getColumnIndex();
/* Cell processing starts here*/
System.out.println("coll"+colIndex);
switch (cell.getCellType())
{
case Cell.CELL_TYPE_BOOLEAN:
cellDData.append(cell.getBooleanCellValue() + ",");
System.out.println("boo"+ cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_NUMERIC:
if (DateUtil.isCellDateFormatted(cell))
{
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
String strCellValue = dateFormat.format(cell.getDateCellValue());
cellDData.append(strCellValue +",");
}
else
{
System.out.println(cell.getNumericCellValue());
Double value = cell.getNumericCellValue();
Long longValue = value.longValue();
String strCellValue1 = new String(longValue.toString());
cellDData.append(strCellValue1 +",");
}
break;
case Cell.CELL_TYPE_STRING:
String out=cell.getRichStringCellValue().getString();
cellDData.append(cell.getRichStringCellValue().getString() + ",");
System.out.println("string"+cell.getStringCellValue());
break;
case Cell.CELL_TYPE_BLANK:
cellDData.append("" +",");
System.out.print("THIS IS BLANK");
break;
default:
break;
}
}
}
}
答案 0 :(得分:1)
您可以编写自己的代码,但我建议您使用SuperCSV或OpenCSV
这样的库对于CSV本身,有RFC-4180。这个RFC定义了什么&#39;适当的&#39; CSV应该看起来像;它会告诉你如何以及如何引用和逃避
答案 1 :(得分:0)
我可以想到以下两个选项:
示例代码......
case Cell.CELL_TYPE_STRING:
String out=cell.getRichStringCellValue().getString();
if(out.contains(",")) {
out = "\""+out+"\"";
}
cellDData.append(out + ",");
System.out.println("string"+out);
break;
P.S:您可以使用Strnigbuilder而不是字符串连接
答案 2 :(得分:0)
根据RFC-4180,每个字段可能会或可能不会用双引号引起来。因此,如果用双引号将每个单元格值括起来,则逗号之间的逗号将不被视为定界符。如果您采用这种方法,请确保在字段中出现的任何双引号之前都加上了另一个双引号。