VBA - Powerpoint Sort Textboxes основаны на их свойствах «Top» и «Left» - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть несколько текстовых полей на слайде PowerPoint.Все они содержат текст.

Мне нужно отсортировать эти текстовые поля по порядку , чтобы я мог проходить по этим текстовым полям, захватывать текст и экспортировать его в файл CSV , ПОРЯДОК, сверху-слева-внизу-справа.

Например, если у меня на слайде 4 текстовых поля, мне нужно захватить текст в текстовом поле в порядке

  1. текстовое поле TOP-LEFT
  2. Текстовое поле TOP-RIGHT
  3. Текстовое поле BOTTOM-LEFT
  4. Текстовое поле BOTTOM-RIGHT

Часть кода (полученная из Интернета), которая экспортирует текст текстового поля вCSV-файл работает.За исключением того, что они вышли из строя .

Sub ExportTextToCSV()

    Dim oPres As Presentation
    Dim oSlides As Slides
    Dim oSld As Slide         'Slide Object
    Dim oShp As Shape         'Shape Object
    Dim sTempString As String
    Dim Quote As String
    Dim Comma As String
    Dim myText As String
    Dim myFilePath As String

    myFilePath = ".\Export_Textbox.CSV"
    Quote = Chr$(34)
    Comma = ","

    Set oPres = ActivePresentation
    Set oSlides = oPres.Slides

    For Each oSld In oSlides  'Loop thru each slide
      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
            myText = Replace(oShp.TextFrame.TextRange.Text, vbCr, vbCrLf)
            sTempString = sTempString & Quote & myText & Quote & Comma
        End If

      Next oShp

      'Add new line in CSV
      sTempString = sTempString & vbCrLf

      'Print the result to file:
      Call WriteToTextFileADO(myFilePath, sTempString, "UTF-8")

      'Clear the string
      sTempString = ""

    Next oSld
End Sub

Sub WriteToTextFileADO(filePath As String, strContent As String, CharSet As String)
    Set stm = CreateObject("ADODB.Stream")

    'if file exist, append
    If Len(Dir(filePath)) > 0 Then
        stm.Type = 2
        stm.Mode = 3
        stm.Open
        stm.CharSet = CharSet
        stm.LoadFromFile filePath
        stm.Position = stm.Size
        stm.WriteText strContent
        stm.SaveToFile filePath, 2
        stm.Close
    Else
        stm.Type = 2
        stm.Mode = 3
        stm.Open
        stm.CharSet = CharSet
        stm.WriteText strContent
        stm.SaveToFile filePath, 2
        stm.Close
    End If

    Set stm = Nothing
End Sub

Согласно сообщению stackoverflow " VBA Для каждого - порядка цикла ", он говорит:

"Позиция фигуры в z-порядке соответствует ее порядковому номеру в коллекции Shapes."

Я подумываю сначала создать и запустить макрос для re-установите все z-порядок фигур, основываясь на свойствах «Top» и «Left» формы текстового поля , прежде чем запускать макрос ExportTextToCSV ().

У меня проблемы с использованием ShapeRange или Collection, чтобы добавить ссылку на СУЩЕСТВУЮЩИЕ ФОРМЫ на слайде, и при сортировке их на основе их свойств "Top" и "Left".

Пожалуйста, помогите.Спасибо!

1 Ответ

0 голосов
/ 05 декабря 2018

Создайте отключенный набор записей, используя ADO, заполните его свойствами text name, text, top и left, затем отсортируйте их по верхним и левым позициям.Используйте это, чтобы заполнить ваш текстовый файл.См. Например: developer.rhino3d.com/guides/rhinoscript/ ...... - Тим Уильямс 23 часа назад

Это сработало.Спасибо, что указали мне правильное направление!

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

...