Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Изменение форматирования при замене непечатаемых знаков - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Изменение форматирования при замене непечатаемых знаков
Гость Дата: Вторник, 21.06.2011, 20:39 | Сообщение № 1
Группа: Гости
Доброго всем времени суток.
Сам поиск и замена вопросов не вызывают.
Есть один ньюанс. Например, имеется ячейка с текстом, слова имеют различное форматирование (шрифт, подчеркивания и т.д.). Если найти пробел (или неразрывный пробел), а потом заменить его опять же на пробел, то вся строка будет отформатирована в формат первого слова
То есть, имеется ячейка с текстом "Пример текста" если заменить пробел на пробел то получим "Пример текста" , что очень не желательно..
Как с этим бороться? Такая фигня что при ручном поиске, что через макрос.
Хочу использовать макрос для замены неразрывных пробелов на обычные, а тут такое....
Раньше заменял неразрывные пробелы через редактор сценариев. но теперь надо все автоматизировть.
сразу попутный вопрос, можно ли через VBA получить доступ к редактору сценариев? Заменять копированием в ворд и обратно не желательно.
Простенький пример по ссылке http://narod.ru/disk/16722184001/Vopr.xls.html (для простоты заменял обычные пробелы на них же - суть та же)
 
Ответить
СообщениеДоброго всем времени суток.
Сам поиск и замена вопросов не вызывают.
Есть один ньюанс. Например, имеется ячейка с текстом, слова имеют различное форматирование (шрифт, подчеркивания и т.д.). Если найти пробел (или неразрывный пробел), а потом заменить его опять же на пробел, то вся строка будет отформатирована в формат первого слова
То есть, имеется ячейка с текстом "Пример текста" если заменить пробел на пробел то получим "Пример текста" , что очень не желательно..
Как с этим бороться? Такая фигня что при ручном поиске, что через макрос.
Хочу использовать макрос для замены неразрывных пробелов на обычные, а тут такое....
Раньше заменял неразрывные пробелы через редактор сценариев. но теперь надо все автоматизировть.
сразу попутный вопрос, можно ли через VBA получить доступ к редактору сценариев? Заменять копированием в ворд и обратно не желательно.
Простенький пример по ссылке http://narod.ru/disk/16722184001/Vopr.xls.html (для простоты заменял обычные пробелы на них же - суть та же)

Автор - Гость
Дата добавления - 21.06.2011 в 20:39
KuklP Дата: Среда, 22.06.2011, 14:34 | Сообщение № 2
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
А почему не выложить файл здесь?
Выделяем диапазон и топчем кнопку.
пробелы меняются в строке:
[vba]
Код
If Mid(c, i, 1) = Chr(160) Then Mid(S, i, 1) = Chr(32)
[/vba]
К сообщению приложен файл: Vopr.xls (51.0 Kb)


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеА почему не выложить файл здесь?
Выделяем диапазон и топчем кнопку.
пробелы меняются в строке:
[vba]
Код
If Mid(c, i, 1) = Chr(160) Then Mid(S, i, 1) = Chr(32)
[/vba]

Автор - KuklP
Дата добавления - 22.06.2011 в 14:34
Alex_ST Дата: Среда, 22.06.2011, 17:25 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Здорово придумал, Серёга.
Только надо будет попробовать не отдельно параметры полужирный и курсив для каждого символа запоминать, а целиком объекты Font в коллекцию или словарь запихивать. Вдруг получится?
Тогда можно будет вообще все параметры восстанавливать.
Завтра поковыряюсь.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеЗдорово придумал, Серёга.
Только надо будет попробовать не отдельно параметры полужирный и курсив для каждого символа запоминать, а целиком объекты Font в коллекцию или словарь запихивать. Вдруг получится?
Тогда можно будет вообще все параметры восстанавливать.
Завтра поковыряюсь.

Автор - Alex_ST
Дата добавления - 22.06.2011 в 17:25
Гость Дата: Среда, 22.06.2011, 17:53 | Сообщение № 4
Группа: Гости
Гость,
Уважаемый KuklP, спасибо за ответ. Но это решение частного случая, т.е. если первое слово имеет шрифт Arial, 10 кегль, курсивный, полужирный..... вариантов форматирования может быть тысячи - все зависит от фантазии ушлых пользователей, что учесть будет тяжеловато. А хотелось бы универсальную "отмычку" или иной способ замены или, как вариант, доступ к редактору сценариев и поиск и замена в xml формате - гарантированно без косяков.
p.s. файл не выложил, потому что "Незарегестрированные пользователи не могут прикладывать файлы к сообщению" из п. 3 Правил данного форума smile .
 
Ответить
СообщениеГость,
Уважаемый KuklP, спасибо за ответ. Но это решение частного случая, т.е. если первое слово имеет шрифт Arial, 10 кегль, курсивный, полужирный..... вариантов форматирования может быть тысячи - все зависит от фантазии ушлых пользователей, что учесть будет тяжеловато. А хотелось бы универсальную "отмычку" или иной способ замены или, как вариант, доступ к редактору сценариев и поиск и замена в xml формате - гарантированно без косяков.
p.s. файл не выложил, потому что "Незарегестрированные пользователи не могут прикладывать файлы к сообщению" из п. 3 Правил данного форума smile .

Автор - Гость
Дата добавления - 22.06.2011 в 17:53
Alex_ST Дата: Среда, 22.06.2011, 21:39 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Вот я про то и говорил: чтобы восстановить ВСЕ свойства шрифта каждого символа нужно для каждого из символов запоминать в коллекции или словаре целиком объект Font этого символа.
По идее каждый Item в Dictionary или Collection вполне может быть и объектом. Поэтому сохранить набор объектов Font для каждого символа стринга скорее всего удастся без проблем.
Пока, правда, не знаю, удастся ли восстановить обратно...
Завтра попробую.
Хотя... Всё-таки возникают сомнения по поводу запоминания объекта Font целиком. Ведь объект задаётся через Set, т.е. сохраняется не сам объект, а ссылка на него. Но тогда можно будет по принципу Сергея запоминать, но не 2 параметра, а параметры объекта Font : Background, Bold, Color, ColorIndex, Creator, FontStyle, Italic, Name, OutlineFont, Parent, Shadow, Size, Strikethrough, Subscript, Superscript, Underline
Да и то, наверное, достаточно будет не все параметры, а только основные.
В общем, завтра я этот вопрос покручу со всех сторон.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеВот я про то и говорил: чтобы восстановить ВСЕ свойства шрифта каждого символа нужно для каждого из символов запоминать в коллекции или словаре целиком объект Font этого символа.
По идее каждый Item в Dictionary или Collection вполне может быть и объектом. Поэтому сохранить набор объектов Font для каждого символа стринга скорее всего удастся без проблем.
Пока, правда, не знаю, удастся ли восстановить обратно...
Завтра попробую.
Хотя... Всё-таки возникают сомнения по поводу запоминания объекта Font целиком. Ведь объект задаётся через Set, т.е. сохраняется не сам объект, а ссылка на него. Но тогда можно будет по принципу Сергея запоминать, но не 2 параметра, а параметры объекта Font : Background, Bold, Color, ColorIndex, Creator, FontStyle, Italic, Name, OutlineFont, Parent, Shadow, Size, Strikethrough, Subscript, Superscript, Underline
Да и то, наверное, достаточно будет не все параметры, а только основные.
В общем, завтра я этот вопрос покручу со всех сторон.

Автор - Alex_ST
Дата добавления - 22.06.2011 в 21:39
KuklP Дата: Четверг, 23.06.2011, 06:10 | Сообщение № 6
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
В общем без разницы, сколько параметров фонта проверять. Я выложил решение исходя из примера. Можете принимать его как одно из направлений, в котором рыть. А можете и не принимать biggrin
Ну смотрите еще вариант с изменением в HTML. @ добавлено для наглядности.
К сообщению приложен файл: 7178217.xls (53.0 Kb)


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728


Сообщение отредактировал KuklP - Четверг, 23.06.2011, 06:55
 
Ответить
СообщениеВ общем без разницы, сколько параметров фонта проверять. Я выложил решение исходя из примера. Можете принимать его как одно из направлений, в котором рыть. А можете и не принимать biggrin
Ну смотрите еще вариант с изменением в HTML. @ добавлено для наглядности.

Автор - KuklP
Дата добавления - 23.06.2011 в 06:10
Alex_ST Дата: Четверг, 23.06.2011, 08:35 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Серёга, ты КРУТ!
Только зачем весь лист сделал, а не Selection? Или в HTML это трудно? (я просто в нём ни бум-бум )



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеСерёга, ты КРУТ!
Только зачем весь лист сделал, а не Selection? Или в HTML это трудно? (я просто в нём ни бум-бум )

Автор - Alex_ST
Дата добавления - 23.06.2011 в 08:35
Alex_ST Дата: Четверг, 23.06.2011, 08:45 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Да... Ещё раз
Посмотрел в справке и понял, что в HTML-проекте, кажется, нет ячеек и диапазонов, а значит нет и Selection.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеДа... Ещё раз
Посмотрел в справке и понял, что в HTML-проекте, кажется, нет ячеек и диапазонов, а значит нет и Selection.

Автор - Alex_ST
Дата добавления - 23.06.2011 в 08:45
KuklP Дата: Четверг, 23.06.2011, 08:59 | Сообщение № 9
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Леш, я понятия не имею, с HTML никогда не работал biggrin Это так, баловство.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеЛеш, я понятия не имею, с HTML никогда не работал biggrin Это так, баловство.

Автор - KuklP
Дата добавления - 23.06.2011 в 08:59
Alex_ST Дата: Четверг, 23.06.2011, 09:18 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Сейчас покручу твой первый макрос.
Не могу понять, какие из параметров объекта Font нужно запоминать и восстанавливать:
Background - это что? Цвет подложки под символом что ли (типа фломастера в Ворде)? А разве это возможно в ячейке?
Bold - это НУЖНО
Color - а это цвет чего?
ColorIndex - цвет шрифта?
Creator - пока не разбирался, но скорее всего не нужно
FontStyle - пока не разбирался, но скорее всего не нужно
Italic - это НУЖНО
Name - это НУЖНО
OutlineFont - это НУЖНО
Parent - это что?
Shadow - это что? А разве это возможно в ячейке?
Size - это НУЖНО
Strikethrough - это НУЖНО
Subscript - это НУЖНО
Superscript - это НУЖНО
Underline - это НУЖНО



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеСейчас покручу твой первый макрос.
Не могу понять, какие из параметров объекта Font нужно запоминать и восстанавливать:
Background - это что? Цвет подложки под символом что ли (типа фломастера в Ворде)? А разве это возможно в ячейке?
Bold - это НУЖНО
Color - а это цвет чего?
ColorIndex - цвет шрифта?
Creator - пока не разбирался, но скорее всего не нужно
FontStyle - пока не разбирался, но скорее всего не нужно
Italic - это НУЖНО
Name - это НУЖНО
OutlineFont - это НУЖНО
Parent - это что?
Shadow - это что? А разве это возможно в ячейке?
Size - это НУЖНО
Strikethrough - это НУЖНО
Subscript - это НУЖНО
Superscript - это НУЖНО
Underline - это НУЖНО

Автор - Alex_ST
Дата добавления - 23.06.2011 в 09:18
KuklP Дата: Четверг, 23.06.2011, 09:24 | Сообщение № 11
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
А все, что ты поотмечал словом "Нужно". Color, это то же что и colorindex, только в другой ипостаси biggrin


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728


