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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.02.2009, 08:17   #11
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от valdem Посмотреть сообщение
работает! я в восторге. благодарю.
а можно сделать макрос, который открывает из папки все эти xml файлы, применяет вышенаписанный код и сохраняет xml?
Идя навстречу пожеланиям трудящихся…
Код:
Sub ReplaceTagsInMultiplyFiles()
  Dim sFirstTag As String, sSecondTag As String
  Dim oNode1 As XMLNode, oNode2 As XMLNode, oDoc As Word.Document, sPath As Variant, sFileName As String
  sFirstTag = "englishPhrase": sSecondTag = "translation"
  With Application.FileDialog(msoFileDialogFilePicker)
    .AllowMultiSelect = True
    .Title = "Выберите файлы": .Filters.Clear: .Filters.Add "Файлы XML", "*.doc"
    If .Show <> 0 Then
      For Each sPath In .SelectedItems
        Set oDoc = Documents.Open(sPath)
        For Each oNode1 In oDoc.XMLNodes
          If oNode1.BaseName = sFirstTag Then
            For Each oNode2 In oNode1.ParentNode.ChildNodes
              If oNode2.BaseName = sSecondTag Then
                oNode2.Text = oNode1.Text
              End If
            Next oNode2
          End If
        Next oNode1
        oDoc.Close True
      Next sPath
    Else: Exit Sub
    End If
  End With
End Sub
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 19.02.2009, 08:49   #12
valdem
Пользователь
 
Регистрация: 18.02.2009
Сообщений: 15
По умолчанию

Так это же здорово!
(А если и грант дадут, я вообще ликовать буду!)
valdem вне форума Ответить с цитированием
Старый 19.02.2009, 20:57   #13
valdem
Пользователь
 
Регистрация: 18.02.2009
Сообщений: 15
По умолчанию

Золотой человек!
Но наглость не знает границ. есть еще одна самая последняя задача.
должна решаться без программирования и макросов, но любому предложению буду рад.Task 3.rar

Последний раз редактировалось valdem; 20.02.2009 в 12:15.
valdem вне форума Ответить с цитированием
Старый 19.02.2009, 21:28   #14
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от valdem Посмотреть сообщение
Золотой человек!
Но наглость не знает границ. есть еще одна самая последняя задача. актуально до 10 утра по москве.
должна решаться без программирования и макросов, но любому предложению буду рад.Вложение 8964
Так, а что делать-то?
Телепаты в отпуске
Лучше день потерять — потом за пять минут долететь!©

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

тупанул!! Task 3.rar
valdem вне форума Ответить с цитированием
Старый 20.02.2009, 12:15   #16
valdem
Пользователь
 
Регистрация: 18.02.2009
Сообщений: 15
По умолчанию

все еще надо очень

Последний раз редактировалось valdem; 20.02.2009 в 12:52.
valdem вне форума Ответить с цитированием
Старый 20.02.2009, 12:31   #17
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию Вот собственно и все.

Цитата:
Сообщение от valdem Посмотреть сообщение
все еще надо очень, до вечера
Пробую. Алгоритм такой: загружаем все в таблицу с двумя столбцами. Удаляем все до знака «=». Дальше пока думаю.

Добавлено позже
Все, что нужно было при решении данной задачи — системный подход. Итак, по порядку.
  1. Вставляем в документ два варианта друг за другом. Сначала английский, затем — русский.
  2. Удаляем пустые строки через поиск/замену.
  3. Все это добро преобразуем в таблицу с разделителем «=» и 4-мя столбцами. В результате получим таблицу, где в первом столбце будет то, что до знака «=», а во втором — все остальное. Третий и четвертый пока пустые.
  4. Вырезаем те строки таблицы, которые содержат в себе русский перевод. Это делается просто. С начала документа находим вторую фразу [About Dialog]. Все, что после нее, это русский перевод.
  5. После вырезания получили таблицу, в которой до половины заполнены два первых столбца. Пустые строки снизу, которые образовались при вырезании, удаляем.
  6. Вставляем то, что вырезали, в первую ячейку третьего столбца. Теперь у нас 1 и 3 столбцы идентичны и содержат идентификаторы меню, во 2-м столбце находится английский вариант, в 4-м — русский.
  7. С помощью макроса перемещаем заголовки разделов, типа [About Dialog] в соседнюю ячеку. Вот этот макрос.
    Код:
    Sub movetonext()
      With ThisDocument.Tables(1).Range.Find
        .ClearFormatting: .Replacement.ClearFormatting
        .Text = "\[<[A-Za-z0-9 ]@\]": .MatchWildcards = True
        While .Execute
          If InStr(.Parent.Cells(1).Range.Text, "&&") = 0 Then
            .Parent.Cells(1).Next.Range.Text = Left(.Parent.Cells(1).Range.Text, Len(.Parent.Cells(1).Range.Text) - 2) & "&&"
          End If
        Wend
      End With
    End Sub
  8. Удаляем символы «&&». Они использовались в макросе, чтобы избежать двойного поиска.
  9. Удаляем первый и третий столбцы.
  10. Преобразуем таблицу в текст, с разделителем по табуляции.
  11. Все. Сохраняем как текст. Почти без макросов, да и то, макрос использовался только для того, чтобы вручную не переносить текст из одной ячейки в соседнюю в 76 местах.

Заняло времени около 40 мин.
Вложения
Тип файла: rar About Dialog1.rar (13.6 Кб, 8 просмотров)
Лучше день потерять — потом за пять минут долететь!©

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

Снова большое спасибо. Сам примерно так и сделал, думал может есть что попроще, видимо нет.
А строки с цифрами можно как то удалить?
valdem вне форума Ответить с цитированием
Старый 21.02.2009, 13:08   #19
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от valdem Посмотреть сообщение
Снова большое спасибо. Сам примерно так и сделал, думал может есть что попроще, видимо нет.
А строки с цифрами можно как то удалить?
Куда уж проще!
Я ждал вопроса про цифры Сам делать не стал, потому что не интересно.
Строки с цифрами удаляем через поиск и замену:
  • Строка поиска:[0-9]@^0009[0-9]@^0013.
  • Строка замены пустая.
  • Поставить галочку «Подстановочные знаки».
Все цифры, разделенные табуляцией, будут удалены.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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