Pelena, первые 2-ва поста- это были вопросы и просьбы к готовым решениям. А вот с 3-го Поста уже было описание отдельной проблеммы и просьба о помощи уже по делу.....
Pelena, первые 2-ва поста- это были вопросы и просьбы к готовым решениям. А вот с 3-го Поста уже было описание отдельной проблеммы и просьба о помощи уже по делу.....SvetaS
1. спасибы принимаются) 2. не понятно только, чего от меня хотят. Или думают, что "прилетит к нам волшебник в голубом вертолете и бесплатно покажет кино"?
"Экселем я больше не занимаюсь". У меня его даже на компьютере сейчас нет. Последний раз видел его год назад или больше.
1. спасибы принимаются) 2. не понятно только, чего от меня хотят. Или думают, что "прилетит к нам волшебник в голубом вертолете и бесплатно покажет кино"?
"Экселем я больше не занимаюсь". У меня его даже на компьютере сейчас нет. Последний раз видел его год назад или больше.
не выгружает все данные с листа. А именно на листе 156 000 строк , а он в массив грузит лишь 65536 методом ADO.ToArray() girl_sad т.е.
Dim ADO As New ADO Dim Arr As Variant ADO.DataSource = "d:\ÀÒÁ àâãóñò 2015_ðûáà_649.xlsm" ADO.Query ("SELECT * FROM [лист1$A:AC]")
Arr = ADO.ToArray()
т.е. в окне отладчика "Locals" Arr(65536) - максимальное число А нужно чтобы обрабатывались данные размером хотя бы до 200 000 - 350 000 строк.
Погуглил по строке: "ado.recordset excel 65536" (можно повторить самостоятельно). Показалось, что одна из ссылок (вторая в выборке) может помочь: http://forum.chandoo.org/threads....e.12492
Как я понял, при выборке с листа Excel ограничение 65536 срабатывает, если в качестве источника указан диапазон, т.е. после имени листа (после $) указаны колонки или угловые ячейки. Если же указано только имя листа (с заключительным $), то должны вернуться строки свыше 65536 - до стандартного миллионного лимита в версиях 2007+.
Т.е вместо: [vba]
Код
ADO.Query ("SELECT * FROM [лист1$A:AC]")
[/vba] напишите: [vba]
Код
ADO.Query ("SELECT * FROM [лист1$]")
[/vba]
P.S. Ну, и не стесняемся использовать Google самостоятельно!
не выгружает все данные с листа. А именно на листе 156 000 строк , а он в массив грузит лишь 65536 методом ADO.ToArray() girl_sad т.е.
Dim ADO As New ADO Dim Arr As Variant ADO.DataSource = "d:\ÀÒÁ àâãóñò 2015_ðûáà_649.xlsm" ADO.Query ("SELECT * FROM [лист1$A:AC]")
Arr = ADO.ToArray()
т.е. в окне отладчика "Locals" Arr(65536) - максимальное число А нужно чтобы обрабатывались данные размером хотя бы до 200 000 - 350 000 строк.
Погуглил по строке: "ado.recordset excel 65536" (можно повторить самостоятельно). Показалось, что одна из ссылок (вторая в выборке) может помочь: http://forum.chandoo.org/threads....e.12492
Как я понял, при выборке с листа Excel ограничение 65536 срабатывает, если в качестве источника указан диапазон, т.е. после имени листа (после $) указаны колонки или угловые ячейки. Если же указано только имя листа (с заключительным $), то должны вернуться строки свыше 65536 - до стандартного миллионного лимита в версиях 2007+.
Т.е вместо: [vba]
Код
ADO.Query ("SELECT * FROM [лист1$A:AC]")
[/vba] напишите: [vba]
Код
ADO.Query ("SELECT * FROM [лист1$]")
[/vba]
P.S. Ну, и не стесняемся использовать Google самостоятельно! Gustav
Gustav, Добрый День! Можно ещё один вопрос , по данной теме. Подскажите, когда не знаешь имя листа при работе с закрытой книгой (когда имя книги берём через диалог), как тогда можно загрузить данные - вернее как тогда нужно изменить строку [vba]
Код
ADO.Query ("SELECT * FROM [лист1$]")
[/vba] Помогите, пожалуйста. Заранее огромное спасибо.... :pray: :pray: [moder] SvetaS, прочитайте уже наконец Правила форума! Новый вопрос - новая тема. Не вынуждайте закрывать тему![/moder]
Gustav, Добрый День! Можно ещё один вопрос , по данной теме. Подскажите, когда не знаешь имя листа при работе с закрытой книгой (когда имя книги берём через диалог), как тогда можно загрузить данные - вернее как тогда нужно изменить строку [vba]
Код
ADO.Query ("SELECT * FROM [лист1$]")
[/vba] Помогите, пожалуйста. Заранее огромное спасибо.... :pray: :pray: [moder] SvetaS, прочитайте уже наконец Правила форума! Новый вопрос - новая тема. Не вынуждайте закрывать тему![/moder]SvetaS
Сообщение отредактировал Pelena - Воскресенье, 27.09.2015, 15:13
Модератор: - это вопрос по данной теме "ADO - класс для работы с данными Excel при помощи SQL", я ничего не меняла . Не понимаю, зачем Вам "дублировать темы" [moder]Это - ветка ГОТОВЫЕ РЕШЕНИЯ. Вопросы задавайте в разделе ВОПРОСЫ ПО EXCEL. За нарушение п. 5b Правил форума Вам бан на сутки для изучения Правил[/moder]
Модератор: - это вопрос по данной теме "ADO - класс для работы с данными Excel при помощи SQL", я ничего не меняла . Не понимаю, зачем Вам "дублировать темы" [moder]Это - ветка ГОТОВЫЕ РЕШЕНИЯ. Вопросы задавайте в разделе ВОПРОСЫ ПО EXCEL. За нарушение п. 5b Правил форума Вам бан на сутки для изучения Правил[/moder]SvetaS
Сообщение отредактировал Pelena - Воскресенье, 27.09.2015, 15:31
Set cat = CreateObject("ADOX.Catalog") cat.ActiveConnection = cnn For Each tbl In cat.Tables Debug.Print tbl.Name Next tbl
End Sub
[/vba] Имена рабочих листов обычно можно выделить из общего списка по знаку доллара в конце наименования, хотя никто не запрещает включать знак $ в наименование листа (хоть первым символом!). Поэтому требуется более изысканный анализ строки имени на содержание $. Но это не спасает от главной неприятности - последовательность листов и диапазонов в коллекции Tables в общем случае не соответствует последовательности листов в коллекции Worksheets. Как я понял, в ADOX.Catalog имена в коллекции Tables автоматически сортируются по алфавиту.
Поэтому если при уже известном имени рабочей книги нужно узнать имя первого рабочего листа, то следует ненадолго открыть эту книгу (например, в невидимом сеансе) и без лишних наворотов и головной боли выяснить Worksheets(1).Name. Лично я другого способа не вижу...
Set cat = CreateObject("ADOX.Catalog") cat.ActiveConnection = cnn For Each tbl In cat.Tables Debug.Print tbl.Name Next tbl
End Sub
[/vba] Имена рабочих листов обычно можно выделить из общего списка по знаку доллара в конце наименования, хотя никто не запрещает включать знак $ в наименование листа (хоть первым символом!). Поэтому требуется более изысканный анализ строки имени на содержание $. Но это не спасает от главной неприятности - последовательность листов и диапазонов в коллекции Tables в общем случае не соответствует последовательности листов в коллекции Worksheets. Как я понял, в ADOX.Catalog имена в коллекции Tables автоматически сортируются по алфавиту.
Поэтому если при уже известном имени рабочей книги нужно узнать имя первого рабочего листа, то следует ненадолго открыть эту книгу (например, в невидимом сеансе) и без лишних наворотов и головной боли выяснить Worksheets(1).Name. Лично я другого способа не вижу...Gustav
Подскажите, пожалуйста, для чего в данной строке: "Provider='Microsoft.Jet.OLEDB.4.0';Data Source=':1';Extended Properties='Excel 4.0;HDR=:2;IMEX=1';" используются одинарные кавычки? Спасибо.
Подскажите, пожалуйста, для чего в данной строке: "Provider='Microsoft.Jet.OLEDB.4.0';Data Source=':1';Extended Properties='Excel 4.0;HDR=:2;IMEX=1';" используются одинарные кавычки? Спасибо.Guest2029
Вся строка отделена в двойные кавычки, поэтому внутри для отдельных строк используют одинарные, более того иногда еще и скобки квадратные пользуют, а иногда и фигурные.
Вся строка отделена в двойные кавычки, поэтому внутри для отдельных строк используют одинарные, более того иногда еще и скобки квадратные пользуют, а иногда и фигурные.PowerBoy
[/vba] P.S. Если правильно помню, они обязательны при наличии пробела внутри значения, как в 'Excel 12.0;HDR=No'. Или если в пути к файлу будут пробелы, типа Data Source='C:\Моя Папка\Мой Файл.xlsx'. В других случаях - по желанию. В рассматриваемом выше случае с подстановочными параметрами :1 и :2 одинарные кавычки гарантируют правильность обработки, если параметры придут с пробелами.
[/vba] P.S. Если правильно помню, они обязательны при наличии пробела внутри значения, как в 'Excel 12.0;HDR=No'. Или если в пути к файлу будут пробелы, типа Data Source='C:\Моя Папка\Мой Файл.xlsx'. В других случаях - по желанию. В рассматриваемом выше случае с подстановочными параметрами :1 и :2 одинарные кавычки гарантируют правильность обработки, если параметры придут с пробелами.Gustav
Доброго времени суток! А данный класс позволяет в запросе указать имя поля, если в имени поля присутствуют точки, пробелы и текст кириллицы? Со звездочкой выдает все поля... А указать явно не получается(
Доброго времени суток! А данный класс позволяет в запросе указать имя поля, если в имени поля присутствуют точки, пробелы и текст кириллицы? Со звездочкой выдает все поля... А указать явно не получается(emlen