:: Visual Foxpro, Foxpro for DOS
автоматизация Excel - Range.RemoveDuplicates Method
sb69
Автор

Сообщений: 22
Дата регистрации: 23.06.2018
Нужно из FoxPro удалить дубликаты в книге Эксель.
Макрос получается такой:
ActiveSheet.Range("A1:C3").RemoveDuplicates Columns:=Array(1,2,3), Header:=xlYes

Как это написать в Фоксе?

Cделал (методом тыка) так:
ActiveSheet.Range("A1:C3").RemoveDuplicates("Array(1,2,3)","xlYes")
Выдает ошибку: Ошибка OLE.Код … Type Mismatch

Я так понимаю, перечень столбцов должен как-то по другому передаваться ...
Ratings: 0 negative/0 positive
Re: автоматизация Excel - Range.RemoveDuplicates Method
AndyNigmatec

Сообщений: 1552
Откуда: Волгоград
Дата регистрации: 28.06.2015
для начала - константы берем из excel.h (прикрепил к сообщению)
во-вторых - смотрим вызов автоматизации excel из фокса, тупой как валенок пример

lcNameFile='наше_excel_файло'
loExcel=CREATEOBJECT("EXCEL.APPLICATION")
loExcel.Workbooks.Open(lcNameFile)
... далее через loExcel вызываем требуемы методы ...
... затем закрываем книжку, релизим сам loExcel ...

вкратце так )))

насчет - RemoveDuplicates(...) - -я такой метод не юзал, смущает параметр передаваемый как массив ...



Исправлено 3 раз(а). Последнее : AndyNigmatec, 23.06.18 23:12
Ratings: 0 negative/0 positive
Re: автоматизация Excel - Range.RemoveDuplicates Method
sb69
Автор

Сообщений: 22
Дата регистрации: 23.06.2018
спасибо, подключил, заменил xlYes на 1 … не помогло
код у меня такой
loExcelMain=Createobject('Excel.Application')
loBookMain = loExcelMain.workbooks.open(pcFileNameMain) && pcFileNameMain - имя файла
loSheetMain = loBookMain.Sheets(1)
* тут та часть, которая нормально работает
loSheetMain.Range("$A$1:$AM$6409").RemoveDuplicates("Array(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)", 1)



Исправлено 1 раз(а). Последнее : sb69, 23.06.18 23:14
Ratings: 0 negative/0 positive
Re: автоматизация Excel - Range.RemoveDuplicates Method
AndyNigmatec

Сообщений: 1552
Откуда: Волгоград
Дата регистрации: 28.06.2015
конечно не помогло, это ж тока начало ))) - теперь разобраться что передать параметром в RemoveDuplicates
Ratings: 0 negative/0 positive
Re: автоматизация Excel - Range.RemoveDuplicates Method
AndyNigmatec

Сообщений: 1552
Откуда: Волгоград
Дата регистрации: 28.06.2015
навскидку - msdn.microsoft.com
Ratings: 0 negative/0 positive
Re: автоматизация Excel - Range.RemoveDuplicates Method
sb69
Автор

Сообщений: 22
Дата регистрации: 23.06.2018
не сразу пример, кода увидел, сорри …
Я не могу понять как передать список колонок
в VBA - это параметр "Columns"
ActiveSheet.Range("A1:AM100").RemoveDuplicates Columns:=Array(1,2), Header:=xlYes
Ratings: 0 negative/0 positive
Re: автоматизация Excel - Range.RemoveDuplicates Method
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Создать массив (фоксовый), заполнить. Передать по ссылке, т.е. @имя_массива

"Array(1,2,3)" это строка, с чего бы это экселю её понимать не как строку?
Конкретно с RemoveDuplicates я не работал, а для сводных таблиц, где тоже нужны параметры-массивы, всё проходит.
Константы, естественно, тоже надо передавать в виде их значений, а не имён в кавычках. Не нужно прямо по коду "заменять" их - достаточно подключить через #include excel.h файл c ними (для форм.классов чуть сложнее - там в меню Form/Class есть пункт для подключения h-файлов), и тогда можно писать их имена в параметрах, да и просто там где нужны сами значения (естественно без кавычек).


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: автоматизация Excel - Range.RemoveDuplicates Method
sb69
Автор

Сообщений: 22
Дата регистрации: 23.06.2018
Игорь, спасибо.

excel.h подключил на форме с этим всё ок.
С передачей списка столбцов по прежнему проблема
DIMENSION aArColumns(39)
FOR nn=1 TO 39
aArColumns(nn)=nn
ENDFOR
loSheetMain.Range("$A$1:$AM$6409").RemoveDuplicates(@aArColumns,xlYes) && выдает ошибку "OLE ... parameter is incorrect"

