繁体   English   中英

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

[英]OLEDB, Writing Excel cell without leading 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等...)

任何想法?

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

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

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

你能使用Excel DSN吗? 它似乎无处不在。 我不知道.NET,所以请稍等一下,但这是我的连接字符串直接来自stock表的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作为你的驱动程序?

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

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

这对我有用..

希望它也适合你!

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

http://www.connectionstrings.com/excel

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

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

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

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

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

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

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

现在使用ADO.net运行插入脚本

-Venkat Kolla

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM