Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Сообщений [ 10 ]
- Зарегистрирован: 30.08.2010
- Сообщений: 5
Тема: Замена отступа в таблице на знак пробела.
Может кто подскажет, буду благодарен
Суть проблемы: Есть таблица (после файн ридера), в первой колонке во всех ячейках текст с разными отступами примерно от 0,5 до 4,5 см. Нужно заменить отступы (в каждой ячейке он свой) на соответствующее количество знаков пробела. Наверняка можно автоматизировать, но вот как? 
- andrkar
- Модератор
- Неактивен
- Откуда: Томск
- Зарегистрирован: 10.03.2010
- Сообщений: 431
- Поблагодарили: 26
Re: Замена отступа в таблице на знак пробела.
а обязательно ли нужны пробелы? Может быть просто текст в таблице выровнять по центру??? Выравнивание пробелами в документировании считается не очень хорошей идеей, если не сказать грубее.. 
- Зарегистрирован: 30.08.2010
- Сообщений: 5
Re: Замена отступа в таблице на знак пробела.
Да я знаю что выравнивание пробелами признак .....
.
Но заказчик сказал что его система не воспринимает отступы, поэтому нужно ставить пробелы соответственно отступам, тогда получится похоже на оригинал. Вот так. Теперь сижу ломаю голову как заманить отступы соответственным количеством пробелов. Ну а в ручную менять это просто повесится проще. 

- admin
- Администратор
- Неактивен
- Откуда: Земля
- Зарегистрирован: 15.12.2009
- Сообщений: 508
- Поблагодарили: 39
Re: Замена отступа в таблице на знак пробела.
Мне кажется, что алгоритм тут простой: выделить первую колонку (столбец), убрать отступы одним разом, и добавить пробелы в каждую ячейку данного столбца перед текстом. Безусловно, делается макросом. Кстати, с макросом и выделять ничего не нужно.
Ответ, ясное дело, неполон, ибо не привожу кода макроса. Может, мои коллеги подскажут?
- Зарегистрирован: 30.08.2010
- Сообщений: 5
Re: Замена отступа в таблице на знак пробела.
Убрать отступы одним разом оно конечно можно но проблема в том что в каждой ячейке отступ свой, и нужно менять соответствующий отступ на соответствующее количество пробелов.
Так вот не могу сообразить как указать макросу что отступ 1,35 меняется предположим на 8 пробелов, а в следующей ячейке отступ 0,76 меняется предположим на 3 пробела. И делается это в каждой таблице.

- viter.alex
- Модератор
- Неактивен
- Откуда: Харьков, Украина
- Зарегистрирован: 21.12.2009
- Сообщений: 884
- Поблагодарили: 140
Re: Замена отступа в таблице на знак пробела.
Если заказчик сказал и его не удаётся переубедить, то нужно делать. Для того, чтобы знать, сколько пробелов нужно ставить, нужно знать ширину одного пробела для данного кегля. Следовательно, если шрифт во всём столбце одинаковый, то нужно найти там пробел, измерить его ширину, разделить величину отступа на ширину пробела, убрать отступ, а перед текстом вставить полученное при делении число пробелов. Желательно при этом, чтобы выравнивание было по краям или по центру, а не по ширине.
В качестве затравки предложу такую процедуру:
Sub test()
Dim oCell As Cell 'Ячейка
Dim oRng As Range 'Диапазон ячейки
Dim n As Long 'Положение пробела в ячейке
Dim SpaceWidth As Single 'Ширина пробела
Dim SpaceCount As Integer 'необходимое количество пробелов
Set oCell = Selection.Cells(1)
Set oRng = oCell.Range
n = oRng.MoveStartUntil(" ", wdForward)
If n <> 0 Then 'Если пробел в строке есть
With oRng.Characters.First
SpaceWidth = .Next.Information(wdHorizontalPositionRelativeToTextBoundary) - _
.Information(wdHorizontalPositionRelativeToTextBoundary)
End With
With oCell.Range
'Вычисляем необходимое количество пробелов
SpaceCount = CLng(.ParagraphFormat.FirstLineIndent / SpaceWidth)
'Убираем отступ
.ParagraphFormat.FirstLineIndent = 0
'Вставляем пробелы вместо отступа
.InsertBefore Space(SpaceCount)
End With
End If
End Sub
Лучше день потерять — потом за пять минут долететь!
- Зарегистрирован: 30.08.2010
- Сообщений: 5
Re: Замена отступа в таблице на знак пробела.
- andrkar
- Модератор
- Неактивен
- Откуда: Томск
- Зарегистрирован: 10.03.2010
- Сообщений: 431
- Поблагодарили: 26
Re: Замена отступа в таблице на знак пробела.
По алгоритму - 1.1 Запомнить значение отступа текущей ячейки (так как вы сами говорили, что в каждой ячейке могут быть разные отступы)..

