Сохранение и автоматическое сохранение документов презентации PowerPoint OpenXML

#c# #powerpoint #openxml #openxml-sdk #powerpoint-2007

#c# #powerpoint #openxml #openxml-sdk #powerpoint-2007

Вопрос:

Я ищу несколько советов по сохранению документов OpenXML, в частности документа PresentationDocument.

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

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

         presentationDocument.PresentationPart.Presentation.Save();

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

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

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

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

Заранее спасибо за любые ответы.

Стив

Комментарии:

1. Вы спрашиваете, как работает «автосохранение»? Чтобы узнать ответ на этот вопрос, нужно прочитать описание этой опции в MSDN.

2. Если у вас есть несколько вопросов, я предлагаю разделить их. Оба эти вопроса можно решить, прочитав документацию.

3. Спасибо за ваши комментарии, Рэмхаунд. Я потратил много часов на поиск документации MSDN, но не нашел конкретного ответа на эти два связанных вопроса, поэтому я надеялся, что кто-нибудь здесь сможет мне помочь.

Ответ №1:

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

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

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

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

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

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

Комментарии:

1. Спасибо, Амурра. Я использовал PresentationDocument для открытия файлов непосредственно с диска, но сначала открываю их как потоки, а затем передаю потоки в PresentationDocument, как вы предлагаете, это гораздо лучшая идея. Это также значительно упрощает тестирование, поскольку я должен иметь возможность передавать поток памяти с тестовым документом, а не переходить на диск. Спасибо!