Могу ли я определить powerpoints или презентации в необработанном тексте? - PullRequest
1 голос
/ 12 октября 2011

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

Как я могу это сделать?Я думаю, что, возможно, латекс мог бы быть выбором.Я также видел, что есть API для презентаций Powerpoint и открытых офисов.

Ответы [ 2 ]

1 голос
/ 12 октября 2011

Powerpoint предоставляет свой API через COM - что позволяет делать (почти) все, что вы можете делать в GUI, на любом языке программирования, который поддерживает COM. Сложность в том, что API меняется между выпусками. Один из способов расширить API - использовать средство записи макросов, чтобы вручную сделать один слайд, а затем перевести его на целевой язык.

У меня есть какой-то старый (недавно не проверенный) код Python для Powerpoint 2003, который должен дать вам представление о том, как может выглядеть код в зависимости от потребностей вашего макета.

from win32com.client import Dispatch

ppLayoutTitle = 1
ppLayoutText  = 2

def writePresentation( fname, data ):
    pptApp = Dispatch('Powerpoint.Application')
    pres   = pptApp.ActivePresentation
    aw     = pptApp.ActiveWindow
    slides = pres.Slides

    for item in data:
        t1 = item[0]
        t2 = item[1]
        stype = item[2]
        assert(stype in [ppLayoutTitle,ppLayoutText])
        s = slides.Add( slides.Count, stype )
        aw.View.GotoSlide(s.SlideIndex)

        s.Shapes.Item(1).Select()
        aw.Selection.ShapeRange.TextFrame.TextRange.Select()
        aw.Selection.ShapeRange.TextFrame.TextRange.Characters(Start=1, Length=0).Select
        tr = aw.Selection.TextRange
        tr.Text = t1

        s.Shapes.Item(2).Select()
        aw.Selection.ShapeRange.TextFrame.TextRange.Select()
        if stype == ppLayoutText:
            aw.Selection.ShapeRange.TextFrame.TextRange.ParagraphFormat.Bullet.Visible = 0
        aw.Selection.ShapeRange.TextFrame.TextRange.Characters(Start=1, Length=0).Select
        tr = aw.Selection.TextRange
        tr.Text = t2
    slides.Range(slides.Count).Delete()
    pres.SaveAs(fname)

Edit:

Openoffice (который может экспортироваться в powerpoint) также поставляется с API сценариев , который можно использовать для решения подобных проблем.

1 голос
/ 12 октября 2011

Если все, что вам нужно, это слайды с заголовками и маркированным текстом, это довольно просто. Создайте текстовый файл, который выглядит следующим образом (используйте клавишу TAB вместо ниже):

Slide 1 Title
<tab>Bullet Level One Text
<tab><tab>Bullet Level Two Text
<tab>Back to Bullet Leven One again
Slide 2 Title
Slide 3 Title
<tab>More Bulleted text
<tab><tab>Tufte hates us by now
<tab><tab>But we don't care, do we?
Slide 4 Title

И так далее. Сохраните файл, запустите PowerPoint, выберите команду открытия файла, выберите Outline или файлы всех типов в диалоговом окне открытия файла и выберите файл TXT. Готово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...