[英]Convert .xls to csv file using apache poi
我已经将.xls转换为csv文件。我的代码工作得很好。但是我遇到了一个问题。就像某些单元格值具有(xxx,Md)一样,这些单元格值应考虑一个值但要占用两列。如何纠正此问题在这里,我已附上我的代码。
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;
}
}
}
}
我可以想到以下两个选项:
样例代码...
case Cell.CELL_TYPE_STRING:
String out=cell.getRichStringCellValue().getString();
if(out.contains(",")) {
out = "\""+out+"\"";
}
cellDData.append(out + ",");
System.out.println("string"+out);
break;
PS:您可以使用Strnigbuilder而不是字符串连接
根据RFC-4180 ,每个字段可以或不可以用双引号引起来。 因此,如果用双引号将每个单元格值括起来,则逗号之间的逗号将不被视为定界符。 如果您采用这种方法,请确保对字段中出现的所有双引号进行转义,方法是在其前面加上另一个双引号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.