【发布时间】:2014-11-05 23:07:17
【问题描述】:
我有一个将 excel 文件转换为 csv 文件的代码:
Microsoft.Office.Interop.Excel.Application reportExcel = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbooks reportBooks = null;
Microsoft.Office.Interop.Excel.Workbook reportBook = null;
Microsoft.Office.Interop.Excel.Sheets reportSheets = null;
Microsoft.Office.Interop.Excel._Worksheet reportSheet = null;
try
{
reportBooks = reportExcel.Workbooks;
reportBook = reportBooks.Open(excelFilePath);
reportSheets = reportBook.Sheets;
reportSheet = reportSheets.get_Item(1);
if (File.Exists(csvtempFile))
{
File.Delete(csvtempFile);
}
reportBook.SaveAs(csvtempFile, Microsoft.Office.Interop.Excel.XlFileFormat.xlCSVWindows, Type.Missing, Type.Missing, false, false);
...
}
catch (Exception ex)
{
...
}
finally
{
...
}
我在 csv 文件中得到下一个文本:
...
"Some strings","309,145","4,964,398",,"1,194,780",,
...
如您所见,数字包含一个额外的逗号。请告诉我如何删除多余的逗号以获得下一个值:
"Some strings","309,145","4964,398",,"1194,780",,
【问题讨论】:
-
你的意思是你想要
,"309145","4964398",,"1194780",,? -
哪个多余的逗号?表示千的,还是表示空列的?
-
我写道:“如您所见,数字包含一个额外的逗号”,因此:表示千位的数字。
-
这是您应该尝试不实现自己的 CSV 解析器的原因。虽然格式看似简单,但它有很多极端情况和例外情况,就像您刚刚发现的那样。有很多库,如果你稍微搜索一下,它们可以很好地处理这些情况。 CSV 文件还有另一个问题:没有元数据。除非对每个字段的含义有正式的规范,否则您可以知道字段中的数据类型。
-
所以我给你的建议是:不要制作自己的解析器,并为包含的数据使用可以处理其格式的转换器(例如以逗号作为千位分隔符的数字)。