Запрос ADODB обновляет ячейку Excel как экранированный текст - PullRequest
4 голосов
/ 26 октября 2011

Я пытаюсь обновить ячейку в таблице Excel 2003, но проблема в том, что Excel добавляет одну кавычку в начале моего значения.Есть ли способ ввести значение как целое число, а не как экранированная строка?

Спасибо !!

Const filePath = "C:\1.xls"

Dim ado: Set ado = CreateObject("ADODB.Connection")
ado.ConnectionString = "Provider=Microsoft.JET.OLEDB.4.0;Data Source=""" _
                    & filePath & """;Extended Properties=""Excel 8.0;HDR=No"";"

ado.CursorLocation = 3
ado.Open

ado.Execute "UPDATE [Sheet1$A1:A1] SET F1 = 1;"

ado.Close

Приведенный выше код обновляет ячейку A1 до '1

Ответы [ 2 ]

2 голосов
/ 27 октября 2011

Мне удалось решить это с помощью подсказок Алекса К и одних дней.

Решение состоит в том, чтобы просто отформатировать ячейки Excel, которые я хочу обновить, с правильным типом (число, пользовательский и т. Д.), Прежде чем запускать мой сценарий.Я уверен, что я попробовал это несколько дней назад, и это не сработало ... но я думаю, что, должно быть, было поздно!

2 голосов
/ 26 октября 2011

Я бы предположил, что комбинация значений реестра и существующих данных приводит к тому, что тип данных столбца будет рассматриваться как текст. Обратите внимание, что при использовании поставщика OLE DB для ACE / Jet в Excel используется только один числовой тип: FLOAT (Double).

Чтобы обнаружить рассматриваемый тип данных, попробуйте выполнить это:

Const filePath = "C:\1.xls"

Dim ado: Set ado = CreateObject("ADODB.Connection")
ado.ConnectionString = "Provider=Microsoft.JET.OLEDB.4.0;Data Source=""" _
                    & filePath & """;Extended Properties=""Excel 8.0;HDR=No"";"

ado.CursorLocation = 3
ado.Open

Dim rs
Set rs = ado.Execute("SELECT DISTINCT TYPENAME(F1) FROM [Sheet1$A1:A1];")
MsgBox rs.GetString

ado.Close
...