Сообщение отредактировал KuklP - Четверг, 23.06.2011, 09:25
 
Ответить
СообщениеА все, что ты поотмечал словом "Нужно". Color, это то же что и colorindex, только в другой ипостаси biggrin

Автор - KuklP
Дата добавления - 23.06.2011 в 09:24
Alex_ST Дата: Четверг, 23.06.2011, 09:33 | Сообщение № 12
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Ну, по поводу Color и ColorIndex это понятно, но ColorIndex'ов всего 56, а Color'ов, кажется, много больше? Значит, неверное, лучше запоминать Color
А вот по поводу Shadow, так этого, вроде, нет.
А что такое FontStyle ?



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеНу, по поводу Color и ColorIndex это понятно, но ColorIndex'ов всего 56, а Color'ов, кажется, много больше? Значит, неверное, лучше запоминать Color
А вот по поводу Shadow, так этого, вроде, нет.
А что такое FontStyle ?

Автор - Alex_ST
Дата добавления - 23.06.2011 в 09:33
KuklP Дата: Четверг, 23.06.2011, 09:41 | Сообщение № 13
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
FontStyle это курсив, обычный и т.д. Раз мы запоминаем в массив значения поотдельности, то он не нужен. Shadow - это тень от символа, если глаза позволяют разглядеть ее - используй.
Quote (Alex_ST)
но ColorIndex'ов всего 56
а Экс больше и не отразит в ячейке. Попробуй поиграться с RGB - выведет только все те же 56.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728


Сообщение отредактировал KuklP - Четверг, 23.06.2011, 09:44
 
Ответить
СообщениеFontStyle это курсив, обычный и т.д. Раз мы запоминаем в массив значения поотдельности, то он не нужен. Shadow - это тень от символа, если глаза позволяют разглядеть ее - используй.
Quote (Alex_ST)
но ColorIndex'ов всего 56
а Экс больше и не отразит в ячейке. Попробуй поиграться с RGB - выведет только все те же 56.

Автор - KuklP
Дата добавления - 23.06.2011 в 09:41
Alex_ST Дата: Четверг, 23.06.2011, 16:09 | Сообщение № 14
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Ну, вот, хоть и коряво получилось (мне не нравится тупо по одному запоминать и восстанавливать свойства символов, но использовать словари и цикл не удалось sad ), но я-таки доделал обещанный вчера примерчик.
Тестируйте.
К сообщению приложен файл: Save_Format_Cha.xls (36.0 Kb)



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеНу, вот, хоть и коряво получилось (мне не нравится тупо по одному запоминать и восстанавливать свойства символов, но использовать словари и цикл не удалось sad ), но я-таки доделал обещанный вчера примерчик.
Тестируйте.

Автор - Alex_ST
Дата добавления - 23.06.2011 в 16:09
RAN Дата: Четверг, 23.06.2011, 16:22 | Сообщение № 15
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Alex_ST, а ложечку дегтя?

В этом месте
[vba]
Code
Sub Replace_Chr160_in_Sheet()
Application.ScreenUpdating = False
With ActiveWorkbook.HTMLProject
[/vba]

К сообщению приложен файл: 1984126.jpg (16.5 Kb)


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеAlex_ST, а ложечку дегтя?

В этом месте
[vba]
Code
Sub Replace_Chr160_in_Sheet()
Application.ScreenUpdating = False
With ActiveWorkbook.HTMLProject
[/vba]


Автор - RAN
Дата добавления - 23.06.2011 в 16:22
Alex_ST Дата: Четверг, 23.06.2011, 16:40 | Сообщение № 16
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
А мой старенький, но надёжный 2003-й поддерживает!
Так что ложечка эта не мне.

Да и использование HTML - это не моё решение, а Сергея - KuklP. Я же писАл уже выше, что я в этом ни бум-бум.
Да и использовать этот способ я не собираюсь - весь лист это как-то уж слишком!

