Чтение текстов UTF-8 в PowerPoint через VBA для экспорта в другое программное обеспечение

Я хочу прочитать весь текст в файле PowerPoint с помощью VBA и записать его во внешний файл (или каким-либо другим способом) для использования в другом программном обеспечении.

Я написал этот код:

Sub ReadFileText()
    On Error Resume Next
    Dim shp As Shape
    
    For Each sld In ActivePresentation.Slides
        For Each shp In sld.Shapes
             If shp.TextFrame.HasText Then
                MsgBox shp.TextFrame.TextRange.Text
                ' if text was read successfully, I can save it to a text or json file.
             End If
        Next shp
    Next sld
End Sub

Некоторые фигуры содержат в тексте символы, отличные от ASCII (UTF-8). VBA возвращает их как "?" характер!

Как я могу прочитать текст фигуры как строку UTF-8?

Чтение текстов UTF-8 в PowerPoint через VBA для экспорта в другое программное обеспечение

Пожалуйста, поделитесь скриншотом формы. Какой следующий шаг после получения текста?

taller 27.06.2024 18:15

@taller Я не знаю, как сюда вставить изображения! Но скриншот я загрузил сюда: imgur.com/a/S54IHDa

Abbas Hosain 27.06.2024 18:20

Пожалуйста, поделитесь снимком экрана с фигурами/слайдом вместо всплывающего окна сообщения. Нажмите кнопку Изменить, расположенную под тегами, чтобы загрузить изображение.

taller 27.06.2024 18:23

Вы не можете правильно отобразить текст UTF-8 с помощью MsgBox (или Debug.Print) stackoverflow.com/questions/55210315/… Принятый ответ в связанном сообщении показывает, как это обойти.

Tim Williams 27.06.2024 18:39

@TimWilliams хочет читать со слайдов, поэтому я не могу использовать ChrW()

Abbas Hosain 27.06.2024 19:02

@taller Я добавляю как способ сказать, бот, опять же, это ссылка в вопросе!

Abbas Hosain 27.06.2024 19:03

«Читать со слайдов» что именно означает? Вы просто отображаете в окне сообщения текст, который уже видите на слайде?

Tim Williams 27.06.2024 19:15

Я задала тот же вопрос в первом комментарии, что и @Tim. What's the next step after retrieving the text?

taller 27.06.2024 19:21

Вы используете «UTF-8» для обозначения «Юникода». Они не одинаковые. Решение , которое вам посоветовали, заключается в объявлении MessageBoxW, а не в использовании ChrW, чтобы вы могли его использовать.

GSerg 30.06.2024 09:39

Зафиксировал вопрос: хочу экспортировать данные в другой софт.

Abbas Hosain 30.06.2024 15:25

@GSerg Это не то же самое, что вопрос, который вы отметили как дублированный, я уточняю вопрос и принимаю правильный ответ.

Abbas Hosain 30.06.2024 15:27
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
11
75
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вместо использования MsgBox создайте простой UserForm с помощью Label. Label позволяет настроить свойства текста, чтобы вы могли выбрать подходящий шрифт, который будет правильно отображать символы.

Ответ принят как подходящий

PowerPoint/VBA может работать внутри UTF-8, но, как упоминает Тим, не может отображать текст UTF-8 в окнах сообщений/окне отладки.

Но когда я добавляю на слайд текст на японском языке,

Activewindow.Selection.ShapeRange(1).TextFrame.TextRange.Copy

Затем я могу вставить в блокнот файл UTF-8 и получить правильный текст.

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

Вы используете «UTF-8» для обозначения «Юникода». Они не одинаковые. PowerPoint/VBA не просто «может» внутренне работать со строками Unicode, он работает и работает. Все строки в VBA имеют формат Unicode, строк, не поддерживающих Unicode, нет.

GSerg 30.06.2024 09:40

>> PowerPoint/VBA не просто «может» внутренне работать со строками Unicode, он работает и работает. Да, все строки в VBA внутри Unicode. Но не в messageboxes/debug.print и, возможно, в других местах. Попробуйте отладить код, который возвращает, например. Упрощенный китайский текст. Не играя в игры с языковыми настройками Windows, вы получаете только квадратные прямоугольники или ???

Steve Rindsberg 30.06.2024 21:47

Другие вопросы по теме