OLEDB,写Excel单元没有领先撇号
我正在使用OLEDB(C#)写入Excel文件。 我需要的只是RAW数据格式。
我注意到所有单元格(标题和值)的前缀撇号(')
这是一种避免在所有文本单元格中添加它们的方法吗?
这是我的连接string:
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'。
确保对象存在,并且正确拼写其名称和path名称。
最后我试过使用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时,文本值的前面加上单引号。 这可能会在稍后使用新数据时造成问题。
数据是否明确的文字,可能被强制转换为数字格式? (抓着吸pipe…)
你可以只使用Excel DSN? 这似乎是相当无处不在。 我不知道.net,所以拿一点盐,但这里是我的连接string的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作为你的驱动程序?
希望能够帮助您迈向一个解决scheme!
为模板文件中附有撇号的列插入一些虚拟值。 举例来说,对于名称列放置类似这个dummyname,年龄列放99.而不是在模板中插入一个新行,只需更新行(更新…..其中名称='dummyname'和年龄= 99)。
这已经为我工作..
希望它也适用于你!
从连接string中删除IMEX = 1。
我知道,在Excel中input数据时,用撇号作为前缀是一种简单的方法,可以将其转换为文本字段。 你确定数据并不包含撇号? 如果在input时添加到数据中,则唯一的select是在input时捕获它们,并在一些自定义代码中处理它们。
检查Hkey_Local_Machine / Software / Microsoft / Jet / 4.0 / Engines / Excel / TypeGuessRows
这决定了在决定列的格式之前应该扫描多less行。 默认值是8,在select适当的数据types之前,0将强制ADO扫描所有列值。
这可能不适合您的要求,特别是如果您需要在Excel工作表中设置格式,但您是否考虑将数据写入CSV文件并使用.XLS扩展名保存?
另一件你可以尝试的方法是在你试图加载数据之前,在Excel工作表中明确地设置目标单元格的格式数据types,以键入“Text”(如通过Excel中的Format> Cells)。 默认情况下,单元格的types是“常规”,驱动程序可能会添加撇号以强制您的数据显示在文本中。
尝试以下hack来解决问题。 按照说明修改模板
- 在标题行正下方的第一个数据行中。 以所需格式格式化列。
- input一些虚拟值,如字符空格,数字值为0等
- 隐藏具有虚拟值的第一个数据行并保存模板
现在使用ADO.net运行插入脚本
-Venkat Kolla