Вот другой вопрос мне парит мозг: как научиться аналогично применять Application.Trim так, чтобы форматы текста внутри ячеек не сползали?



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеА мой старенький, но надёжный 2003-й поддерживает!
Так что ложечка эта не мне.

Да и использование HTML - это не моё решение, а Сергея - KuklP. Я же писАл уже выше, что я в этом ни бум-бум.
Да и использовать этот способ я не собираюсь - весь лист это как-то уж слишком!

Вот другой вопрос мне парит мозг: как научиться аналогично применять Application.Trim так, чтобы форматы текста внутри ячеек не сползали?

Автор - Alex_ST
Дата добавления - 23.06.2011 в 16:40
KuklP Дата: Четверг, 23.06.2011, 16:48 | Сообщение № 17
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Леш, так короче:
[vba]
Код
Sub Replace_Chr160_in_Sheet()
      With ActiveWorkbook.HTMLProject.HTMLProjectItems("Test")
          .Text = Replace(.Text, " ", Chr(32))
      End With
      ActiveWorkbook.HTMLProject.RefreshDocument
End Sub
[/vba]
Ну выше 2003 не тестировал, вообще на коленке писал:)


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728


Сообщение отредактировал KuklP - Четверг, 23.06.2011, 16:49
 
Ответить
СообщениеЛеш, так короче:
[vba]
Код
Sub Replace_Chr160_in_Sheet()
      With ActiveWorkbook.HTMLProject.HTMLProjectItems("Test")
          .Text = Replace(.Text, " ", Chr(32))
      End With
      ActiveWorkbook.HTMLProject.RefreshDocument
End Sub
[/vba]
Ну выше 2003 не тестировал, вообще на коленке писал:)

Автор - KuklP
Дата добавления - 23.06.2011 в 16:48
KuklP Дата: Четверг, 23.06.2011, 16:51 | Сообщение № 18
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Quote (Alex_ST)
Ну, вот, хоть и коряво получилось
И совсем не коряво. Хорошо получилось.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
Сообщение
Quote (Alex_ST)
Ну, вот, хоть и коряво получилось
И совсем не коряво. Хорошо получилось.

Автор - KuklP
Дата добавления - 23.06.2011 в 16:51
Alex_ST Дата: Четверг, 23.06.2011, 17:17 | Сообщение № 19
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Ну, не нравятся мне строки с перечислением параметров... Не красиво. Да и ошибиться в порядке перечисления легко (что, к стати у меня и было сначала: долго не мог найти, почему так шрифт хитро корячит после обработки). А циклом не получается. Да и фиг с ним. Ведь требования заказчика, кажется, полностью удовлетворены.

А вот с Application.Trim надо будет голову поломать. Ведь там количество символов меняется и так просто уже формат не восстановишь.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеНу, не нравятся мне строки с перечислением параметров... Не красиво. Да и ошибиться в порядке перечисления легко (что, к стати у меня и было сначала: долго не мог найти, почему так шрифт хитро корячит после обработки). А циклом не получается. Да и фиг с ним. Ведь требования заказчика, кажется, полностью удовлетворены.

А вот с Application.Trim надо будет голову поломать. Ведь там количество символов меняется и так просто уже формат не восстановишь.

Автор - Alex_ST
Дата добавления - 23.06.2011 в 17:17
Гость Дата: Четверг, 23.06.2011, 17:50 | Сообщение № 20
Группа: Гости
Спасибо всем большое! Вариантов решения - на любой вкус))
Особый респект KuklP за вариант с HTML, попробую дальше эту тему развить для других задач...
 
Ответить
СообщениеСпасибо всем большое! Вариантов решения - на любой вкус))
Особый респект KuklP за вариант с HTML, попробую дальше эту тему развить для других задач...

Автор - Гость
Дата добавления - 23.06.2011 в 17:50
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!