powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Прочитать Word и обработать.
25 сообщений из 36, страница 1 из 2
Прочитать Word и обработать.
    #37070126
yanyariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут вот пришлось вордом заняться, причем срочно. А знаю его где-то на 2%. Или меньше. Я то VB.Net изучать пытаюсь.
Мне нужно программно прочитать текст в вордовском документе, построчно.
Чувствую,что нужно Range нужно применить. Но как?
И еще, в читаемых строках имеются формулы. То есть читать в строковые переменные не получиться. Во что читать такие строки?
Подскажите пожалуйста, как это делается.
...
Рейтинг: 0 / 0
Прочитать Word и обработать.
    #37070146
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) В ворде нет строк. Текст делится на параграфы, параграфы на предложения, предложения на слова. Для каждого из них можно получить объект Range.
2) Офисный редактор формул - черный ящик без дверцы. С ним ничего нельзя сделать программно.
...
Рейтинг: 0 / 0
Прочитать Word и обработать.
    #37070201
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy1) В ворде нет строк. Текст делится на параграфы, параграфы на предложения, предложения на слова. Для каждого из них можно получить объект Range
Эх. Опровергать Антонария приятно, но страшно

Покопался в хелпе, сделал построчное чтение:
Код: plaintext
1.
2.
3.
4.
5.
Dim i As Integer
For i =  1  To  5 
  Selection.MoveEnd wdLine,  1 
  Debug.Print Selection
  Selection.GoToNext wdGoToLine
Next
Проходит только с объектом Selection, на переменную типа Range не действует

Но надо понимать, что строка в ворде все же понятие виртуальное, и зависит даже от разрешения принтера.
...
Рейтинг: 0 / 0
Прочитать Word и обработать.
    #37070313
yanyariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy2) Офисный редактор формул - черный ящик без дверцы. С ним ничего нельзя сделать программно.

Все, что мне нужно сделать с этим черным ящиком - выделить его из строки, потом вставить его в другую строку. Это возможно?
...
Рейтинг: 0 / 0
Прочитать Word и обработать.
    #37070316
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yanyariy,

нет
...
Рейтинг: 0 / 0
Прочитать Word и обработать.
    #37070327
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Впрочем, можно расковырять docx - там формулы присутствуют в виде xl\drawings\vmlDrawing1.vml (текст) и xl\media\image1.emf (картинка).
...
Рейтинг: 0 / 0
Прочитать Word и обработать.
    #37070329
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariyxl\На экселе проверял.
...
Рейтинг: 0 / 0
Прочитать Word и обработать.
    #37070994
yanyariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неужели нельзя удалить из строки все буквы, что бы осталась только формула? Ведь формула - это объект Microsoft Equation 3.0
раз это объект, его как то можно найти, определить, скопировать, перенести. Произвести какие то действия. Но как?
Как то не хочется верить, что это невозможно.
...
Рейтинг: 0 / 0
Прочитать Word и обработать.
    #37071012
yanyariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy1) В ворде нет строк. Текст делится на параграфы, параграфы на предложения, предложения на слова. Для каждого из них можно получить объект Range.

Теперь совсем тупой вопрос: параграф это от одного знака перевода строки до второго?
Пожалуйста, дайте пример кода последовательного получения параграфов в объект Range.
...
Рейтинг: 0 / 0
Прочитать Word и обработать.
    #37071085
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yanyariyскопировать, перенестиА ведь да, это можно. Саму коробку хоть по полу катай))
yanyariyНо как?Начать запись макроса, вставить формулу, поиграться с ней, окончить запись, посмотреть результат.
yanyariyТеперь совсем тупой вопрос: параграф это от одного знака перевода строки до второго?Скорее всего да.
yanyariyПожалуйста, дайте пример кода последовательного получения параграфов в объект Range.
Код: plaintext
1.
2.
For Each p in ThisDocument.Paragraphs
    Set r = p.Range
Next
...
Рейтинг: 0 / 0
Прочитать Word и обработать.
    #37071211
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyyanyariyТеперь совсем тупой вопрос: параграф это от одного знака перевода строки до второго?Скорее всего да.
НЕТ!!!

Параграф (а точнее Paragraph, а в русском офисе - абзац) - это от одного знака конца абзаца до другого!!!
...
Рейтинг: 0 / 0
Прочитать Word и обработать.
    #37071215
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так что автору надо определиться, что ему надо - построчное чтение (см. мой пример) или поабзацное чтение (см. пример Антонария)
...
Рейтинг: 0 / 0
Прочитать Word и обработать.
    #37071347
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Со строками ситуация несколько неоднозначная. :) Нужно различать "типографские" (назову их так) строки и строка электронного текста. Типографская строка это участок текста от левого края страницы до правого, а электронная — до перевода каретки или line feed или обоих вместе. Пример Shoker.Pro оперирует типографскими строками.

