Я хочу прочитать весь текст в файле 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?
@taller Я не знаю, как сюда вставить изображения! Но скриншот я загрузил сюда: imgur.com/a/S54IHDa
Пожалуйста, поделитесь снимком экрана с фигурами/слайдом вместо всплывающего окна сообщения. Нажмите кнопку Изменить, расположенную под тегами, чтобы загрузить изображение.
Вы не можете правильно отобразить текст UTF-8 с помощью MsgBox (или Debug.Print) stackoverflow.com/questions/55210315/… Принятый ответ в связанном сообщении показывает, как это обойти.
@TimWilliams хочет читать со слайдов, поэтому я не могу использовать ChrW()
@taller Я добавляю как способ сказать, бот, опять же, это ссылка в вопросе!
«Читать со слайдов» что именно означает? Вы просто отображаете в окне сообщения текст, который уже видите на слайде?
Я задала тот же вопрос в первом комментарии, что и @Tim
. What's the next step after retrieving the text?
Вы используете «UTF-8» для обозначения «Юникода». Они не одинаковые. Решение , которое вам посоветовали, заключается в объявлении MessageBoxW
, а не в использовании ChrW
, чтобы вы могли его использовать.
Зафиксировал вопрос: хочу экспортировать данные в другой софт.
@GSerg Это не то же самое, что вопрос, который вы отметили как дублированный, я уточняю вопрос и принимаю правильный ответ.
Вместо использования 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, нет.
>> PowerPoint/VBA не просто «может» внутренне работать со строками Unicode, он работает и работает. Да, все строки в VBA внутри Unicode. Но не в messageboxes/debug.print и, возможно, в других местах. Попробуйте отладить код, который возвращает, например. Упрощенный китайский текст. Не играя в игры с языковыми настройками Windows, вы получаете только квадратные прямоугольники или ???
Пожалуйста, поделитесь скриншотом формы. Какой следующий шаг после получения текста?