• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Evaluate Excel В Lotus

  • Автор темы Anatoly
  • Дата начала
A

Anatoly

В макросах EXCEL
Result =Sheets(2).Evaluate("SUM(F10:F14)")
отрабатывает нормально и возвращает сумму блока

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

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

doka

а у Result тип variant? Другие команды с WorkSheets отрабатывают? xlApp это что, как получаешь?
 
A

Anatoly

а у Result тип variant? Другие команды с WorkSheets отрабатывают?

У результ тип Integer. Как только объявляю Variant, сразу требует поставить перед приcвоением SET.
xlApp.WorkSheets(2).Evaluate("SUM(F10:F14)") возвращает OBJECT
А должен, по идее, число. И что с этим делать непонятно...
 
N

nvyush

Anatoly
Попробуйте посмотреть в отладчике, какие поля есть у этого объекта
 
D

doka

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

Anatoly

Anatoly
Попробуйте посмотреть в отладчике, какие поля есть у этого объекта
Смотрел: тип OBJECT и все.
Кстати через xlApp.WorkSheets(2).Evaluate("F9").Value удается получить значение отдельной ячеек.
С блоками почему не получается.
 
D

doka

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

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

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

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

Anatoly

Скорей всего неправильно обращаешься. Для примера самое простое
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"
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Не совсем понятно... нужен аналог функции VBA?
 
D

doka

вот к тому что выше написал это посмотри
 
A

Anatoly

Не совсем понятно... нужен аналог функции VBA?
Нужно организовать логический контроль данных в файлах перед тем как импортировать их в задачу.
Эта ячейка не больше той, это равна сумме тех и т.д.
То есть нужно как-то получать в скрипте суммы блоков и перечней ячеек
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
наверное проще написать свою функцию подсчета сумм.
Ну или какой-нибудь документ-правило в котором описать какая ячейка должна быть больше или меньше, суммы блоков и т.д.
Если это статичные блоки конечно
 
A

Anatoly

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

hosm

а чем не подходит вариант через 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)
 
A

Anatoly

а чем не подходит вариант через 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 достаточно обширен.
Но придется что-то наворачивать в документе описания условия проверки: в полях остаются только диапазоны и уходят функции их обработки. Придется расширять доки по описанию условий.
 
N

nvyush

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!