我想生成与以前使用的Excel报告相同的报告(与旧版本的Excel)。唯一的问题是,旧式报告中的所有单元格都以带撇号字符的字符串形式呈现:
我使用以下代码创建了基本相同的报告:
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键,则该撇号将消失。
最佳答案
根据我上面的评论:您无需将'
显式添加到要插入的每个单元格值中。
相反,您应该从'
语句中删除前导INSERT .. VALUES (...)
字符,并通过添加IMEX=0
或IMEX=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文档。