powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как можно скопировать данные между Excel-файлами?
20 сообщений из 20, страница 1 из 1
Как можно скопировать данные между Excel-файлами?
    #38635381
S70
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги,

день добрый. Помогите, плиз с таким вопросом. Есть три типа excel-файлов:
с исходными данными (Исходники) - много; файлы, в который надо перенести данные из исходников (Результирующие) - много и один файл (Сборщик), в котором находится макрос и логика, из каких Исходников что брать и куда складывать в Результирующие. В Исходниках и Результатах макросов быть не должно. Делается в на ADO из VBA.

Вопросы:
1. Как этот перенос можно сделать в один прием, т.е. выбрали селектом из Источника и сразу инсертом вставили в Результирующий (но здесь вопрос с типом данных, например, если ноль в Исходнике отформатирован как «-»).
2. Сделать в два приема: селектом выбрть из Источника в рекордсет, данные обработать (обработка формата «-», сложение, умножение и т.д.), а потом инсертом вставить в Результирующий.
3. М.б. посоветуете какой-то третий способ переноса данных?

Есть у кого-нибудь примеры кода?

Заранее спасибо
...
Рейтинг: 0 / 0
Как можно скопировать данные между Excel-файлами?
    #38635399
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Достаточно много операций можно сделать в самом запросе при селекте, необязательно же тупо копировать поля. У вас в распоряжении множество функций, в том числе IIF, Format и т.п.
...
Рейтинг: 0 / 0
Как можно скопировать данные между Excel-файлами?
    #38635493
S70
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

пока задача - тупо скопировать поля, обработка - вторая часть. На форуме я искал, но четкого примера через третий файл - нет, есть примеры, когда два файла (т.е. макрос в файле с данными, что не подходит). А в цикле данные перекидывать - медленно. Поэтому интересен пример с селект - инсерт.
...
Рейтинг: 0 / 0
Как можно скопировать данные между Excel-файлами?
    #38635495
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример - пожалуйста:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Dim cn As Object, rs As Object
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ThisWorkbook.FullName + ";Extended Properties='Excel 8.0'"
rs.Open "select NUM, Sum(SUM) from [Лист2$] group by NUM order by Sum(SUM) DESC", cn, 3
Cells(1, 5).CopyFromRecordset rs
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing



Если вы используете для подключения OLE DB и параметр HDR=Yes, то обращаться к полям нужно по именам, оказавшимся в первой строке диапазона-источника. Можете выставить HDR=No, тогда имена полей будут F1, F2, F3 и т.д.
Не забывайте, что при использовании параметра IMEX=1 все данные преобразуются в текст!
...
Рейтинг: 0 / 0
Как можно скопировать данные между Excel-файлами?
    #38635514
S70
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

да, это мы прочитали в рекордсет.
А потом надо в третий файл положить считанное, а в примере
Cells(1, 5).CopyFromRecordset rs - т.е. в текущий. Что, открывать средствами экселя полностью Результирующий файл? Их много и работать будет медленно.
...
Рейтинг: 0 / 0
Как можно скопировать данные между Excel-файлами?
    #38635520
S70
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Dim cnnFrom As ADODB.Connection: Set cnnFrom = New ADODB.Connection
Dim cnnTo As ADODB.Connection: Set cnnTo = New ADODB.Connection
Dim rst As ADODB.Recordset: Set rst = New ADODB.Recordset

...

cnnFrom.Open sConFrom 'Открыли источник
cnnTo.Open sConTo 'Открыли приемник


strF = "SELECT " & strF & " FROM [" & strSheetFrom & "$" & strRangeFrom & "]" 'Прочитали очередные данные
Set rst = cnnFrom.Execute(strF) 'Прочитали очередные данные



А вот как вставить данные в Результирующий файл?
...
Рейтинг: 0 / 0
Как можно скопировать данные между Excel-файлами?
    #38635527
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S70А вот как вставить данные в Результирующий файл?так так и вставить: ячейки должны принадлежать результирующему файлу
Код: vbnet
1.
MyWorkbook.MyWorksheet.Cells(1, 5).CopyFromRecordset rs
...
Рейтинг: 0 / 0
Как можно скопировать данные между Excel-файлами?
    #38635536
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, создать результирующий файл средствами ADO не получится
...
Рейтинг: 0 / 0
Как можно скопировать данные между Excel-файлами?
    #38635561
