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

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

  1. dobozy

    dobozy Гость

    Всем привет!

    Есть такая проблемка. Требует отчёт, который будет генерится на 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

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

    dobozy Гость

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

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

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

    lmike нет, пердело совершенство
    Команда форума Lotus team

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

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

    ОДФ документирован и стандартизован:
    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 А че я?.. О.о

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

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

    lmike нет, пердело совершенство
    Команда форума Lotus team

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

    dobozy Гость

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

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

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

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

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