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

  • Автор темы dobozy
  • Дата начала
D

dobozy

#1
Всем привет!

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

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

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#2
Почему в одном месте xl.ActiveWorkbook, а в другом xl.workbooks(1)? Может везде xl.ActiveWorkbook использовать?
 
D

dobozy

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

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#4
Здесь второй параметр - имя файла.
Call xl.workbooks(1).Close(False, False)
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#5
в коде удивляет создания пивотныхтаблов (а что - рэндж зафиксировать низя?)...
мобуть - просто создать таблу (исходных данных) по-максимуму строк и менять её, а пивотную - пересчитывать...

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

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

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#6
мобуть - просто создать таблу (исходных данных) по-максимуму строк и менять её, а пивотную - пересчитывать...
думаю, что речь идет не о шаблоне, а о создании док-та с "нуля"

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

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#7
а что мешает сделать шаблон?
 
D

dobozy

#8
Здесь второй параметр - имя файла.
Call xl.workbooks(1).Close(False, False)
Верно, это строку просто писал по памяти. Эти все параметры необязатeльны. Идущие следом варианты не работают тоже:
close()
close(false)
close(false, strReportFilename)

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

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

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

ОДФ документирован и стандартизован:
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
за ссылки спасибо, но пока я должен работать с тем, что есть. Akupaka верно подметил