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

时间:2017-02-23 08:36:56

标签: c# excel oledb export-to-excel

我想生成与之前使用的Excel报告相同的(使用旧版本的Excel)。唯一的问题是旧样式报告中的所有单元格都显示为带有撇号字符的字符串:

enter image description here

我使用下一个代码创建了基本相同的报告:

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,那么我仍然会看到我的撇号:

enter image description here

如果按下按钮,然后按回车键,则此撇号将消失。

2 个答案:

答案 0 :(得分:1)

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

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

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' ");

有关IMEX次讨论,请参阅What is the default value of IMEX in OLEDB?问题。

此外,还提到与IMEX相关的MSFT KB article。从那篇文章中可以看出IMEX的设置是:

  

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

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

答案 1 :(得分:0)

听起来你想做与Format = Text相同的事情。

formatRange.NumberFormat = "@";

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