C# 将XLS文件转换为CSV,但错误编号为单元格

C# 将XLS文件转换为CSV,但错误编号为单元格,c#,csv,xls,C#,Csv,Xls,以下代码允许您将文件从XLS转换为CSV: static void ConvertExcelToCsv(字符串excelFile,字符串csvOutputFile,int工作表编号=1) { //检查所需的两个文件是否存在,然后引发异常。 如果(!File.Exists(excelFile))抛出新的FileNotFoundException(excelFile); if(File.Exists(csvOutputFile)) { 文件。删除(csvOutputFile); } //连接字符串

以下代码允许您将文件从
XLS
转换为
CSV

static void ConvertExcelToCsv(字符串excelFile,字符串csvOutputFile,int工作表编号=1)
{
//检查所需的两个文件是否存在,然后引发异常。
如果(!File.Exists(excelFile))抛出新的FileNotFoundException(excelFile);
if(File.Exists(csvOutputFile))
{
文件。删除(csvOutputFile);
}
//连接字符串
var cnnStr=String.Format(“Provider=Microsoft.Jet.OLEDB.4.0;数据源={0};扩展属性=\”Excel 8.0;IMEX=1;HDR=NO\”,Excel文件);
//使用cnn参数创建新的OLEDB连接
var cnn=新的OLEDB连接(cnnStr);
//在内存中创建新的datatable以存储读取的excel电子表格
var dt=新数据表();
尝试
{
//打开名为“cnn”的新连接。
cnn.Open();
var schemaTable=cnn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,null);
if(schemaTable.Rows.Count
它将
XLS
转换为
CSV
文件,但当我有这种类型的单元格时:

将其转换为以下方式:

如何将代码更改为与
XLS
相同的值?

我上面评论中的解决方案将使用Excel互操作对象将Excel工作表导出为
CSV
文件

将其应用于您的案例:

使用系统;
使用System.IO;
使用System.Runtime.InteropServices;
使用Excel=Microsoft.Office.Interop.Excel;
//...
公共静态无效转换ExcelToCSV(
字符串文件,
字符串csvOutputFile,
int工作表编号=1)
{
Excel.Application xlApp=null;
Excel.Workbook xlWorkBook=null;
尝试
{
如果(!File.Exists(excelFile))
抛出新文件NotFoundException(excelFile);
if(File.Exists(csvOutputFile))
文件。删除(csvOutputFile);
xlApp=new Excel.Application();
xlWorkBook=xlApp.Workbooks.Open(excelFile,Type.Missing,true);
var xlSheet=xlWorkBook.Worksheets[工作表编号]为Excel.Worksheet;
如果(xlSheet为空)
抛出新ArgumentException();
xlSheet.SaveAs(csvOutputFile,Excel.XlFileFormat.xlCSV);
}
捕获(FileNotFoundException)
{
Console.WriteLine($“{excelFile}”不存在!”);
}
捕获(异常)
{
Console.WriteLine(“提供的工作表编号不存在”);
}
捕获(例外情况除外)
{
控制台写入线(例如消息);
}
最后
{
xl工作簿?关闭(假);
xlApp?.Quit();
如果(xlWorkBook!=null)封送.finalEleaseComObject(xlWorkBook);
如果(xlApp!=null)封送最后一个EleaseComObject(xlApp);
xl=null;
xlApp=null;
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
但是,将使用作为分隔符。如果需要使用特定字符,如~作为分隔符,请使用相同的方法:

使用系统;
使用System.IO;
使用System.Linq;
利用制度全球化;
使用System.Runtime.InteropServices;
使用Excel=Microsoft.Office.Interop.Excel;
//...
公共静态无效转换ExcelToCSV(
字符串文件,
字符串csvOutputFile,
int工作表编号=1,
字符串分隔符(空)
{
Excel.Application xlApp=null;
Excel.Workbook xlWorkBook=null;
尝试
{
如果(!File.Exists(excelFile))
抛出新文件NotFoundException(excelFile);
if(File.Exists(csvOutputFile))
文件。删除(csvOutputFile);
xlApp=new Excel.Application();
xlWorkBook=xlApp.Workbooks.Open(excelFile,Type.Missing,true);
var xlSheet=xlWorkBook.Worksheets[工作表编号]为Excel.Worksheet;
如果(xlSheet为空)
抛出新ArgumentException();
if(分隔符为空)
分隔符=CultureInfo.CurrentCulture.TextInfo.ListSeparator;
var xlRange=xlSheet.UsedRange;
使用(var sw=新StreamWriter(csvOutputFile))
//使用:
//foreach(xlRange.Rows.Cast()中的var r.Skip(1))
//如果第一行是标题行,您想跳过它。。。
foreach(xlRange.Rows中的Excel.Range行)
sw.WriteLine(string.Join(分隔符,row.Cells.Cast())
。选择(x=>x.Value2));
}
捕获(FileNotFoundException)
{
Console.WriteLine($“{excelFile}”不存在!”);
}
抓住(论点)