Сохранение и автосохранение документов PowerPoint OpenXML PresentationDocuments

Мне нужен совет по сохранению документов OpenXML, в частности PresentationDocument.

В моем сценарии я открываю презентацию PowerPoint .pptx прямо с диска, который действует как шаблон. Затем я добавляю (копирую) слайды из других презентаций PowerPoint. Для каждой отдельной исходной презентации я также добавляю ее MasterSlideParts и SlideLayoutParts.

Вопрос 1: Если презентацию необходимо сохранить, могу ли я выполнить одну команду, которая сохранит все изменения в PresentationDocument? Или мне нужно вручную сохранять каждый новый или измененный элемент, например:

        presentationDocument.PresentationPart.Presentation.Save();

        foreach (var slideMasterPart in presentationDocument.PresentationPart.SlideMasterParts)
        {
            slideMasterPart.SlideMaster.Save();
        }

Вопрос 2: при открытии PresentationDocument есть опция «автосохранение», которая, кажется, по умолчанию имеет значение «true». Может ли кто-нибудь объяснить, что именно делает автосохранение?

Что-то, что я прочитал, предполагает, что это сохраняет все в PresentationDocument, когда PresentationDocument удаляется. Это правильно?

Если это так, мне нужно будет установить autosave = false, так как мне нужно будет контролировать свое сохранение, чтобы иметь возможность протестировать логику построения презентации.

Заранее благодарим за любые ответы.

Стив


person Appetere    schedule 19.10.2011    source источник
comment
Вы спрашиваете, как работает автосохранение? Чтобы узнать ответ на этот вопрос, нужно прочитать описание этой опции в MSDN.   -  person Security Hound    schedule 19.10.2011
comment
Если у вас есть несколько вопросов, я предлагаю разделить их. Оба эти вопроса можно решить, прочитав документацию.   -  person Security Hound    schedule 19.10.2011
comment
Спасибо за комментарии Ramhound. Я потратил много часов на поиск документации MSDN, но не нашел конкретного ответа на эти два связанных вопроса, поэтому я надеялся, что кто-то здесь сможет мне помочь.   -  person Appetere    schedule 19.10.2011


Ответы (1)


Вопрос 1: Если вы используете потоки для открытия файла и внесения изменений таким образом, вам не нужно явно вызывать ни один из этих вызовов сохранения. Вам просто нужно вызвать метод Dispose() для переменной presentationDocument. В документации указано, что нужно утилизировать

Очищает и сохраняет содержимое, закрывает документ и освобождает все ресурсы.

Это избавит вас от необходимости вызывать сохранение в презентации или перебирать каждый отдельный слайд.

Вопрос 2: документация для autosave утверждает следующее:

Получает флаг, указывающий, следует ли сохранять детали при утилизации.

Это заставило бы меня поверить, что если вы хотите, чтобы все части были сохранены при вызове метода Dispose(), вам нужно, чтобы это значение было установлено в true. В противном случае ваши изменения могут не быть сохранены.

person amurra    schedule 20.10.2011
comment
Спасибо, Амурра. Я использовал PresentationDocument для открытия файлов непосредственно с диска, но сначала открыть их как потоки, а затем передать потоки в PresentationDocument, как вы предлагаете, - это гораздо лучшая идея. Это также значительно упрощает тестирование, поскольку я должен иметь возможность передавать MemoryStream с тестовым документом, вместо того, чтобы переходить на диск. Спасибо! - person Appetere; 23.10.2011