使用OleDB连接将撇号字符添加到Excel导出

我想要生成与之前(使用旧版本的Excel)相同的Excel报告。 唯一的问题是,旧式报告中的所有单元格都以带有撇号字符的string呈现:

在这里输入图像描述

我用下面的代码创build了基本相同的报告:

oleDbConnection = new System.Data.OleDb.OleDbConnection( "provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileFullPath + ";Extended Properties='Excel 12.0 Xml;HDR=YES' "); oleDbConnection.Open(); oleDbCommand.Connection = oleDbConnection; string commandHeader = String.Join("] char(255), [", headers); commandHeader = "[" + commandHeader + "]"; commandHeader = "CREATE TABLE data (" + commandHeader + " char(255))"; oleDbCommand.CommandText = commandHeader; oleDbCommand.ExecuteNonQuery(); foreach (var item in exportList) { string line = String.Join("\",\"\'", new string[] {item.Foreman_ID, item.DateApp.Date.ToString("yyyyMMdd"), item.TimeApp, item.Employee_ID, item.ProductionOrder, item.OperationNumber, item.ConfirmationNumber, item.date.Date.ToString("yyyyMMdd"), item.TotalHours.ToString("0.000").Replace(",", "."), item.SalaryType, item.TimeType, item.ExtraPrice.ToString("0.00").Replace(",", "."), item.ExtraHours, item.ActualPC, item.PcPriceSplit, item.CostCenter}); line = line.Replace(" ", String.Empty); line = "\"\'" + line + "\""; oleDbCommand.CommandText = "Insert into data values(" + line + ")"; oleDbCommand.ExecuteNonQuery(); } oleDbConnection.Close(); 

此代码生成相同的行,每个单元格以撇号字符开始。 但是,如果我打开生成的Excel,那么我仍然可以看到我的撇号:

在这里输入图像描述

如果我按下单元格,然后按回车,那么这个撇号将消失。

根据我上面的评论:你不需要明确添加到插入的每个单元格值。

相反,您应该从INSERT .. VALUES (...)语句中删除前导字符,并通过添加IMEX=0IMEX=2更改连接string:

 oleDbConnection = new System.Data.OleDb.OleDbConnection( "provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileFullPath + ";Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=0' "); 

请参阅OLEDB中IMEX的默认值是什么? 问题一些额外的IMEX讨论。

还有与IMEX相关的MSFT 知识库文章 。 从这篇文章IMEX可能的设置是:

0是导出模式 – 用于写入/插入Excel文件
1是导入模式 – 用于从Excel文件读取
2是链接模式(完全更新function)

请注意,描述完整IMEX行为的原始完整MSFT文档仍然可以find。

这听起来像你想要做Format = Text一样的事情。

 formatRange.NumberFormat = "@"; 

这将指定范围的格式设置为文本格式。