6

我正在使用 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 等......)

任何的想法?

4

8 回答 8

7

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

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

数据是显式文本,是否可能被强制转换为数字格式?(抓着稻草……)

于 2009-04-22T15:35:31.153 回答
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 作为驱动程序?

希望这会促使您找到解决方案!

于 2009-04-22T15:25:24.563 回答
1

为模板文件中附加撇号的列插入一些虚拟值。例如,对于 Name 列输入类似这样的 dummyname,age 列输入 99。不要在模板中插入新行,只需更新行(更新.....其中 Name = 'dummyname' 和 age =99)。

这对我有用..

希望它也对你有用!

于 2010-06-17T08:24:53.603 回答
0

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

http://www.connectionstrings.com/excel

于 2009-04-19T01:44:32.673 回答
0

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

于 2009-04-20T08:03:54.827 回答
0

检查电阻 Hkey_Local_Machine/Software/Microsoft/Jet/4.0/Engines/Excel/TypeGuessRows

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

于 2009-04-20T21:34:46.330 回答
0

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

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

于 2009-04-22T10:32:08.247 回答
-1

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

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

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

——文卡特·科拉

于 2009-07-22T20:03:15.460 回答