Страницы: 1
RSS
Некорректно работает простой плагин, Забирает ненужную информацию, или вообще не берет.
 
Подскажите пожалуйста. Написал я плагин, который открывает ворд, считывает информацию и только переделённую информацию вставляет в определенные столбы экселя.
В чем проблема.
В ворде лежит текст:
16500-13-SD-104
16500-13-PFE-004
16500-13-RR-001-01A
16500-13-RR-002-01B.

В первый столбец, ок все четко вставляет 16500-13-RR-001-01A и 16500-13-RR-002-01B.
А вот во второй, кроме: 16500-13-SD-104 16500-13-PFE-004, он видит, что 16500-13-RR-001-01A. 16500-13-RR-002-01B начинаются так-же и запихивает их первую часть.

Я пробовал дать ему четкую информацию, поменяв выражение на ^(\d{5}-\d{2}-[A-Z]{2}-\d{3}|\d{5}-\d{2}-[A-Z]{3}-\d{3})$, добавив ^( и )$, но при таком раскладе, он вообще перестает что-либо вставлять во 2 столбец.

Подскажите как решить данную проблему. Код ниже.

<
Sub ForWord_Woter()
   Dim wdApp As Object
   Dim wdDoc As Object
   Dim clipboardText As String
   Dim regex1 As Object
   Dim regex2 As Object
   Dim regex3 As Object
   Dim regex4 As Object
   Dim matches1 As Object
   Dim matches2 As Object
   Dim matches3 As Object
   Dim matches4 As Object
   Dim match As Object
   Dim ws As Worksheet
   Dim rng As Range
   Dim rowA As Long
   Dim rowB As Long
   Dim rowC As Long
   Dim paragraph As Object
   
   ' Установите ссылку на текущий лист Excel
   Set ws = ThisWorkbook.Sheets(1) ' Укажите номер или имя вашего листа
   Set rng = ws.Range("A2:D10000") ' Диапазон очистки
   rng.ClearContents ' Очистка
   
   rowA = 2 ' Начальная строка для столбца A
   rowB = 2 ' Начальная строка для столбца B
   rowC = 2 ' Начальная строка для столбца C
   rowD = 2 ' Начальная строка для столбца D
   

   ' Создаем экземпляр Word и открываем документ
   Set wdApp = CreateObject("Word.Application")
   wdApp.Visible = True ' Сделайте Word видимым для пользователя
   Set wdDoc = wdApp.Documents.Open("C:\Users\..........docx") ' Укажите путь к вашему документу

   ' Создаем регулярные выражения для поиска
   Set regex1 = CreateObject("VBScript.RegExp")
   regex1.Global = True
   regex1.Pattern = "\b\d{5}-\d{2}-[A-Z]{2}-\d{3}-\d{2}[A-Z]|\d{5}-\d{2}-[A-Z]{3}-\d{3}-\d{2}[A-Z]\b" ' Шаблон для Кабелей
   
       Set regex2 = CreateObject("VBScript.RegExp")
   regex2.Global = True
   regex2.Pattern = "\b\d{5}-\d{2}-[A-Z]{2}-\d{3}\b|\b\d{5}-\d{2}-[A-Z]{3}-\d{3}\b" ' Шаблон для оборудования
   
   Set regex3 = CreateObject("VBScript.RegExp")
   regex3.Global = True
   regex3.Pattern = "\b[A-Z]{3}-[A-Z]{3}-[A-Z]{3}-\d{5}-\d{2}-\d{4}-[A-Z]{3}\d{1}-[A-Z]{3}-\d{5}-\d{2}\.\w{3}|[A-Z]{3}-[A-Z]{3}-[A-Z]{3}-\d{5}-\d{2}-\d{4}-[A-Z]{3}-[A-Z]{3}-\d{5}-\d{2}\.\w{3}\b" ' Шаблон для документа GCC-IST-DDD-16500-13-0000-SSA-SHM-00001-03.dwg

   'Set regex4 = CreateObject("VBScript.RegExp")
   'regex4.Global = True
   'regex4.Pattern = "\b 00|01|02|03|04|05|06|07|08|09\b" ' Шаблон для Ревизии

   ' Проходите по каждому абзацу документа
   For Each paragraph In wdDoc.Paragraphs
       clipboardText = Trim(paragraph.Range.text) ' Получаем текст из абзаца
       
   
       ' Ищем совпадения для первого шаблона
       Set matches1 = regex1.Execute(clipboardText)
       If matches1.Count > 0 Then
           For Each match In matches1
               ws.Cells(rowA, 1).Value = match.Value ' Вставляем в столбец A
               rowA = rowA + 1
           Next match
       End If

       
       ' Ищем совпадения для 2 шаблона
       Set matches2 = regex2.Execute(clipboardText)
       If matches2.Count > 0 Then
           For Each match In matches2
               ws.Cells(rowB, 2).Value = match.Value ' Вставляем в столбец B
               rowB = rowB + 1
           Next match
           Else
           Debug.Print "Совпадений не найдено."
       End If
       
       ' Ищем совпадения для 3 шаблона
       Set matches3 = regex3.Execute(clipboardText)
       If matches3.Count > 0 Then
           For Each match In matches3
               ws.Cells(rowC, 3).Value = match.Value  ' Вставляем в столбец С
               rowC = rowC + 1
           Next match
       End If
       
       ' Ищем совпадения для 4 шаблона
       'Set matches4 = regex4.Execute(clipboardText)
       'If matches4.Count > 0 Then
          ' For Each match In matches4
            '   ws.Cells(rowC, 4).Value = match.Value  ' Вставляем в столбец D
             '  rowD = rowD + 1
          ' Next match
      ' End If
   Next paragraph
   
   ' Закрываем документ Word
   wdDoc.Close SaveChanges:=False
   wdApp.Quit
