OLEDB, запись ячейки Excel без ведущего Апострофа

Я пишу в файл Excel с помощью OLEDB (C#). Мне нужен только формат необработанных данных.

Я заметил, что все ячейки (заголовки и значения) предваряются Апострофом (')

Это способ избежать добавления их во все текстовые ячейки?

вот моя строка подключения:

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 database engine не удалось найти объект "C:TempNew папка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"";

на этот раз без исключения подняли.

к сожалению, все еще есть проблема с apostrophes (таким образом, каждое мое значение выглядит как: '123,' abc так далее...)

есть идеи?

8 ответов


http://support.microsoft.com/kb/257819 имеет заявление о том, что это поведение может быть неизбежно при вставке текста в Excel через ADO:

предупреждение о редактировании данных Excel с помощью ADO: при вставке текстовых данных в Excel с помощью ADO текстовое значение предваряется одной кавычкой. Это может вызвать проблемы при дальнейшей работе с новыми данными.

- Это текст данных явно, может ли он быть принудительным в числовой формат? (хватаясь за соломинку...)


не могли бы вы просто использовать 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 INTO rngOutput VALUES (1, 'ABC', '.00', 1300)

когда я это сделал, у меня не было никаких апострофов в мой диапазон данных. Я также использую Excel 2007, и я вижу, что вы используете Excel 8.0 в качестве драйвера?

надеюсь, что подталкивает вас к решению!


вставьте некоторые фиктивные значения для столбцов, к которым прикреплен Апостроф в файле шаблона. Скажем например для столбца Name поставьте что-то вроде этого dummyname, а age column поставьте 99. Вместо того, чтобы вставлять новую строку в шаблон, просто обновите строку (Update..... где Name = 'dummyname' и age =99).

Это сработало для меня..

надеюсь, что это работает для вас тоже!


удалите IMEX=1 из строки подключения.

http://www.connectionstrings.com/excel


Я знаю, что при вводе данных в Excel, префикс с апострофом является простым способом сделать его в текстовое поле. Вы уверены, что данные на самом деле не содержит Апостроф? Если он добавляется к данным во время ввода, единственным вариантом будет поймать их во время импорта и работать с ними в некотором пользовательском коде.


Регистрация resistry Hkey_Local_Machine / Программное Обеспечение / Microsoft/Jet/4.0/Двигатели/Excel / TypeGuessRows

Это решает, сколько строк следует сканировать, прежде чем решать формат столбца. По умолчанию 8, и 0 заставит ADO сканировать все значения столбцов перед выбором соответствующего типа данных.


Это может не соответствовать вашим требованиям, особенно если вам нужно настроить форматирование на листе Excel, но вы рассматривали возможность записи данных в файл CSV и сохранения его с помощью .Расширение XLS?

другая вещь, которую вы могли бы попробовать, - это явно установить типы данных формата ваших целевых ячеек на листе Excel, чтобы ввести "текст" (как через формат > ячейки в Excel), прежде чем пытаться загрузить данные. По умолчанию ячейки будут иметь тип "общие", и драйвер может добавьте Апостроф, чтобы заставить ваши данные отображаться в тексте.


попробуйте следующий хак, чтобы решить эту проблему. Изменить шаблон в соответствии с инструкциями

  1. В первой строке данных чуть ниже строки заголовка. Отформатируйте столбцы в требуемом формате.
  2. введите некоторые фиктивные значения, такие как пробел для символов, 0 для числовых значений и т. д.
  3. скрыть первую строку данных, которая имеет пустые значения и сохранить шаблон

теперь запустите сценарий вставки, используя ADO.net

-Венкат Колла!--1-->