C#创建Excel文件-JET.OLEDB.4.0和ACE.OLEDB.12.0以不同的日期格式输出相同的数据列

C#创建Excel文件-JET.OLEDB.4.0和ACE.OLEDB.12.0以不同的日期格式输出相同的数据列,c#,excel,oledb,oledbcommand,C#,Excel,Oledb,Oledbcommand,我发现了一些有趣的事情,但我似乎找不到任何关于它的信息,尽管我在类似的案例中发现了一些有趣的信息 我正在尝试仅使用OLEDB和ADO.NET在服务器(即Windows 2003 server 32位)上创建Excel工作簿。(我尝试了ADO,但根本不起作用-情况不同。)我使用CREATETABLE语句生成Excel工作簿,然后使用INSERT INTO语句将值添加到电子表格中 我遇到的问题发生在我的开发机器上——一台Windows7 64位笔记本电脑。我还没有将其移动到生产环境(服务器) 我提取

我发现了一些有趣的事情,但我似乎找不到任何关于它的信息,尽管我在类似的案例中发现了一些有趣的信息

我正在尝试仅使用OLEDB和ADO.NET在服务器(即Windows 2003 server 32位)上创建Excel工作簿。(我尝试了ADO,但根本不起作用-情况不同。)我使用CREATETABLE语句生成Excel工作簿,然后使用INSERT INTO语句将值添加到电子表格中

我遇到的问题发生在我的开发机器上——一台Windows7 64位笔记本电脑。我还没有将其移动到生产环境(服务器)

我提取的数据存储在数据表(System.data)中,并且来自MS Access数据库。电子表格的连接字符串不同,这取决于我是尝试创建较新的格式还是较旧的格式

事情是这样的:当我使用Microsoft.Jet.OLEDB.4.0作为提供程序时,我得到了一个电子表格,它至少可以说是没有吸引力的,但是有正确格式的所有正确数据。特别是,我在这里谈论的是日期列——它们的格式为m/d/yyyy,这是正确的

当我使用Microsoft.ACE.OLEDB.12.0作为提供程序时,来自完全相同的数据表的日期格式以字符串的形式出现,格式为yyyy-mm-dd hh:mm:ss

我不知道为什么这两种格式的数据不一样。我为其中一个日期列检查了datatable的数据类型,无论使用哪个提供程序,它都作为DateTime检入

以下是正在使用的连接字符串:

OleDbConnection cn = new OleDbConnection(string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data source={0}{1};" +
                                                                "Extended Properties='Excel 12.0 Xml;HDR=YES;'", ssPth, ssXlsx));
二是:

OleDbConnection cn = new OleDbConnection(string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data source={0}{1};" +
                                                                "Extended Properties='Excel 8.0;HDR=YES;';", ssPth, ssXls));
我使用两个版本的CREATE TABLE和INSERT INTO语句完全相同。OLEDB.4.0电子表格在日期列中显示日期。OLEDB.12.0版本没有

有人知道为什么会这样吗?虽然我可以简单地使用Jet提供程序,但它无法创建最新Excel版本的xlsx格式。(确实如此,但在打开时会出现令人讨厌的警告消息。)但是如果日期列是字符串而不是日期,我就不能使用较新的版本

我尝试将“IMEX=1”添加为连接字符串的扩展属性部分,这会在INSERT INTO语句执行期间导致错误。研究该错误后发现,删除“IMEX=1”可以解决该问题,因此我不能在连接字符串中使用它

我很困惑如何处理这个问题,我在这里和其他论坛上读到的大多数帖子都指出了当数据来自Excel时如何解决这个问题,但我没有发现任何东西表明为什么数据库中的数据在Excel中看起来有所不同


非常感谢您的帮助。

与您使用的解决方案无关,但可以生成Excel文档,您可以满足您的要求。可用。