OLEDB, написание ячейки Excel без начального апострофа - PullRequest
6 голосов
/ 16 апреля 2009

Я пишу в файл Excel, используя OLEDB (C #). Мне нужен только формат данных 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 \ Новая папка \ 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 ]

7 голосов
/ 22 апреля 2009

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

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

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

2 голосов
/ 22 апреля 2009

Не могли бы вы просто использовать 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 в качестве драйвера?

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

1 голос
/ 17 июня 2010

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

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

Надеюсь, у вас это тоже получится!

0 голосов
/ 23 июля 2009

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

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

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

-Венкат Колла

0 голосов
/ 22 апреля 2009

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

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

0 голосов
/ 21 апреля 2009

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

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

0 голосов
/ 20 апреля 2009

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

0 голосов
/ 19 апреля 2009

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

http://www.connectionstrings.com/excel

...