Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Можно ли найти фрагмент таблицы по символу 0164?

248
08 декабря 2007 года
Dmitry2064
590 / / 06.12.2006
Такой вопрос. Все ячейки в таблицах Ворда заканчиваются служебным ("неищущимся") символом (он изображается как Alt-0164 - ¤). Вот можно ли по такому символу или как-то еще искать фрагменты текста (повторю, что обычным поиском Ctrl-F это не ищется).
У меня в таблицах в первой колонке встречается такое сочетание, как:
"08 декабря
(планируется)¤". 164-й символ я сюда вписал для наглядности. Но он не ищется и не выделяется курсором. А я бы хотел находить все скобки, после которых идет такой символ (т.е. скобки, которыми заканчивается текст в ячейке). Выделять конструкцию из двух смежных скобок с внутренним содержимым и все это переносить в ячейку в соседней колонке.

Т.е. можно ли как-то организовать поиск последнего символа в ячейке?
251
09 декабря 2007 года
SkyMаn
1.7K / / 31.07.2007
Символ=chr$(164). Хотя на счет кода 164 неуверен, но его леко найти
248
10 декабря 2007 года
Dmitry2064
590 / / 06.12.2006
Таким образом вот и не ищется.
 
Код:
With Selection.Find
    .Forward = True
    .Execute FindText:=Chr$(164)
End With

Если такой символ просто написать (набрав Alt-0164), то конечно найдет. А если это служебный символ, обозначающий край ячейки, то тишина.:o
459
10 декабря 2007 года
gacol
273 / / 12.02.2003
А просто по номеру таблицы и номеру ячейки в ней твой поиск невозможен?
2.1K
10 декабря 2007 года
Tever
87 / / 05.08.2003
В ивритской кодировке символ Alt 0164 - это знак валюты (шекеля)
248
11 декабря 2007 года
Dmitry2064
590 / / 06.12.2006
Цитата: gacol
А просто по номеру таблицы и номеру ячейки в ней твой поиск невозможен?



А я не знаю. Мне просто надо текст в скобках, который встречается в некоторых ячейках в первой колонке перетащить в смежные ячейки в соседней колонке.
Поэтому надо бы просто искать по наличию скобок. Но для исключения ошибочного нахождения, я хотел бы искать именно по условию "текст в скобках в конце ячейки").

Хотя может придется ограничиться поиском просто текста в скобках в первой колонке. (если ничего не придумается) :o

251
11 декабря 2007 года
SkyMаn
1.7K / / 31.07.2007
Тут очень подошел бы RegExp.
Например, чтобы найти поучить текст в скобках в конце в PHP:
 
Код:
preg_match("/[^\"]+\"(A-Za-z)\"$/", $text, $arr)

в переменой $arr[0] - будет точный текст
В VB библиотеку regular expressions подключать тоже можно.
459
12 декабря 2007 года
gacol
273 / / 12.02.2003
Может просто так -считать содержимое ячейки в строк.переменную и проверить в ней последний символ = ")" и если да то искать слева "(".

До конца задачка не ясна, может вышлешь пример твоей ячейки.
6.4K
12 декабря 2007 года
Host
122 / / 22.09.2005
Цитата: SkyM@n
Тут очень подошел бы RegExp.


Полностью согласен.

Цитата: SkyM@n
...В VB библиотеку regular expressions подключать тоже можно.



"Microsoft VBScript Regular Expressions 5.5":

Код:
Public Function FindByRegExp(strStringCheck As String) As Boolean
Dim objRegExp As New RegExp
objRegExp.Pattern = "\(.+\).\007$"
Dim objMatches As Object
Dim objMatch As Object
Set objMatches = objRegExp.Execute(strStringCheck)
If objMatches.Count = 0 Then
   FindByRegExp = False
Else
   FindByRegExp = True
   For Each objMatch In objMatches
      MsgBox objMatch.Value
   Next
End If
End Function


