-
Magedon © (27.09.07 16:57) [0]Доброе время суток, уважаемые.
Допиливаю все тотже плагин к офису.
Использую для оффиса стандарные библиотеки Д6 - office2000, Word2000,...
Нашел одну корявку. Пока не знаю как исправить, поэтому и спрашиваю.
Корявка следующая.
По ходу работы нужно сохранить текущий АктивныйДокумент (АктиыныйВоркбук,АктивныйПрезентейшет...).
Когда документ уже сохранен и был просто изменен, то нет проблем.
Но когда документ новый, тогда его принудительно сохраняем, выдавая пользователю окно диалога.
Если текущее приложение Ворд, то кодFIWord.ActiveDocument.Save
красиво выдает красивый вордовский диалог сохранения. Т.е. все нормально.
Если же это другое приложение (Ексель, Поверпоинт,...)то такой же код (FIExcel.ActiveWorkbook.Save(FExcelLanguageID)
илиFIPower.ActivePresentation.Save
) диалог не выдает а волчаливо сохраняется.
Это меня не устраивает - пользователь сам должен сказать где и под каким именем сохранить файл.
Временно я всунул обычный TSaveDialog, в фильтр которого в зависимости от текущего приложения добавляю просто "*.xls|*.xsl", "*.ppt|*.ppt", т.к. пока не нашел возможности получить весь список поддерживаемых форматов.
Но это же не решение!!!
Поискал. У Екселя нашел функциюfunction GetSaveAsFilename(InitialFilename: OleVariant; FileFilter: OleVariant;
FilterIndex: OleVariant; Title: OleVariant; ButtonText: OleVariant;
lcid: Integer): OleVariant; safecall;
Везде, кроме lcid, поставил EmptyParam, так оно мне выдало диалог с фильтром *.*
Люди, подскажите, пожалуйста, как мне и остальные приложения (хотябы Ексель и ПоверПоинт) заставить сохранять свои файлы с ихими родными диалогами!!!
Спасибо -
Magedon © (27.09.07 17:11) [1]Да, забыл сказать чтоOnConnection(const HostApp: IDispatch;
ext_ConnectMode: Integer; const AddInInst: IDispatch;
var custom: PSafeArray);
...
FIWord := HostApp as WordApplication;
...
FIExcel := HostApp as ExcelApplication;
FExcelLanguageID := FIExcel.LanguageSettings.LanguageID[msoLanguageIDUI];
...
FIPower := HostApp as PowerPointApplication;
...
Спасибо -
в экселе (и в поверпойнте, наверное) первое сохранение надо делать методомSaveAs
-
Magedon © (27.09.07 19:14) [3]Не угадали :)
Делаю так
FIExcel.ActiveWorkbook.SaveAs(
EmptyParam{Filename},
EmptyParam{FileFormat},
EmptyParam{Password},
EmptyParam{WriteResPassword},
EmptyParam{ReadOnlyRecommended},
EmptyParam{CreateBackup},
xlNoChange{AccessMode},
EmptyParam{ConflictResolution},
EmptyParam{AddToMru},
EmptyParam{TextCodepage},
EmptyParam{TextVisualLayout},
// EmptyParam{Local},//o2003
FExcelLanguageID{lcid})
молчаливо сохраняет файл где хочет.
Интересно что Ексель сохраняет в моих документах, а поверпоинт на рабочем столе :) -
Magedon © (27.09.07 19:15) [4]Может для немолчаливого сохранения нужно какой то флаг установить?
-
EvS © (27.09.07 22:09) [5]> молчаливо сохраняет файл где хочет.
> Интересно что Ексель сохраняет в моих документах, а поверпоинт
> на рабочем столе :)
Не где хочет, а где пользователь прописал( или оставил по умолчанию)
РР: Сервис->Параметры->Сохранение
Excel: Сервис->параметры->Общие -
> молчаливо сохраняет файл где хочет
не где хочет, а где написано в св-веApplication.DefaultFilePath
. Надо или менять это свойство или передавать вSaveAs
полный путь -
чтобы показывало красивый диалог, пользуйтесьApplication.GetSaveAsFilename
-
Magedon © (28.09.07 11:36) [8]> чтобы показывало красивый диалог, пользуйтесь Application.GetSaveAsFilena
> me
В ЕкселеApplication.GetSaveAsFilename
показывет красивый диалог с пустым фильтром. А как получить список поддерживаемых форматов я пока не нашел.
А в ПоверпоинтеGetSaveAsFilename
вообще нет :( -
> А как получить список поддерживаемых форматов я пока не
> нашел.
пример из экселевской справки:fileSaveName = Application.GetSaveAsFilename( _
fileFilter:="Text Files (*.txt), *.txt")
If fileSaveName <> False Then
MsgBox "Save as " & fileSaveName
End If -
Magedon © (28.09.07 12:48) [10]В смысле я сам должен определять список форматов?
Т.е. определять версию приложения, в соответсвии с ней сам заполнять фильтр?
Бред какой-то. Сегодня вышел 2007 с нестандартным разширением *.xlsx, завтра выйдет 2008 с *.xlsy, послезавтра 2009 с *.xlsz
И что, каждый раз переписывать программу? Если это так, то этот М$ действительно маст дай.
Неужели они не предусмотрели у себя какойто метод который возвращает список поддерживаемых форматов?