Evaluate Excel В Lotus

Тема в разделе "Lotus - Программирование", создана пользователем Anatoly, 14 июн 2012.

  1. Anatoly

    Anatoly Well-Known Member

    Регистрация:
    30 мар 2007
    Сообщения:
    204
    Симпатии:
    0
    В макросах EXCEL
    Result =Sheets(2).Evaluate("SUM(F10:F14)")
    отрабатывает нормально и возвращает сумму блока

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

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

    doka Well-Known Member

    Регистрация:
    18 фев 2010
    Сообщения:
    118
    Симпатии:
    0
    а у Result тип variant? Другие команды с WorkSheets отрабатывают? xlApp это что, как получаешь?
     
  3. Anatoly

    Anatoly Well-Known Member

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

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Anatoly
    Попробуйте посмотреть в отладчике, какие поля есть у этого объекта
     
  5. doka

    doka Well-Known Member

    Регистрация:
    18 фев 2010
    Сообщения:
    118
    Симпатии:
    0
    Скорей всего неправильно обращаешься. Для примера самое простое
    Result = xlApp.WorkSheets(2).cells(1,1).Value при Result as variant что записывает в Result?
     
  6. Anatoly

    Anatoly Well-Known Member

    Регистрация:
    30 мар 2007
    Сообщения:
    204
    Симпатии:
    0
    Смотрел: тип OBJECT и все.
    Кстати через xlApp.WorkSheets(2).Evaluate("F9").Value удается получить значение отдельной ячеек.
    С блоками почему не получается.
     
  7. doka

    doka Well-Known Member

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

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

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

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

    Anatoly Well-Known Member

    Регистрация:
    30 мар 2007
    Сообщения:
    204
    Симпатии:
    0
    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"
     
  9. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Не совсем понятно... нужен аналог функции VBA?
     
  10. doka

    doka Well-Known Member

    Регистрация:
    18 фев 2010
    Сообщения:
    118
    Симпатии:
    0
  11. Anatoly

    Anatoly Well-Known Member

    Регистрация:
    30 мар 2007
    Сообщения:
    204
    Симпатии:
    0
    Нужно организовать логический контроль данных в файлах перед тем как импортировать их в задачу.
    Эта ячейка не больше той, это равна сумме тех и т.д.
    То есть нужно как-то получать в скрипте суммы блоков и перечней ячеек
     
  12. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    наверное проще написать свою функцию подсчета сумм.
    Ну или какой-нибудь документ-правило в котором описать какая ячейка должна быть больше или меньше, суммы блоков и т.д.
    Если это статичные блоки конечно
     
  13. Anatoly

    Anatoly Well-Known Member

    Регистрация:
    30 мар 2007
    Сообщения:
    204
    Симпатии:
    0
    Так есть.
    Сделал документы по отчетам, к ним респонсы с описанием правил.
    Например поля одного из простых условий:
    LSide ="F9"
    RSide ="SUM(F10:F14)"
    Condition ="="
    И вот с получением результатов и их сравнения - затык...
     
  14. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    а чем не подходит вариант через WorksheetFunction?
    вот пример:
    Код (LotusScript):
    Set excelApp = GetObject ("", "Excel.Application")
    Set excelDoc = excelApp.Workbooks.Add
    Set myRange = excelDoc.Sheets(1).Range("A1:F10")
    answer = excelApp.Application.WorksheetFunction.Sum(myRange)
     
  15. Anatoly

    Anatoly Well-Known Member

    Регистрация:
    30 мар 2007
    Сообщения:
    204
    Симпатии:
    0
    Спасибо, не знал о таком.
    Набор функций WorksheetFunction достаточно обширен.
    Но придется что-то наворачивать в документе описания условия проверки: в полях остаются только диапазоны и уходят функции их обработки. Придется расширять доки по описанию условий.
     
  16. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Не айс, конечно, но можно объявить answer, excelApp, глобальными и использовать Execute, например:
    Код (LotusScript):
    Execute({answer = excelApp.Application.WorksheetFunction.Sum(excelDoc.Sheets(1).Range("A1:F10"))})
    If answer = 0 Then '...
    Строку для Execute формировать из значений полей тестовых документов.
     
Загрузка...
Похожие Темы - Evaluate Excel Lotus
  1. Cleric-Lviv
    Ответов:
    5
    Просмотров:
    2.313
  2. hosm
    Ответов:
    4
    Просмотров:
    2.846
  3. MMN
    Ответов:
    6
    Просмотров:
    3.247
  4. Гринго
    Ответов:
    38
    Просмотров:
    1.095
  5. Dragon108
    Ответов:
    1
    Просмотров:
    473

Поделиться этой страницей