Как мне отредактировать файл PPTX через Java, когда он открыт в Microsoft PowerPoint?
Применительно к POI - Не удается записать в файл, когда он открыт в Excel?
Требуемая функциональность для моего разрабатываемого приложения Java - версия PowerPoint, описанная выше: с помощью Java создайте слайд и добавьте контент, созданный из захваченных данных приложения, а затем добавьте слайд в существующий файл PowerPoint, который в данный момент открыт в Microsoft PowerPoint.
Если файл PowerPoint не открыт, приложение Java сначала откроет Microsoft PowerPoint, если необходимо, затем создаст новый пустой файл PowerPoint, а затем откроет его в Microsoft PowerPoint.
Например, мое приложение создаст Test.pptx
, Приложение откроет его в приложении Microsoft PowerPoint. Далее я добавляю слайд. Операция завершается успешно, исключений не выдается. Однако изменения не отражаются в представлении Microsoft PowerPoint.
- Если я закрою файл в Microsoft PowerPoint и открою его снова, можно увидеть обновленные изменения. Однако это не то, что я хочу. Пользователь должен иметь возможность постоянно добавлять новые слайды и видеть, как эти слайды обновляются в представлении Microsoft PowerPoint на лету, без необходимости перезапускать приложение Microsoft PowerPoint после каждого добавления слайдов.
- Я заметил, что когда файл PowerPoint открывается в Microsoft PowerPoint,
~$Test.pptx
временный файл создан на моем рабочем столе. Я пытался заставить свое Java-приложение добавлять сгенерированные слайды прямо в~Test.pptx
ноFileNotFoundException: the process cannot access the file because it is being used by another process.
впоследствии брошен.
Приложение реализовано с использованием Java 1.8, работает под управлением Windows 10 и использует Microsoft Office 2013. Разработка этой конкретной функции только началась с нуля, поэтому решения все еще находятся в поиске и изучении.
В настоящее время мы используем Apache POI, но мы можем отказаться от его использования, если это означает решение проблемы. Было предложено использовать макросы Microsoft Office. Эта идея все еще изучается, поскольку мы не понимаем, как использовать макросы в достаточной степени, чтобы определить, соответствует ли он нашим требованиям.
Как я могу реализовать необходимые функции? Какие технологии или библиотеки мне понадобятся для выполнения работы?
Пример кода взят из учебника Apache POI PPT от TutorialsPoint. Существующий файл PowerPoint уже должен быть открыт в Microsoft PowerPoint, и при запуске приведенного ниже кода мне нужно немедленно увидеть добавленные слайды в представлении Microsoft PowerPoint. Напоминание: использование Apache POI не обязательно.
public class EditPresentation {
public static void main(String ar[]) throws IOException{
//opening an existing slide show
File file = new File("example1.pptx");
FileInputStream inputstream=new FileInputStream(file);
XMLSlideShow ppt = new XMLSlideShow(inputstream);
//adding slides to the slodeshow
XSLFSlide slide1 = ppt.createSlide();
XSLFSlide slide2 = ppt.createSlide();
//saving the changes
FileOutputStream out = new FileOutputStream(file);
ppt.write(out);
System.out.println("Presentation edited successfully");
out.close();
}
}