End Sub
>
Изменено: DimShar - 09.08.2024 11:29:49
 
Файл(ы) - пример(ы) приложите (Word и Excel). Как есть - Как надо
Код в сообщении оформите соответствующим тегом (<...>)
Изменено: Sanja - 09.08.2024 11:16:48
Согласие есть продукт при полном непротивлении сторон
 
Цитата
написал:
Файл(ы) - пример(ы) приложите (Word и Excel). Как есть - Как надо
Изменено: DimShar - 09.08.2024 11:31:30
 
DimShar, в регулярках граница слова определяетяс по символам из множества \w поэтому - для них уже не относится к слову
Попробуйте \b\d{5}-\d{2}-[A-Z]{2,3}-\d{3}$
 
Цитата
написал:
Попробуйте \b\d{5}-\d{2}-[A-Z]{2,3}-\d{3}$
Так ничего вообще не выдает
Ощущение, что ему не нравятся вообще символы ^ $
Изменено: DimShar - 09.08.2024 12:47:43
 
Цитата
DimShar написал:
ничего вообще не выдает
у меня как то так

Хотя вы ищите в тексте абзаца, там скорее всего уже нет перевода строки. А зачем по каждому абхацу проходить, а не сразу по всему документу считать
Изменено: bigorq - 09.08.2024 12:51:18
 
Цитата
написал:
у меня как то так
Я понимаю, что вот верное выражение само по себе. Но почему эксель его не ест....
Те. написано то верно, а вывода нет при таком раскладе  
Изменено: DimShar - 09.08.2024 12:50:36
 
Цитата
DimShar написал:
эксель его не ест
вы ищите в тексте абзаца, там скорее всего уже нет перевода строки. А зачем по каждому абхацу проходить, а не сразу по всему документу искать
Изменено: bigorq - 09.08.2024 12:52:32
 
Цитата
написал:
А зачем по каждому абхацу проходить, а не сразу по всему документу искать
Поскольку я новичок в этом деле, делал дилетантски, а вот основную проблему я не знаю как решить, даже проходясь по файлу проблема не решается.
Изменено: DimShar - 09.08.2024 15:17:06
 
Я так понимаю, Excel тут очень опосредованно. Продолжаем в Курилке
Согласие есть продукт при полном непротивлении сторон
 
Можно так, поправил немного regex2.Pattern и учел пожелание трудящихся.
Скрытый текст
 
Цитата
DimShar написал:
[A-Z]{3}-[A-Z]{3}-[A-Z]{3}-
какая страшная регулярка )
(?:[A-Z]{3}-){3}

на примере из первого поста примерно так
(\d{5}-\d{2}-[A-Z]{2}-\d{3}-\d\d[A-Z])|(\d{5}-\d{2}-[A-Z]{2,3}-\d{3})
Изменено: nilske - 10.08.2024 19:24:12
Страницы: 1
Наверх