Извлечь текст из Powerpoint

Извлечь текст из Powerpoint

Итак, я нашел вот этот замечательный скрипт: http://www.pptfaq.com/FAQ00274_Экспорт_Текста_в_текстовый_файл-_извлечение_текста_из_PowerPoint_-Mac_или_ПК-.htm (Я использую второй)

Импортная часть такова:

 For Each oShp In oSld.Shapes                'Loop thru each shape on slide
      'Check to see if shape has a text frame and text
      If oShp.HasTextFrame And oShp.TextFrame.HasText Then
        If oShp.Type = msoPlaceholder Then
            Select Case oShp.PlaceholderFormat.Type
                Case Is = ppPlaceholderTitle, ppPlaceholderCenterTitle
                    Print #iFile, "Title:" & vbTab & oShp.TextFrame.TextRange
                Case Is = ppPlaceholderBody
                    Print #iFile, "Body:" & vbTab & oShp.TextFrame.TextRange
                Case Is = ppPlaceholderSubtitle
                    Print #iFile, "SubTitle:" & vbTab & oShp.TextFrame.TextRange
                Case Else
                    Print #iFile, "Other Placeholder:" & vbTab & oShp.TextFrame.TextRange
            End Select
        Else
            Print #iFile, vbTab & oShp.TextFrame.TextRange
        End If  ' msoPlaceholder
      Else  ' it doesn't have a textframe - it might be a group that contains text so:
        If oShp.Type = msoGroup Then
            sTempString = TextFromGroupShape(oShp)
            If Len(sTempString) > 0 Then
                Print #iFile, sTempString
            End If
        End If
      End If    ' Has text frame/Has text

    Next oShp

Я уже немного изменил его, так что выходной файл не содержит "Title", "Other Placeholder" и подобного текста, и не вставляет табуляции ("vbTab"). Однако он помещает каждую строку (или абзац) в новую строку в выходном файле.

Вопрос:Как мне указать скрипту выгрузить все «содержимое» из «слайда»/«тела» в одну строку/ячейку?

Я заметил, что этот скрипт (и ни этотhttp://www.pptfaq.com/FAQ00332_Экспорт_Номер_Слайда_и_Текст_Названия_В_Текстовый_файл.htm) демонстрирует это поведение для заголовков, только для «body» или «ppPlaceholderBody».

Я понятия не имею, почему так и в чем разница. Может ли он просто не различать две строки или бюллетени даже в одной форме/поле? Моя цель — иметь последовательную нумерацию строк/ячеек в нескольких .ppt, чтобы одна добавленная строка на слайде 2 не приводила к смещению содержимого слайда 5 на следующую строку.

Спасибо за помощь!

решение1

Моя установка PowerPoint в данный момент не работает, поэтому это не проверено. Но...

Вам просто нужно создать строковую переменную и добавить к ней данные, а затем, когда вы закончите работу со слайдом, скопировать эту строку в ячейку Excel.

Dim slideText As String
For Each oShp In oSld.Shapes                 'Loop thru each shape on slide
    If Len(slideText) > 0 Then
        '--- strip the unneeded trailing CRLF
        slideText = Left$(slideText, Len(slideText) - 2)
        '--- now copy the string to the appropriate cell in Excel
    Else
        '--- clear the string for the next slide
        slideText = vbNullString
    End If

    'Check to see if shape has a text frame and text
    If oShp.HasTextFrame Then
        If oShp.TextFrame.HasText Then
            If oShp.Type = msoPlaceholder Then
                Select Case oShp.PlaceholderFormat.Type
                    Case Is = ppPlaceholderTitle, ppPlaceholderCenterTitle
                        slideText = slideText & "Title:" & vbTab & _
                                    oShp.TextFrame.TextRange & vbCrLf
                    Case Is = ppPlaceholderBody
                        slideText = slideText & "Body:" & vbTab & _
                                    oShp.TextFrame.TextRange & vbCrLf
                    Case Is = ppPlaceholderSubtitle
                        slideText = slideText & "SubTitle:" & vbTab & _
                                    oShp.TextFrame.TextRange & vbCrLf
                    Case Else
                        slideText = slideText & "Other Placeholder:" & _
                                    vbTab & oShp.TextFrame.TextRange & vbCrLf
                End Select
            Else
                slideText = slideText & vbTab & oShp.TextFrame.TextRange
            End If                           ' msoPlaceholder
        End If
    Else
        ' it doesn't have a textframe - it might be a group that contains text so:
        If oShp.Type = msoGroup Then
            sTempString = TextFromGroupShape(oShp)
            If Len(sTempString) > 0 Then
                slideText = slideText & sTempString & vbCrLf
            End If
        End If
    End If                                   ' Has text frame/Has text
Next oShp

'--- catch the text on the last slide here
If Len(slideText) > 0 Then
    '--- strip the unneeded trailing CRLF
    slideText = Left$(slideText, Len(slideText) - 2)
    '--- now copy the string to the appropriate cell in Excel
End If

Конечно, вы проделываете этот цикл для каждого слайда.

решение2

Я не думаю, что это поможет, но вот это:https://stackoverflow.com/questions/45468824/печать-из-ppt-vba-в-таблицу-Excel пытается сделать что-то подобное, используя Lbound и Ubound для печати в определенных ячейках.

Пока ячейки остаются неизменными в нескольких ppt/xls, я не совсем понимаю, куда деваются строки...

(Хотя он также выбирает определенный файл xls, в то время как я хочу создавать новый файл для каждой распечатки, но это не должно быть проблемой с кодом, который у меня уже есть, который либо создает определенный файл, либо использует имя файла из ppt.)

Связанный контент