我要生成与以前使用的Excel报告完全相同的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' ");
请参阅OLEDB中IMEX的默认值是什么?这个问题需要进一步IMEX
讨论。
也有提到的MSFT KB文章与相关IMEX
。从那篇文章中,IMEX的可能设置为:
0是导出模式-用于写入/插入Excel文件
1是导入模式-用于从Excel文件读取
2是链接模式(完全更新功能)
注意,IMEX
仍然可以找到描述完整行为的原始完整MSFT文档。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句