Автор | Сообщение |
|
| |
Пост N: 138
Зарегистрирован: 06.06.06
|
|
Отправлено: 24.12.18 21:43. Заголовок: Связать две таблицы Excel и заполнить поле
Всем привет! На Харборе программирую недавно. Но тут возникла одна задача на Excel. Есть две таблицы - нужно пройтись по записям одной, найти ключевое значение во второй и заполнить в первой. То есть нужно сделать что-то типа SET RELATION + REPLACE. Начал разбираться в командах Excel - идет слишком туго! Помогите, может у кого есть работающий кусок кода такого типа. Пожалуйста, очень нужно! Сроки поджимают, а у меня ничего не выходит!
|
|
|
Новых ответов нет
[см. все]
|
|
|
| |
Пост N: 139
Зарегистрирован: 06.06.06
|
|
Отправлено: 25.12.18 21:03. Заголовок: Я открываю два файла..
Я открываю два файла: oExcel:workbooks:Open("Base1.xlsx",0) oExcel:workbooks:Open("Base2.xlsx",0) Не могу понять, как между ними переключаться?
|
|
|
|
| moderator
|
Пост N: 1139
Зарегистрирован: 06.07.06
|
|
Отправлено: 25.12.18 21:47. Заголовок: Я, правда, вордами и..
Я, правда, вордами и экзелями никогда не занимался, но, думаю, здесь надо oDoc1 := oExcel:workbooks:Open("Base1.xlsx",0) oDoc2 := oExcel:workbooks:Open("Base2.xlsx",0) ну и работать дальше с этими oDoc1 и oDoc2.
|
|
|
|
| Администратор
|
Пост N: 3820
Зарегистрирован: 23.05.05
|
|
Отправлено: 25.12.18 22:04. Заголовок: workbooks - это колл..
workbooks - это коллекция, к элементам которой можно обращаться, в том числе по индексу. Но кроме книг, открытых программой, могут быть другие открытые книги, и можно "промазать" с индексом. Можно обратиться так: oExcel:workbooks:Open("Base1.xlsx",0) oBook1 := oExcel:ActiveWorkBook oExcel:workbooks:Open("Base2.xlsx",0) oBook2 := oExcel:ActiveWorkBook
|
|
|
|
| Администратор
|
Пост N: 3821
Зарегистрирован: 23.05.05
|
|
Отправлено: 25.12.18 22:17. Заголовок: ort пишет: Всем при..
ort пишет: цитата: | Всем привет! На Харборе программирую недавно. Но тут возникла одна задача на Excel. Есть две таблицы - нужно пройтись по записям одной, найти ключевое значение во второй и заполнить в первой. То есть нужно сделать что-то типа SET RELATION + REPLACE. |
| Меня смутила фраза "задача на Excel". Подумалось - речь идет о VBA А если задача для харбора - то можно сделать так: Сначала цикл по второй книге, выбрать все данные в массив: oSheet2 := oBook2:ActiveSheet for nRow := ... to ... AADD(aRows, {oSheet2:Cells(nRow, 1):Value, oSheet2:Cells(nRow, 2):Value, ...}) next Затем цикл по первой книге, считать значение нужной ячейки, найти элемент по ключу в массиве, и записать в соседнюю ячейку соответствующие данные из массива. Можно даже не открывать одновременно обе книги. Сначала открыть одну, выбрать данные, закрыть. Затем открыть вторую.
|
|
|
|
| |
Пост N: 6992
Зарегистрирован: 17.05.05
|
|
Отправлено: 25.12.18 22:23. Заголовок: Pasha пишет: Можно ..
Pasha пишет: цитата: | Можно даже не открывать одновременно обе книги. Сначала открыть одну, выбрать данные, закрыть. Затем открыть вторую. |
| +1
|
|
|
|
| |
Пост N: 140
Зарегистрирован: 06.06.06
|
|
Отправлено: 25.12.18 22:59. Заголовок: Pasha пишет: Сначал..
Pasha пишет: цитата: | Сначала цикл по второй книге, выбрать все данные в массив: Затем цикл по первой книге, считать значение нужной ячейки, найти элемент по ключу в массиве, и записать в соседнюю ячейку соответствующие данные из массива. Можно даже не открывать одновременно обе книги. Сначала открыть одну, выбрать данные, закрыть. Затем открыть вторую. |
| Паша, спасибо за наводку! Сам к этому решению только что пришел!
|
|
|
|
| Администратор
|
Пост N: 3822
Зарегистрирован: 23.05.05
|
|
Отправлено: 26.12.18 11:04. Заголовок: alkresin пишет: Я, ..
alkresin пишет: цитата: | Я, правда, вордами и экзелями никогда не занимался, но, думаю, здесь надо oDoc1 := oExcel:workbooks:Open("Base1.xlsx",0) oDoc2 := oExcel:workbooks:Open("Base2.xlsx",0) ну и работать дальше с этими oDoc1 и oDoc2. |
| В chm к Excel 2013 для метода Open сказано: Return Value A Workbook object that represents the opened workbook В chm к Excel 2003 ничего о возвращаемом значении не говорится. Так что непонятно, возвращает ли в ранних версиях Office этот метод объект WorkBook, и начиная с какой версии возвращает.
|
|
|
|