Shocker.ProПараграф (а точнее Paragraph, а в русском офисе - абзац) - это от одного знака конца абзаца до другого!!! Это в теории, а на практике каждый перевод строки энтером означает новый абзац. Мягкий перенос shift+enter в рамках абзаца в тексте представлен символом с кодом 11 (vbVerticalTab), который вроде бы никогда не считался разделителем строк. Или считался?
...
Рейтинг: 0 / 0
Прочитать Word и обработать.
    #37071387
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть автору нужно быть внимательным: то, что выглядит как несколько строк в ворде, может быть одной строкой в рамках правил например fso.TextStream при использовании ReadLine.
...
Рейтинг: 0 / 0
Прочитать Word и обработать.
    #37071388
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyСМягкий перенос shift+enter в рамках абзаца в тексте представлен символом с кодом 11 (vbVerticalTab), который вроде бы никогда не считался разделителем строк. Или считался?
Ну тут вопрос терминологии. Он в русской версии называется "разрыв строки". То есть типографская строка начнется новая. "Знак абзаца" разывает абзац.
...
Рейтинг: 0 / 0
Прочитать Word и обработать.
    #37071406
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, текст можно мерять попугаями разных видов и толщины :) Выбор за автором.
...
Рейтинг: 0 / 0
Прочитать Word и обработать.
    #37071562
yanyariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProAntonariyпропущено...
Скорее всего да.
НЕТ!!!

Параграф (а точнее Paragraph, а в русском офисе - абзац) - это от одного знака конца абзаца до другого!!!
Почему то думал, что знак перевода строки и знак конца абзаца это одно и то же. Как бы совсем не запутаться.
...
Рейтинг: 0 / 0
Прочитать Word и обработать.
    #37071676
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: yanyariy
> Почему то думал, что знак перевода строки и знак конца абзаца это одно и то же. Как бы совсем не запутаться.


Обычно так и бывает, но есть женщины в русских селенияхпрограммы обезображенные интелектом, в которых абзац это
когда ты нажал Enter. А до того как ты нажал Enter могут быть переносы строк, но они не будут концом абзаца. :)

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Прочитать Word и обработать.
    #37071717
yanyariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Я тут попробовал Ваш код в действии, вот что получилось:
Код: plaintext
1.
2.
3.
4.
For i =  1  To  5 
            W.ActiveDocument.Selection.MoveEnd(wdLine,  1 ) 'тут vs вежливо напомнил, что имя wdLine не объявлено
            Debug.Print(W.ActiveDocument.Selection)
            W.ActiveDocument.Selection.GoToNext(wdGoToLine) 'тут vs вежливо напомнил, что имя wdGoToLine не объявлено
        Next

Попытался скопировать абзац (параграф) и добавить его в документ вот так:
Код: plaintext
1.
2.
3.
Dim Параграф1 As Word.Paragraph 'Объявляю переменную

        Параграф1 = W.ActiveDocument.Paragraphs( 1 ) 'Присваиваю ей значение
        W.ActiveDocument.Paragraphs.Add(Параграф1) 'А тут vs говорит мне "несовпадение типа"

А времени, чтоб это хоть как то освоить - сутки.
...
Рейтинг: 0 / 0
Прочитать Word и обработать.
    #37071783
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторне объявленоПомимо копипасты нужно еще в ссылки проекта добавить ссылку на word.
авторнесовпадение типаПотому что add принимает тип range, а не paragraph.
...
Рейтинг: 0 / 0
Прочитать Word и обработать.
    #37071913
yanyariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariyавторне объявленоПомимо копипасты нужно еще в ссылки проекта добавить ссылку на word.
авторнесовпадение типаПотому что add принимает тип range, а не paragraph.

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

Перешел на макросы. Вставил такой код:
Код: plaintext
1.
2.
Dim Paragraf As Range
     Paragraf = ThisDocument.Paragraphs( 1 ) 'тут выделяет мне слово Paragraf и выдает сообщение "Compile error: Type mismatch"
    ActiveDocument.Paragraphs.Add (Paragraf)
Вожусь, пока толку нет.
...
Рейтинг: 0 / 0
Прочитать Word и обработать.
    #37071942
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yanyariy, не гнушись русскими словами
Paragraf = ThisDocument.Paragraphs(1)
вот так
ЦЭ = ThisDocument.Paragraphs(1)
...
Рейтинг: 0 / 0
Прочитать Word и обработать.
    #37071949
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
'тут выделяет мне слово Paragraf и выдает сообщение
Потому что читать нужно внимательней. Paragraph и Range это разные классы. Еще раз:
Код: plaintext
1.
2.
For Each pARAGRAPH in ThisDocument.Paragraphs
    Set r = pARAGRAPH.Range
Next
...
Рейтинг: 0 / 0
Прочитать Word и обработать.
    #37072018
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy, раз 10 я слышал, что ActiveDocument и ThisDocument это разные вещи, читал, а посему имею
Код: plaintext
1.
2.
3.
d = ActiveDocument.Paragraphs.Count
Debug.Print d '92
s = ThisDocument.Paragraphs.Count
Debug.Print s ' 1 
Вы предлагаете гнать цикл равный 1???
...
Рейтинг: 0 / 0
Прочитать Word и обработать.
    #37072028
yanyariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрю,

Замен на ЦЭ должного действия не произвела.
А вот такой код почти работает:
Код: plaintext
1.
2.
3.
Dim Параграф1 As Word.Range

        Параграф1 = W.ActiveDocument.Paragraphs( 1 ).Range
        W.ActiveDocument.Paragraphs.Add(Параграф1)
почти, потому что объект параграф создается, принимает значения первого абзаца. Но добавляется в документ пустая строка, точнее знак "конец абзаца"
...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Прочитать Word и обработать.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]