Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.02.2009, 16:17   #1
valdem
Пользователь
 
Регистрация: 18.02.2009
Сообщений: 15
По умолчанию макрос копирования текста из тегов и вставки в другие теги

есть xml документ. открываю его вордом. Нужно написать макрос который делает следующее
текст который между тегами <englishPhrase> копирует и вставляет в между тегами <translation> </translation> которые идут следом.

т.е. сейчас в тексте так:
<englishPhrase> in Span</englishPhrase>
<translation> </translation>
а нужно вот так:
<englishPhrase> in Span</englishPhrase>
<translation> in Span</translation>
valdem вне форума Ответить с цитированием
Старый 18.02.2009, 17:19   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Теги translation идут следом на той же строке, или на другой?
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 18.02.2009, 17:25   #3
valdem
Пользователь
 
Регистрация: 18.02.2009
Сообщений: 15
По умолчанию

на следующей строке
valdem вне форума Ответить с цитированием
Старый 18.02.2009, 17:55   #4
valdem
Пользователь
 
Регистрация: 18.02.2009
Сообщений: 15
По умолчанию

еще когда вордом xml открываешь он теги как то выделяет. поиском не получается найти символы "<" ">"
valdem вне форума Ответить с цитированием
Старый 18.02.2009, 18:15   #5
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Пробуй
Код:
Sub ReplaceTag()
  Dim sFirstTag As String, sSecondTag As String
  sFirstTag = "englishPhrase": sSecondTag = "translation"
  ActiveDocument.Range.Start = 0
  With ActiveDocument.Range.Find
    .ClearFormatting: .Replacement.ClearFormatting
    .Text = "\<" & sFirstTag & "\>" & "*" & "\</" & sFirstTag & "\>"
    .MatchWildcards = True
    While .Execute
      .Parent.Paragraphs(1).Next.Range.Text = replace(.Parent.Text, sFirstTag, sSecondTag) & vbCr
    Wend
  End With
End Sub
Для 100% надежности результата нужен исходный файл.

Добавлено позже
Кстати, обнаружил, что у документа есть свойство XMLNodes, содержащее в себе коллекцию узлов XML-документа. Если будет совсем никак, то можно с ним работать.
Если сходу макрос не работает, то можно сохранить его в текст, заменить, что нужно, а затем опять сохранить в XML.
Но, повторяю, выслать оригинал, тогда будет проще разобраться.
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 18.02.2009 в 18:57.
viter.alex вне форума Ответить с цитированием
Старый 18.02.2009, 19:23   #6
valdem
Пользователь
 
Регистрация: 18.02.2009
Сообщений: 15
По умолчанию

не работает, и с пересохранением не получается . куда файл выслать? Буду очень благодарен если поможете
valdem вне форума Ответить с цитированием
Старый 18.02.2009, 19:39   #7
valdem
Пользователь
 
Регистрация: 18.02.2009
Сообщений: 15
По умолчанию

тупанул... вот файлde.neededtranslations.doc только в оригинале расширение у него xml.
valdem вне форума Ответить с цитированием
Старый 18.02.2009, 20:43   #8
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Так надо было и выкладывать в xml. Только заархивировать. Как же теперь искать, если даже структура xml потеряна?
Добавлено позже
Виноват, структура осталась. Будем мучать через XMLNodes
Добавлено еще позже
Лови.
Код:
Sub ReplaceTag()
  Dim sFirstTag As String, sSecondTag As String
  Dim oNode As XMLNode
  sFirstTag = "englishPhrase": sSecondTag = "translation"
  For Each oNode In ActiveDocument.XMLNodes
    If oNode.BaseName = sFirstTag Then
      If oNode.NextSibling.BaseName = sSecondTag Then
        oNode.NextSibling.Text = oNode.Text
      End If
    End If
  Next
End Sub
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 18.02.2009 в 21:00.
viter.alex вне форума Ответить с цитированием
Старый 19.02.2009, 05:47   #9
valdem
Пользователь
 
Регистрация: 18.02.2009
Сообщений: 15
По умолчанию

работает! я в восторге. благодарю.
а можно сделать макрос, который открывает из папки все эти xml файлы, применяет вышенаписанный код и сохраняет xml?

Последний раз редактировалось valdem; 19.02.2009 в 06:05.
valdem вне форума Ответить с цитированием
Старый 19.02.2009, 05:50   #10
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Заявка на грант

А ведь может!
(Алекс, ещё 100 строк кода — и грант правительства обеспечен!)

Последний раз редактировалось Sasha_Smirnov; 19.02.2009 в 06:05. Причина: пояснение.
Sasha_Smirnov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос для копирования knyz Microsoft Office Excel 28 11.01.2009 06:12
Форматирование текста внутри поля. как? или другие варианты... smoky Microsoft Office Access 2 26.12.2008 19:09
mp3 теги Albenous Мультимедиа в Delphi 41 09.12.2008 10:49
программа поиска и замены+копирования текста 666dvg999 Общие вопросы C/C++ 4 05.10.2008 20:01
как качнуть из тегов текст в memo Лёка Работа с сетью в Delphi 4 03.02.2008 19:46