в руководстве по vba указано что должен быть тип = Variant ...
msdn.microsoft.com



Исправлено 1 раз(а). Последнее : sb69, 24.06.18 16:14
Ratings: 0 negative/0 positive
Re: автоматизация Excel - Range.RemoveDuplicates Method
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Видимо не судьба с этим методом поработать из фокса... Сделай макрос и его уже вызывай, там то не проблема в синтаксисе VBA всё прописать.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: автоматизация Excel - Range.RemoveDuplicates Method
sb69
Автор

Сообщений: 22
Дата регистрации: 23.06.2018
ок, спасибо.
Ratings: 0 negative/0 positive
Re: автоматизация Excel - Range.RemoveDuplicates Method
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Кстати, для какой цели вообще такую функцию из фокса над экселем проводить? Обычно из фокса либо формируют выходные документы - так там не проблема ПЕРЕД выгрузкой сгруппировать, либо загружают данные - и там, опять же, не проблема после приёма всего массива выкинуть "лишние" записи - всё одно требуется постобработка, как ты не "готовь" исходный эксель


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: автоматизация Excel - Range.RemoveDuplicates Method
sb69
Автор

Сообщений: 22
Дата регистрации: 23.06.2018
всё банально

Ежедневно делаю два десятка маркетинговых отчетов на основании данных из интернета. Полученные данные нужно "немного обрабатывать" прежде чем разносить по заготовкам.
Сейчас делаю в Экселе руками. Исходник приходит в .csv
Хочу автоматизировать (глаза стали уставать, да и ускорить немного хочется). Кое-какие правки удобнее делать через базу, чем через ВПР() в Экселе.
Когда начинал программистом, последнее на чём писал был FoxPro.
Вот и вся логика … Можно конечно и vba поизучать, но времени много надо.
Ratings: 0 negative/0 positive
Re: автоматизация Excel - Range.RemoveDuplicates Method
AndyNigmatec

Сообщений: 1552
Откуда: Волгоград
Дата регистрации: 28.06.2015
Ну пожалуй да, для таких задачек городить что-то монументальное не имеет смысла - а вот в фоксе курсорами обработать - быстро и незатратно, особенно ежели с фоксом автор знаком )))
Ratings: 0 negative/0 positive
Re: автоматизация Excel - Range.RemoveDuplicates Method
sb69
Автор

Сообщений: 22
Дата регистрации: 23.06.2018
Ratings: 0 negative/0 positive
Re: автоматизация Excel - Range.RemoveDuplicates Method
pasha_usue

Сообщений: 3647
Откуда: Е-бург
Дата регистрации: 06.10.2006
Так не взлетает?

Dimension aArColumns[39,1]
loSheetMain.Range("$A$1:$AM$6409").RemoveDuplicates(aPasser("aArColumns"), xlYes)
*------------------
Procedure aPasser
*------------------
Lparameters m_array
Return @&m_array
Массив должен быть Private. Размерности, возможно, надо переставить.



Исправлено 1 раз(а). Последнее : pasha_usue, 24.06.18 21:32
Ratings: 0 negative/0 positive
Re: автоматизация Excel - Range.RemoveDuplicates Method
sb69
Автор

Сообщений: 22
Дата регистрации: 23.06.2018
спасибо, но не помогло.
(размерность также менял местами)
выдает то же сообщение "OLE ... parameter is incorrect"
Ratings: 0 negative/0 positive
Re: автоматизация Excel - Range.RemoveDuplicates Method
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
Так не пробовали?
lll = '1,2,3'
.RemoveDuplicates(&lll,xlYes)
Ratings: 0 negative/0 positive
Re: автоматизация Excel - Range.RemoveDuplicates Method
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
sb69
Сейчас делаю в Экселе руками. Исходник приходит в .csv
Хочу автоматизировать (глаза стали уставать, да и ускорить немного хочется). Кое-какие правки удобнее делать через базу, чем через ВПР() в Экселе.
Когда начинал программистом, последнее на чём писал был FoxPro.
Ну так и флаг в руки Если всё одно забирать в фокс для обработки, то там же и дубликаты вычищать - select f1,f2,f3, min/max/sum/avg(f456) group by f1,f2,f3 - и всего делов
Для скорости загрузку/выгрузку делать через массив, поячеечно плохо будет.


------------------
WBR, Igor
Ratings: 0 negative/1 positive
Re: автоматизация Excel - Range.RemoveDuplicates Method
sb69
Автор

Сообщений: 22
Дата регистрации: 23.06.2018
не проходит
Ratings: 0 negative/0 positive
Re: автоматизация Excel - Range.RemoveDuplicates Method
sb69
Автор

Сообщений: 22
Дата регистрации: 23.06.2018
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 22 (Гостей: 22)

© 2000-2024 Fox Club 
Яндекс.Метрика