1. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

Ms Excel 97, Ole, Pivottable и проблемы :-)

Тема в разделе "Lotus - Программирование", создана пользователем dobozy, 23 дек 2008.

  1. dobozy

    dobozy Гость

    Репутация:
    0
    Всем привет!

    Есть такая проблемка. Требует отчёт, который будет генерится на MS Excel 97 шедульным агентом (что поделаешь так задумано). Скрипт создаёт PivotTable, форматирует её и всё такое. Всё бы ничего, но есть такие проблемы (ма):

    1. Call xl.workbooks(1).Close(false, false) не работает ("OLE automation error")
    Причём это не работает только для workbook-a на котором создан PivotTable через метод Wizard.

    2. Если закрыть на это глаза, то xl.Quit всё решает, но:
    • работает на W2000 Server
    • На XP - Excel crash происходит и инстанс остаётся висеть в памяти

    Код примерно так выглядит

    Set xl = createObject("excel.Application")
    ...
    Call xl.Workbooks.OpenText(f.FilePath)
    ...
    Call xl.ActiveWorkbook.WorkSheets.Add
    Call xl.WorkSheets(1).PivotTableWizard(1, cDataSourceName & "1!" & maxSelectionRange, "Sheet1!R5C1", g_ReportHeading, , , , False, , , , True)
    ...
    xl.displayalerts = False
    Сall xl.workbooks(1).SaveAs(strReportFilename, -4143)
    Call xl.workbooks(1).Close(False, False) 'Call xl.workbooks.close тоже не работает, флаг Saved = True
    Call xl.Quit
    Set xl = Nothing

    Что кто скажет? Спасибо!
     
  2. Medevic

    Medevic Что это ? :)
    Lotus team

    Репутация:
    0
    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Почему в одном месте xl.ActiveWorkbook, а в другом xl.workbooks(1)? Может везде xl.ActiveWorkbook использовать?
     
  3. dobozy

    dobozy Гость

    Репутация:
    0
    Я так понял это не имеет значения... Я и так и так использовал...
     
  4. Medevic

    Medevic Что это ? :)
    Lotus team

    Репутация:
    0
    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Здесь второй параметр - имя файла.
    Call xl.workbooks(1).Close(False, False)
     
  5. lmike

    lmike нет, пердело совершенство
    Lotus team

    Репутация:
    1
    Регистрация:
    27 авг 2008
    Сообщения:
    6.361
    Симпатии:
    336
    в коде удивляет создания пивотныхтаблов (а что - рэндж зафиксировать низя?)...
    мобуть - просто создать таблу (исходных данных) по-максимуму строк и менять её, а пивотную - пересчитывать...

    значить вот...
    запуск шедульных активХэ - это непредсказуемое (страшно-глючное) поведение приложения
    воизбежании таких мук, хайлирекоменд - перепишите код для ОО (Сергей приводил пример работы с ХМЛ для ОДФ-а), где сможете обойтись без МСкостылей
    да - это отнимет время, но получите предсказуемый результат и кроссплатформенность как бонус :(

    ОДФ документирован и стандартизован:
    http://en.wikipedia.org/wiki/OpenDocument
    http://std.dkuug.dk/keld/iso26300-odf/is26...1.0ed2-cs1.html
    http://docs.oasis-open.org/office/v1.1/OS/...cument-v1.1.pdf
     
  6. Akupaka

    Akupaka А че я?.. О.о

    Репутация:
    0
    Регистрация:
    4 окт 2007
    Сообщения:
    3.360
    Симпатии:
    2
    думаю, что речь идет не о шаблоне, а о создании док-та с "нуля"

    одно дело писать для "себя", либо для заказчика с "нуля" :( другое дело - доработка существующего приложения и такое изменение архитектуры не за минуту решается...
     
  7. lmike

    lmike нет, пердело совершенство
    Lotus team

    Репутация:
    1
    Регистрация:
    27 авг 2008
    Сообщения:
    6.361
    Симпатии:
    336
    а что мешает сделать шаблон?
     
  8. dobozy

    dobozy Гость

    Репутация:
    0
    Верно, это строку просто писал по памяти. Эти все параметры необязатeльны. Идущие следом варианты не работают тоже:
    close()
    close(false)
    close(false, strReportFilename)

    количество строк и толбцов в исходных данных динамическое. поэтому рейндж тоже динамический. И проблема вообще не в этом :(
    Таблица пересчитывается сама, я только программно определяю правила вывода: что строки, а что данные. Тут как раз всё отлично.

    В данной задаче шаблон намного неудобней лепить чем просто создать PivotTable.

    за ссылки спасибо, но пока я должен работать с тем, что есть. Akupaka верно подметил
     
Загрузка...

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