- viter.alex
- Модератор
- Неактивен
- Откуда: Харьков, Украина
- Зарегистрирован: 21.12.2009
- Сообщений: 884
- Поблагодарили: 140
Re: Замена отступа в таблице на знак пробела.
avando пишет:не совсем правильно вычисляя их количество
На чём основано это заключение? Точно заменить не получится, т.к. количество пробелов это целое число.
avando пишет:а дальше перебора всех ячеек столбца не происходит.
Конечно, не происходит, ведь я привёл только пример. Но эту процедуру можно переделать так, чтобы в неё передавать ячейку, отступы в которой нужно менять. Как-то так (код с коленки)
Dim oCell As Cell
For Each oCell In ActiveDocument.Tables(1).Range.Cells
If oCell.ColumnIndex = 1 Then
Call ReplaceIndentToSpace(oCell)
End If
Next
А саму процедуру записать так:
Sub ReplaceIndentToSpace(ByRef oCell As Cell)
Dim oRng As Range 'Диапазон ячейки
Dim n As Long 'Положение пробела в ячейке
Dim SpaceWidth As Single 'Ширина пробела
Dim SpaceCount As Integer 'необходимое количество пробелов
Set oRng = oCell.Range
n = oRng.MoveStartUntil(" ", wdForward)
If n <> 0 Then 'Если пробел в строке есть
With oRng.Characters.First
SpaceWidth = .Next.Information(wdHorizontalPositionRelativeToTextBoundary) - _
.Information(wdHorizontalPositionRelativeToTextBoundary)
End With
With oCell.Range
'Вычисляем необходимое количество пробелов
SpaceCount = CLng(.ParagraphFormat.FirstLineIndent / SpaceWidth)
'Убираем отступ
.ParagraphFormat.FirstLineIndent = 0
'Вставляем пробелы вместо отступа
.InsertBefore Space(SpaceCount)
End With
End If
End Sub
Лучше день потерять — потом за пять минут долететь!
- Зарегистрирован: 30.08.2010
- Сообщений: 5
Re: Замена отступа в таблице на знак пробела.
To: viter.alex
Благодарю за помощь.
Слегка подправил Ваш код, а именно в этих местах:
'Вычисляем необходимое количество пробелов
SpaceCount = CLng(.ParagraphFormat.LeftIndent / 3.38)
'Убираем отступ
.ParagraphFormat.LeftIndent = CentimetersToPoints(0)
Все заработало отлично.
Еще раз большое спасибо.
Сообщений [ 10 ]
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Замена отступа в таблице на знак пробела.
В своей деятельности вы наверняка пользуетесь таким мощным текстовым редактором, каким является Microsoft Word. Наш сайт о Microsoft Office Word даст ответ про: колонтитулы и изображения не отображаются в word 2007.
И, конечно, если работа с текстами в Ворде составляет значительную долю вашего труда, вам приходила в голову мысль о том, как оптимизировать ее. На портале о Microsoft Office Word вы узнаете про: как убрать номер страницы с титульного листа в ворде.
Этот вопрос является приоритетным на форуме Ворд Экспер, посвященном работе с различными версиями программы. На портале о Microsoft Office Word вы узнаете про: что делать если не устанавливается word.
Форум, прежде всего, ориентирован на написание разнообразных макросов и шаблонов для Ворда. Тут есть готовые решения той или иной задачи, разбираются различные пути. Наш сайт о Microsoft Office Word даст ответ про: перевести word 2007 в word 2003.
Вы найдете все о макросах – от самых азов для новичков, до тонкостей, которыми делятся друг с другом опытные пользователи. Наш сайт о Microsoft Office Word даст ответ про: скачать ключ office 2007.
В одном из подразделов форума вы можете оставить описание своей проблемы и сделать заказ на разработку макроса или шаблона. На портале о Microsoft Office Word вы узнаете про: на какой уровень можно перевернуть текст в ячейках.
Конечно, автоматизация, не единственная тема форума. Здесь обсуждаются настройки различных версий Ворда и любые другие вопросы, связанные с самой программой, редактированием, написанием, рецензированием текстов в Ворде. На портале о Microsoft Office Word вы узнаете про: конспект нумерация и ориентация страниц.
Самым часто возникающим проблемам посвящен отдельный раздел, который стоит посетить в первую очередь. На портале о Microsoft Office Word вы узнаете про: word таблицы 2007 съезжают в 2003.
Если у вас есть чем поделиться с другими пользователями Ворда, вы можете выкладывать свои решения в соответствующих подразделах. Наш сайт о Microsoft Office Word даст ответ про: 2007 word интервалы.