Конференция "Corba" » Все тот же MS Office и его корявки
 
  • 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;

    ...



    Спасибо
  • umbra © (27.09.07 18:44) [2]
    в экселе (и в поверпойнте, наверное) первое сохранение надо делать методом
    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: Сервис->параметры->Общие
  • umbra © (28.09.07 10:09) [6]

    > молчаливо сохраняет файл где хочет

    не где хочет, а где написано в св-ве
    Application.DefaultFilePath

    . Надо или менять это свойство или передавать в
    SaveAs

    полный путь
  • umbra © (28.09.07 10:35) [7]
    чтобы показывало красивый диалог, пользуйтесь
    Application.GetSaveAsFilename

  • Magedon © (28.09.07 11:36) [8]
    > чтобы показывало красивый диалог, пользуйтесь Application.GetSaveAsFilena
    > me


    В Екселе
    Application.GetSaveAsFilename

    показывет красивый диалог с пустым фильтром. А как получить список поддерживаемых форматов я пока не нашел.

    А в Поверпоинте
    GetSaveAsFilename

    вообще нет :(
  • umbra © (28.09.07 11:56) [9]

    > А как получить список поддерживаемых форматов я пока не
    > нашел.

    пример из экселевской справки:

    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
    И что, каждый раз переписывать программу? Если это так, то этот М$ действительно маст дай.

    Неужели они не предусмотрели у себя какойто метод который возвращает список поддерживаемых форматов?
 
Конференция "Corba" » Все тот же MS Office и его корявки
Есть новые Нет новых   [134430   +2][b:0][p:0.002]