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

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

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

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,则仍然会看到撇号:

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

如果我按一下该单元格,然后按Enter键,则该撇号将消失。

最佳答案

根据我上面的评论:您无需将'显式添加到要插入的每个单元格值中。

相反,您应该从'语句中删除前导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文档。

10-04 16:18