S70
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Результирующие файлы все есть, создавать не надо, если Вы об этом. На момент операции Источник и Результирующий открыты. Мне надо между ними просто данные перекинуть. Как из Сборщика сказать "Вставь считанные из Исходника селектом данные в Результирующий"?
...
Рейтинг: 0 / 0
Как можно скопировать данные между Excel-файлами?
    #38635563
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
никак
нужно использовать CopyFromRecordset
...
Рейтинг: 0 / 0
Как можно скопировать данные между Excel-файлами?
    #38635579
S70
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Хорошо, CopyFromRecordset - как указать, что он должен скопировать из текущего файла не в него же, а в третий?
Есть пример кода какой-нибудь: в текущем файле есть рекордсет с данными, вставить его в другой файл?
...
Рейтинг: 0 / 0
Как можно скопировать данные между Excel-файлами?
    #38635582
S70
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал сделать

Код: vbnet
1.
2.
strF = "INSERT INTO [Р11$B2:P2] SELECT * FROM [Д11$B2:P2] IN 'H:\Исходный_1.xlsx'[Excel 12.0;HDR=No;IMEX=1]"
cnnTo.Execute (strF)



на экзекюте выдает ошибку как на скриншоте. Что не так?
...
Рейтинг: 0 / 0
Как можно скопировать данные между Excel-файлами?
    #38635598
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
S70,
3. М.б. посоветуете какой-то третий способ переноса данных?

Расширенный фильтр в Excel. Примеры ищите по .AdvancedFilter .
...
Рейтинг: 0 / 0
Как можно скопировать данные между Excel-файлами?
    #38635616
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S70Хорошо, CopyFromRecordset - как указать, что он должен скопировать из текущего файла не в него же, а в третий?
Есть пример кода какой-нибудь: в текущем файле есть рекордсет с данными, вставить его в другой файл?я же уже ответил на этот вопрос 15985395
если что-то неясно - задайте конкретный вопрос

S70на экзекюте выдает ошибку как на скриншоте. Что не так?То что работать с экселевским файлом через АДО можно только по чтению, но не по записи
...
Рейтинг: 0 / 0
Как можно скопировать данные между Excel-файлами?
    #38635652
S70
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

на понятно следующее. Пусть я в Файле1. Здесь же у меня рекордсет с данными.
Строка
Код: vbnet
1.
MyWorkbook.MyWorksheet.Cells(1, 5).CopyFromRecordset rs


предполагает, что я пишу в тот же Файл1.
Как именно мне написать в коде, чтобы данные были вставлены в Файл2 (для него есть: путь, имя файла, имя листа и диапазон, куда вставить)?

Спасибо
...
Рейтинг: 0 / 0
Как можно скопировать данные между Excel-файлами?
    #38635685
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S70Строка
Код: vbnet
1.
MyWorkbook.MyWorksheet.Cells(1, 5).CopyFromRecordset rs

предполагает, что я пишу в тот же Файл1.Строка предполагает, что ты пишешь в указанную книгу на указанный лист. Я просто не знаю твоей квалификации в области программирования, поэтому даю общие советы (хотя, предполагал, что оперируя SQL-запросами ты знаешь, как открыть книгу)

Код: vbnet
1.
2.
3.
Dim MyWorkbook As Workbook
Set MyWorkbook = Workbooks.Open("c:\книга.xls")
MyWorkbook.Worksheets("Лист2").Cells(1, 5).CopyFromRecordset rs
...
Рейтинг: 0 / 0
Как можно скопировать данные между Excel-файлами?
    #38635694
S70
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

я с VBA-синтаксисом мало знаком, поэтому "плаваю". Логика понятна, но вот как кодом записать - не всегда знаю.
Т.е. все-таки придется книгу открывать?.... ((
...
Рейтинг: 0 / 0
Как можно скопировать данные между Excel-файлами?
    #38635700
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S70Т.е. все-таки придется книгу открывать?.... ((так да
...
Рейтинг: 0 / 0
Как можно скопировать данные между Excel-файлами?
    #38635708
S70
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Спасибо большое за помощь.

А еще как-нибудь можно решить эту задачу?
...
Рейтинг: 0 / 0
Как можно скопировать данные между Excel-файлами?
    #38635713
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S70А еще как-нибудь можно решить эту задачу? 15985699
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как можно скопировать данные между Excel-файлами?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]