PS: В конце строки расположен не один символ Chr$(164), а пара символов - перевод строки и Chr$(7)
248
13 декабря 2007 года
Dmitry2064
590 / / 06.12.2006
Цитата: gacol
Может просто так -считать содержимое ячейки в строк.переменную и проверить в ней последний символ = ")" и если да то искать слева "(".

До конца задачка не ясна, может вышлешь пример твоей ячейки.


Похоже, что так будет проще (а может и нет - надо попробовать).
А примерчик с таблицей прилагаю. Сам документ представляет из себя 10-15 страниц простого текста и потом страниц 20 с таблицами, отделенными друг от друга подзаголовками с названием месяца и датой.
Т.е. задачка все встречающиеся скобки в первой колонке переместить в начало соседней ячейки.

И еще вопросик по Регэкспом.
Я задал паттерн так:
objRegExp.Pattern = "предполагается"
И он не находится, хотя из текста документа и скопировал в паттерн.
Или не там ищется? или не так записано? Или еще что-то не так делаю?

Спасибо.

459
14 декабря 2007 года
gacol
273 / / 12.02.2003
вот мое видение решения
6.4K
14 декабря 2007 года
Host
122 / / 22.09.2005
Цитата: Dmitry2064
И еще вопросик по Регэкспом.



Вот полезные ссылки:

Pattern Property
http://rsdn.ru/article/alg/regular.xml

248
14 декабря 2007 года
Dmitry2064
590 / / 06.12.2006
Все прекрасно сработало (из ПримерчикаТаблицы.zip). Только одна просьба. Подскажите, как теперь удалить текст со скобками из первой ячейки, который мы переносим в соседнюю?
Я стал делать так:
 
Код:
Set ActiveDocument.Range = xs 'тут ругается.
            n2 = InStr(xs, ")")
            xs1 = Mid(xs, n1, n2 - n1 + 1)
    With Range.Find
        .Text = xs1
        .Replacement.Text = "": .Forward = True: .Wrap = wdFindContinue: .Format = False: .MatchCase = False
    End With


За ссылочки отдельное спасибо Host'y.


Короче говоря, осталось объявить ячейку, в которой нашлись скобки Ранджем и там уже можно заменить на пустоту (или даже удалить текст).

Вот можно ли подсказать, как надо записать "выставление Range'a" в данной ячейке?

Спасибо.

И еще вопросик:
для чего нужны две последние строки в коде процедуры
imax = ActiveDocument.Tables(1).Rows.Count
jmax = ActiveDocument.Tables(1).Columns.Count
?
459
15 декабря 2007 года
gacol
273 / / 12.02.2003
добавь запись в первую ячейку ее левую чатсть до (
tbl.Cell(i, 1) = Left(xs, n1 - 1)

а последние две строки я забыл убрать
248
15 декабря 2007 года
Dmitry2064
590 / / 06.12.2006
Цитата: gacol
добавь запись в первую ячейку ее левую чатсть до (
tbl.Cell(i, 1) = Left(xs, n1 - 1)

а последние две строки я забыл убрать



Есть. Все здорово. Спасибо.

Ой. Нашел, что при перемещении текста во вторую ячейку в ее конце появляется лишний символ абзаца (это нарушает ровность таблицы). И у меня по традиции не получается его самостоятельно убрать. Подскажите пожалуйста, как это сделать. Наверное опять по типу tbl.Cell(i, 1) = Left(xs, n1 - 1) ?

459
16 декабря 2007 года
gacol
273 / / 12.02.2003
попробуем записывать без последних 2-х символов
tbl.Cell(i, 2) = xs1 & " " & Left(tbl.Cell(i, 2), Len(tbl.Cell(i, 2)) - 2)
248
16 декабря 2007 года
Dmitry2064
590 / / 06.12.2006
Цитата: gacol
попробуем записывать без последних 2-х символов
tbl.Cell(i, 2) = xs1 & " " & Left(tbl.Cell(i, 2), Len(tbl.Cell(i, 2)) - 2)



Да, именно это и надо было (самому не хватает ума сообразить).

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог