Evaluate Excel В Lotus

Anatoly

Well-Known Member
Lotus team
30.03.2007
222
0
#1
В макросах EXCEL
Result =Sheets(2).Evaluate("SUM(F10:F14)")
отрабатывает нормально и возвращает сумму блока

В скрипте Lotus
Result =xlApp.WorkSheets(2).Evaluate("SUM(F10:F14)")
ошибку типа данных.

Вообще, кто-нибудь делал логический контроль данных в EXCEL?
 

doka

Well-Known Member
18.02.2010
118
0
#2
а у Result тип variant? Другие команды с WorkSheets отрабатывают? xlApp это что, как получаешь?
 

Anatoly

Well-Known Member
Lotus team
30.03.2007
222
0
#3
а у Result тип variant? Другие команды с WorkSheets отрабатывают?
У результ тип Integer. Как только объявляю Variant, сразу требует поставить перед приcвоением SET.
xlApp.WorkSheets(2).Evaluate("SUM(F10:F14)") возвращает OBJECT
А должен, по идее, число. И что с этим делать непонятно...
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
#4
Anatoly
Попробуйте посмотреть в отладчике, какие поля есть у этого объекта
 

doka

Well-Known Member
18.02.2010
118
0
#5
Скорей всего неправильно обращаешься. Для примера самое простое
Result = xlApp.WorkSheets(2).cells(1,1).Value при Result as variant что записывает в Result?
 

Anatoly

Well-Known Member
Lotus team
30.03.2007
222
0
#6
Anatoly
Попробуйте посмотреть в отладчике, какие поля есть у этого объекта
Смотрел: тип OBJECT и все.
Кстати через xlApp.WorkSheets(2).Evaluate("F9").Value удается получить значение отдельной ячеек.
С блоками почему не получается.
 

doka

Well-Known Member
18.02.2010
118
0
#7
Через Evaluate не пробовал, не могу сказать, но как вариант попробуй обращаться к блокам так:
xl.Range("F10:F14" ).Select
xl.Selection.ВычислениеСуммы

при Set xl= CreateObject("Excel.Application")

или xl.Range("F10:F14" ).ВычислениеСуммы

примерно так. Точнее могу сказать позже)
 

Anatoly

Well-Known Member
Lotus team
30.03.2007
222
0
#8
Скорей всего неправильно обращаешься. Для примера самое простое
Result = xlApp.WorkSheets(2).cells(1,1).Value при Result as variant что записывает в Result?
C Cells().value проблемм никогда не было.

Dim Result As Variant
Result = xlApp.WorkSheets(2).Evaluate("F9").Value
в Result -> значение ячейки F9

Но надо еще возвращать и суммы блоков ячеек
Result = xlApp.WorkSheets(2).Evaluate("SUM(F10:F14)").Value
"Object variable not set"
 

Anatoly

Well-Known Member
Lotus team
30.03.2007
222
0
#11
Не совсем понятно... нужен аналог функции VBA?
Нужно организовать логический контроль данных в файлах перед тем как импортировать их в задачу.
Эта ячейка не больше той, это равна сумме тех и т.д.
То есть нужно как-то получать в скрипте суммы блоков и перечней ячеек
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 790
42
#12
наверное проще написать свою функцию подсчета сумм.
Ну или какой-нибудь документ-правило в котором описать какая ячейка должна быть больше или меньше, суммы блоков и т.д.
Если это статичные блоки конечно
 

Anatoly

Well-Known Member
Lotus team
30.03.2007
222
0
#13
наверное проще написать свою функцию подсчета сумм.
Ну или какой-нибудь документ-правило в котором описать какая ячейка должна быть больше или меньше, суммы блоков и т.д.
Если это статичные блоки конечно
Так есть.
Сделал документы по отчетам, к ним респонсы с описанием правил.
Например поля одного из простых условий:
LSide ="F9"
RSide ="SUM(F10:F14)"
Condition ="="
И вот с получением результатов и их сравнения - затык...
 

hosm

* so what *
18.05.2009
2 442
9
#14
а чем не подходит вариант через WorksheetFunction?
вот пример:
Код:
Set excelApp = GetObject ("", "Excel.Application")
Set excelDoc = excelApp.Workbooks.Add
Set myRange = excelDoc.Sheets(1).Range("A1:F10")
answer = excelApp.Application.WorksheetFunction.Sum(myRange)
 

Anatoly

Well-Known Member
Lotus team
30.03.2007
222
0
#15
а чем не подходит вариант через WorksheetFunction?
вот пример:
Код:
Set excelApp = GetObject ("", "Excel.Application")
Set excelDoc = excelApp.Workbooks.Add
Set myRange = excelDoc.Sheets(1).Range("A1:F10")
answer = excelApp.Application.WorksheetFunction.Sum(myRange)
Спасибо, не знал о таком.
Набор функций WorksheetFunction достаточно обширен.
Но придется что-то наворачивать в документе описания условия проверки: в полях остаются только диапазоны и уходят функции их обработки. Придется расширять доки по описанию условий.
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
#16
Но придется что-то наворачивать в документе описания условия проверки: в полях остаются только диапазоны и уходят функции их обработки. Придется расширять доки по описанию условий.
Не айс, конечно, но можно объявить answer, excelApp, глобальными и использовать Execute, например:
Код:
Execute({answer = excelApp.Application.WorksheetFunction.Sum(excelDoc.Sheets(1).Range("A1:F10"))})
If answer = 0 Then '...
Строку для Execute формировать из значений полей тестовых документов.