2017-08-24 192 views
0

尝试将xlsx转换为CSV,其中一列使用多个引号和逗号,转换为CSV时,将分隔为不同的单元格而不是一个单元格。 下面是场景,POI将xlsx转换为CSV逗号和双引号的Java

Actual Data

Converted

标题正在向多,附加代码

if(cell.getStringCellValue().contains(",")){ 
       if (cell.getStringCellValue().contains("\"")){ 
           String t= "\""+cell.getStringCellValue()+"\""; 
           data.append(t+","); 
           } 
           else{ 
           data.append("\""+cell.getStringCellValue()+"\""+","); 
           } 
          } 
+1

为什么不直接使用的一个许多经过适当编写和测试的开源CSV库,它能够逃脱权利,而不是试图自我推销? – Gagravarr

回答

1

你需要逃避这些特殊的标志:

如。如果你想在一个CSV文件中的值onetwo,three为两列用引号将第二栏:

one,"two,three" 

为了逃避双引号"列的值用双引号encolse并使用""逃脱值内引号。例如,如果你有abc"def一个字段应该被转义为:

"abc""def" 

因此,对于你的情况下,它可能是一个衬垫,而不是整个if声明:

data.append("\"").append(cell.getStringCellValue().replaceAll("\"", "\"\"")).append("\","); 
+0

感谢您的回复。我的情况如下,“BESPI:计划度量收集失败的任务”bespi_start bespi_mon.pl -m 600,609“和用户”$ AGENT_USER“。[策略:BESPI_Collect_Router_5m]”,“P3” –

+0

@ VICKY-TSC我已经为您更新我的答案和解决方案。 –