OLEDB,编写Excel单元格而不引用撇号

时间:2009-04-16 11:00:37

标签: c# .net excel oledb apostrophe

我正在使用OLEDB(C#)写入Excel文件。 我需要的只是RAW数据格式。

我注意到所有单元格(标题和值)都以撇号(')

为前缀

是否可以避免在所有文本单元格中添加它们?

这是我的连接字符串:

string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +  
 filePath + ";Extended Properties='Excel 8.0;HDR=Yes'";

我尝试过像这样使用IMEX = 1:

string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +  
   filePath + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"";

但之后我收到以下错误:

Microsoft Jet数据库引擎找不到该对象 'C:\ Temp \ New Folder \ MF_2009_04_19_2008-11-182009_DMBHCSAM1118.xls'。
确保对象存在,并且您正确拼写其名称和路径名称。

最后我尝试使用IMEX = 0,如下所示:

string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +  
   filePath + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=0\"";

这次没有提出任何事件。

不幸的是,撇号仍有问题 (所以我的每个值看起来都是:'123,'abc等......)

有什么想法吗?

8 个答案:

答案 0 :(得分:7)

http://support.microsoft.com/kb/257819有一个声明,说明当通过ADO将文本插入Excel时,这种行为可能是不可避免的:

  

关于使用ADO编辑Excel数据的注意事项:使用ADO将文本数据插入Excel时,文本值前面带有单引号。这可能会在以后处理新数据时出现问题。

数据是否明确是文本,是否可以强制转换为数字格式? (抓着稻草......)

答案 1 :(得分:2)

你能使用Excel DSN吗?它似乎无处不在。我不知道.NET,所以请稍等一下,但这是我的连接字符串直接从库存表中的OLEDB查询:

"Provider=MSDASQL.1;Persist Security Info=True;Extended Properties
=""DSN=Excel Files;DBQ=" & filePath & "\" & fileName &
";DriverId=1046;MaxBufferSize=2048;PageTimeout=5;"""

我使用了这个基本的INSERT语句:

INSERT INTO rngOutput VALUES (1, 'ABC', '$1.00', 1300)

当我这样做时,我的数据范围内没有任何撇号。我也使用Excel 2007,我看到你使用Excel 8.0作为你的驱动程序?

希望能帮助你找到解决方案!

答案 2 :(得分:1)

为模板文件中附有撇号的列插入一些虚拟值。例如,对于Name列,请输入类似于dummyname的内容,并将age列放入99.而不是在模板中插入新行,只需更新行(Update ..... where name ='dummyname',age = 99)。

这对我有用..

希望它也适合你!

答案 3 :(得分:0)

从连接字符串中删除IMEX = 1。

http://www.connectionstrings.com/excel

答案 4 :(得分:0)

我知道在将数据输入Excel时,在其前面添加撇号是一种简单的方法,可以将其作为文本字段。你确定数据实际上不包含撇号吗?如果它在入口时添加到数据中,那么您唯一的选择就是在导入时捕获它们并在一些自定义代码中处理它们。

答案 5 :(得分:0)

检查部门 Hkey_Local_Machine / Software / Microsoft / Jet / 4.0 / Engines / Excel / TypeGuessRows

这决定了在确定列格式之前应扫描的行数。 默认值为8,在选择适当的数据类型之前,0将强制ADO扫描所有列值。

答案 6 :(得分:0)

它可能不符合您的要求,特别是如果您需要在Excel工作表中设置格式,但是您是否考虑过将数据写入CSV文件并使用.XLS扩展名保存?

您可以尝试的另一件事是在Excel工作表中显式设置目标单元格的格式数据类型,以便在尝试加载数据之前键入“文本”(通过格式> Excel中的单元格)。默认情况下,单元格的类型为“常规”,驱动程序可能会添加撇号以强制您的数据以文本显示。

答案 7 :(得分:-1)

尝试以下hack来解决此问题。按照说明修改模板

  1. 在标题行下方的第一个数据行中。以所需格式格式化列。
  2. 输入一些虚拟值,例如字符空格,0表示数值等。
  3. 隐藏具有虚拟值的第一个数据行并保存模板
  4. 现在使用ADO.net运行您的插入脚本

    -Venkat Kolla