|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
Суть проблемы такова: необходим экспорт результирующего набора записей запроса с более чем 65000 записей из Access 2007 в Excel 2007. Если это делать через возможности самого аксеса, т.е. клик на объекте запроса -> экспорт -> Excel и не ставить галочку "Экспортировать данные с макетом и форматированием.", то экспортируется таблица без проблем (более 65000 строк). Если галочку форматирования поставить - вылетает со словами, что невозможно скопировать в буфер более 65000 строк. Но есть необходимость делать экспорт средствами VBA, пытаюсь делать так: DoCmd.OutputTo acOutputQuery, "MyQuery_temp", acFormatXLSX, "234.xlsx" При этом таблицы менее 65000 строк экспортируются с форматированием, а таблицы более 65000 строк не экспортируются с ошибкой такой же, как описано выше. Вопрос: как грамотно экспортировать такие таблицы средствами VBA? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2009, 17:18 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
chuka, с Access 2007 и Excel 2007 не работал, но хочется верить, что CopyFromRecordset там остался. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2009, 17:36 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
а также TransferSpreadsheet ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2009, 17:39 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
Всё что было раньше там осталось. Исключение - исключительно программное формирование главного и контекстных меню. Что добавилось... Непревзойдённо отвратная встроенная справка, простейшие примеры использования, что были в разделах справки раньше, исчезли либо надежно глубоко "упрятаны" ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2009, 17:57 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
Вроде работает:) Сделал следующим образом: ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2009, 18:35 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
Вроде работает:) Сделал следующим образом: Sub test() Dim db As DAO.Database Dim rs As DAO.Recordset Dim exl1 As Excel.Application Dim sSQL As String Set db = DBEngine.Workspaces(0).Databases(0) sSQL = " ... " Set rs = db.OpenRecordset(sSQL, DB_OPEN_DYNASET) Set exl1 = New Excel.Application exl1.Workbooks.Add Set the_range = exl1.Worksheets("Лист1").Range("A1") the_range.CopyFromRecordset rs exl1.Application.Visible = True End Sub Осталось 2 вопроса: 1. Заметил, что какой бы диапазон в the_range не выбирал, рекордсет копируется весь. Так и должно быть? Правда вроде можно сдвинуть верхний левый угол области, в которую скопируется рекордсет если, например, задать диапазон Range("A2"). 2. CopyFromRecordset копирует только данные полей, без шапки. Придется руками копировать рекордсет в диапазон Range("A2") (чтобы первая строка на листе пустая осталась), а потом туда шапку копировать, или есть более простой способ? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2009, 18:41 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
Покритикуйте плз, я вообще в нужном направлении думаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2009, 18:42 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
chuka, у метода CopyFromRecordset 3 параметра, в том числе максимальное количество строк. Это к тому, что "рекордсет копируется весь". Посмотрите хелп. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2009, 18:46 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
mds_world, да, вижу, по умолчанию копируется весь рекордсет. Непонятно только почему он копируется на весь лист, а не на диапазон the_range. Но это в общем детали, главное что в итоге работает, только с шапкой проблема :) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2009, 18:52 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
chukaтолько с шапкой проблема :) С шапкой тоже можно копифромрекордсетом. Только другим. Создать свободный ADO-рекордсет, пройтись по полям основного рекорсета, заталкивая в свободный имена полей. Затем поместить адошный на первую строку. Ну и со второй строки писать основной. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2009, 21:03 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
mds_world С шапкой тоже можно копифромрекордсетом. Только другим. Создать свободный ADO-рекордсет, пройтись по полям основного рекорсета, заталкивая в свободный имена полей. Затем поместить адошный на первую строку. Как-то сложновато :) Достаточно в цикле прочесть имена полей искомого рекордсета - поместив их строкой выше от ячейки вывода. ЗЫ "диапазон the_range" - верхняя левая ячейка, с которой рекордсет выводится, а не диапазон вывода. один из примеров поиск вообще ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2009, 22:41 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
Всем доброго времени суток, делаю экспорт таблицы из акцесса в екзель, таблица большая >240000 строк, экспорт работает, но в итоге в екзель попадают только 65000 с чем то..., суть вопроса - как сделать экспорт в файл xlsx, который поддерживает более 65000 строк? (акс и екзель 2007). Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2013, 16:32 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
Офис 2007 не имею, но сильно удивлюсь, если подтвердится, что у екзель 2007 метод CopyFromRecordset заливает только 65635 строк за раз. Но даже если так - выход есть. xlWs.Range("A1").CopyFromRecordset rst xlWs.Range("A1").Offset(65000).CopyFromRecordset rst xlWs.Range("A1").Offset(65000*2).CopyFromRecordset rst xlWs.Range("A1").Offset(65000*3).CopyFromRecordset rst И вы зальете все 240000. Это лучше делать в цикле с проверкой rst.EOF. В ёкселе есть еще одна хорошая штука - объект QueryTable (то же, что "Внешние данные"). Ему тоже можно присвоить Recordset, к тому же можно указать, что 1-я строка - имена полей. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2013, 19:56 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
Анатолий ( Киев ), Есть такая проблема... Ни где ясно не сказано. Там дело в том, что открывается в режиме совместимости. Alexander-80578, Можно попробовать сначала сохранить книгу как *.xlsx (Так помоему), закрыть её, а потом снова открыть и уже добавлять рекордсет. Попробовать сам не могу, т.к. нет еселя 2010 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2013, 20:15 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
Есть подозрение, что присоединена библиотека Excel 2003, а не 2007 ? Можно попробовать заменить на позднее связывание. По умолчанию будет использована последняя версия Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2013, 20:38 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
В Access 2010 экспорт миллиона строк в Excel 2010 с помощью CopyFromRecordset, прошел гладко и полностью. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2013, 20:40 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
mds_worldМожно попробовать заменить на позднее связывание. Код: vbnet 1. 2.
+1 Даже так, для надежности: Код: vbnet 1.
(вроде такой номер для 2010-го) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2013, 21:56 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
qwrqwr... Даже так, для надежности: Код: vbnet 1.
(вроде такой номер для 2010-го) наверняка, утверждать - не возьмусь, но очень может быть, что это ничего не даст ... Почему создаётся 2003-й объект вместо 2007-го? Powerpoint. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2013, 22:07 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
Если уже создавать новый файл то лучше так: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2013, 22:44 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
Спасибо всем откликнувшимся. в итоге сделал так: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
все работает и довольно быстро, но думаю еще испробывать CreateObject, так как не охота с файловм БД еще какие то бланки, шаблоны таскать. Метод R Dmitry тоже прекрасно работает, но показалось, что дольше чем через рекордсет, время не засекал, поэтому утверждать не берусь, просто так показалось, вообще надо бы проверить, но файл на 30М больше получается почему то, если через запрос. Вообще в его методе смущает еще то, что я его не совсем понимаю, кто и как создает файл не понятно, есть вообще какое-нибудь описание того что стоит в квадратных скобках? Вот его метод экспорта: Код: vbnet 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2013, 10:10 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
эта строка Код: vbnet 1.
выдает ошибку - см. вложение ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2013, 10:22 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
даю полный код, подскажите плиз в чем ошибка, с CreateObject раньше не работал... Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2013, 15:18 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
Alexander-80578все работает и довольно быстро, но думаю еще испробывать CreateObject, так как не охота с файловм БД еще какие то бланки, шаблоны таскать.Так и не таскай, положи в таблицу. И не вижу связи с CreateObject. Бланк этот ты и сам можешь делать. Я же написал выше. Alexander-80578эта строка Код: vbnet 1.
выдает ошибку - см. вложениеНаверное не зарегистрирован такой объект в системе. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2013, 15:41 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
Для офиса 2007, номер версии 12 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2013, 20:38 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
что плясать вокруг этих цифр. сделайте вложенные ифы или цикл. который без ошибки - тот и есть пример с циклом Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2013, 23:34 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
зы: в javascript так делают (вложенными ифами) когда например создают объект для httpxtmlrequest. пробуют разные способы, свойственные разным браузерам. создался - на выход ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2013, 23:41 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
Alexander-80578 но файл на 30М больше получается почему то, если через запрос. То что медленнее в xml структуру пишутся данные это факт, для придания скорости можно писать в бинарный файл xlsb. Размер файла также уменьшиться раза в два , а то и поболее. В пропертях необходимо будет убрать xml структру БД и указать бинарное расширение: Код: sql 1.
Alexander-80578 Вообще в его методе смущает еще то, что я его не совсем понимаю, кто и как создает файл не понятно, есть вообще какое-нибудь описание того что стоит в квадратных скобках? [sh]- имя таблицы (Листа ёкселя), если в цикле менять имя листа и условия запроса, а путь к файлу и его имя не менять, тогда будет создана одна книга и нужное количество листов, с нужными данными. Если используется один и тот же набор данных, тогда целесообразней использовать фильтр рекордсета и средства автоматизации. [Excel 12.0;]- проперти OLE DB Provider ---------- Как то так ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 00:00 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
ihamat, Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 00:06 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
R Dmitry, так это можно когда либо объект создан либо в самой апликации. или я не понял? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 00:21 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
ihamat, Зачем в цикле пытаться создавать объекты ??? можно просто определить текущую версию используемого приложения офиса ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 00:25 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
R Dmitry, ааа... ну можно и что? но у меня например стоит два офиса. и в них установлены разные приложения ... ну вы поняли. ненадежно ) имхо ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 00:30 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
ihamat, Имхо Ваш метод создаст младшую из установленных версий ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 00:32 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
, вернее самую древнюю ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 00:34 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
R Dmitry, и пусть ), хотя можно step=-1 делать. а ваш может не создать никакой хотя возможность была ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 00:41 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
ihamat, пользуйся им на здоровье ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 00:47 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
Перечитывая пыльные справочники, хочу реанимировать данную тему. Попросили написать пользовательскую функцию, которая выводит таблицу/запрос на нужный (по имени) лист эксель. Казалось бы, тема обсосана уже неоднократно. Я собрал функцию, у меня на компьютере все прекрасно отрабатывает и экспортируется из аксесс в эксель. Копирую по простому, CopyFromRecordset. У меня все норм на компе, на ноутбуке тоже все норм (на компе 10, на ноуте 7) Офис 2019 и 2010 соответственно. А вот на компьютере человека рекордсет возвращается пустой , ничего не копируется, пишкт что добавил, но пустые клетки. Причем по рабочему моему примеру. Код достаточно прост (я просто дополнительно проверку туда повесил, открыт ли файл эксель перед экспортом, остальное все канонично.) Использую позднее связывание, метод CreateObject. Классика: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.
Вызов элементарен: Код: vbnet 1.
Каких то кривых библиотек не использую. В чем может быть проблема?) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2020, 22:18 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
Сергей Лалов,попробуйте Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2020, 22:52 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
alecko, пробовал уже) я тоже думал сначала ,что пустой рекордсет передается. Не, в рекордсете все норм, и функция на моем компе отрабатывает как надо. на машине другого человека беда. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2020, 23:09 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
В архиве два файла, один аксесс, другой эксель. Можно кинуть на рабочий стол ,открыть аксесс,нажать на кнопку экспорт и открыть файл эксель на листе "листок2". У меня все экспортируется. Не могу понять почему лагает у другого компа. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2020, 23:18 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
Сергей Лалов, это достаточно распространенная проблема, начиная с 1С. решается вышеописанным способом. не скажу что панацея, мне помогало. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 00:16 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
alecko, Спасибо, попробую. Имею в виду на компе другого человека. У него не тестил ещё, может прокатит. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 00:29 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
Дожал универсальный код, без CopyFromRecordset, перебором. Работает на всех тестируемых компьютерах : Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58.
Вызов функции: Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 12:57 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
Сергей Лалов, И ни кто даже спасибо не сказал. Скажу я. СПАСИБО В копилку по любому закину. Возможно пригодится, пока писал, даже уже предполагаю в где. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 13:11 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
Стесняюсь спросить:а ЧТО можно делать в EXCEL с таблицей > 65000 строк(не говоря о 240000) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 13:31 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
sdku, да ты уже спрашивал - Экспорт из access в excel с помощью vba ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 17:23 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 18:23 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
Тогда не въезжал и сейчас не въезжаю-ЗАЧЕМ экспортировать в Ёксель таблицу которую он не "потянет"(хотя размеры листа позволяют это сделать) Все это сильно напоминает "мысли" обезьяны: "а чё тут думать-трястинадо" ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 19:42 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
sdku Тогда не въезжал и сейчас не въезжаю ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 20:28 |
|
Экспорт из Access в Excel больших таблиц
|
|||
---|---|---|---|
#18+
Я делаю это так. Все тоже самое, как в примере Сергея, только добавлен прогресс-бар и данные выводятся в заранее подготовленный Template. Для теста архив распаковать в корень диска C:\. Версия для Access 2000. Запускается в любой версии. Я все же не понимаю, какая необходимость загонять в Excel такое количество записей? Пример здесь ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2020, 17:26 |
|
|
start [/forum/topic.php?all=1&fid=45&tid=1609915]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
134ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
74ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 269ms |
0 / 0 |