Сохранение без форматирования

Автор RageGuy, 30 июля 2020, 16:45

0 Пользователи и 1 гость просматривают эту тему.

mikekaganski

#45
Цитата: McAaron от  2 августа 2020, 01:47
Цитата: economist от  1 августа 2020, 10:56
Цитата: McAaron от  1 августа 2020, 03:00Может нашли еще и способ, как поместить на портретную страницу изображение в ландшафтном формате вместе с подписью?

Так а зачем? Стилем повернули в ландшафт, вставили изображение и подписи в удобном виде, следующую страницу стилем развернули опять в портрет.
Нужно разместить рисунок в ландшафтном формате на портретной странице.
Если вы повернете страницу в ланшафт, получите повернутый номер на длинной стороне (на полях), а надо на короткой.  

Таблица 1 строка на 2 столбца, с фиксированным размером строки (в приложенном файле 212 мм, для того чтобы выше и ниже поместилось по параграфу - но это по желанию) и второго столбца (10 мм в примере). В A1 вставлено ландшафтно изображение с привязкой к абзацу, с выравниванием по вертикали по центру области текста страницы, а по горизонтали по центру абзаца. В B1 подпись; начиная с 7.0, ячейке можно задать направление вертикально снизу вверх (так в примере и сделано - так что просматривать тоже нужно в 7.0). Раньше с этим направлением было тяжело; видимо, вопрос именно из-за этого.

Раньше для этого делали специальный формат, в котором основная надпись была слева вертикально сверху вниз.

Upd: перезалил пример с рамкой для старых версий (работает на OOo 2.2.0).
С уважением,
Михаил Каганский

RageGuy

Цитата: RageGuy от 31 июля 2020, 22:40Проверьте, будет ли достаточно макроса, приведённого в ответе #20.
Да, здорово. Работает. Все поля превратились в текст. Спасибо!
Правда вываливается ошибка, и процесс останавливается. Приходится несколько раз запускать.
С  нумерацией не получается что-то. На чистом файле с "моим" стилем списка вроде работает. На готовом документе (51 стр.) – нет. Где локально преобразует строку, где курсор стоял. А где-то просто добавит рядом текстовый вариант нумерации. Вроде не должен файл кривым быть. Пока не разберусь, почему так происходит...
А в целом... я прям чувствую, что в шаге от решения моей проблемы. Спасибо за помощь!

Цитата: kompilainenn от 31 июля 2020, 23:47
И какая версия офиса у вас кстати?
6.4.4.2

mikekaganski

Цитата: RageGuy от  4 августа 2020, 17:04
Правда вываливается ошибка, и процесс останавливается. Приходится несколько раз запускать.

Там, конечно, нет никаких проверок.
Попробуйте так:


Sub FieldsToText
 fields = ThisComponent.getTextFields.CreateEnumeration
 Dim map()
 While fields.hasMoreElements
   field = fields.nextElement
   ReDim Preserve map(LBound(map) To UBound(map) + 1)
   map(UBound(map)) = Array(field, field.getPresentation(false))
 Wend
 For i = LBound(map) To UBound(map)
    anchor = map(i)(0).getAnchor
    If (anchor <> Nothing) Then anchor.setString(map(i)(1))
 Next i
End Sub


(пишу без проверки).
С уважением,
Михаил Каганский

RageGuy

Завтра обязательно попробую. Дома нету файлов для проверки.

RageGuy

Попробовал...
Та же ошибка, только указывает на строку проверки условия "If (anchor <> Nothing) Then anchor.setString(map(i)(1))". И она вываливается сразу, макрос не успевает ничего заменить.
Про первый вариант хочу уточнить. В первый раз не обратил на некоторые детали внимания.
В первый запуск макрос реально работает (файл не доступен порядка полуминуты). И до первой ошибки успевает отработать все перекрестные ссылки (ссылки на абзацы, заголовки, таблицы, рисунки и т.п). Остаются необработанными поля в названии рисунков, таблиц, ссылки на стандартные поля и т.п. Следующие пару запусков сразу же приводят к той же ошибке. После четвертого запуска Libre крашится. После восстановления отсутствует местами текст, простой текст (например, подписи рисунков). Местами (в таблице) появляются частичные дубляжи строк. При очередном запуске макрос без проблем меняет оставшиеся поля. Прогонял не менее десятка раз. Один и тот же результат.

mikekaganski

Если дадите пример документа, посмотрю, как это улучшить.
С уважением,
Михаил Каганский

RageGuy

#51
Хорошо. Я его подготовлю, а то у него статус для служебного пользования.
Надо попробовать дома, а то я не доверяю нашим админам. Часто криво работает ПО, плюс всякие программы слежения и т.п...
А вообще Libre нередко крашится. А как выяснить причину, не знаю. Админы наши – не помощники. :(

mikekaganski

Цитата: RageGuy от  5 августа 2020, 09:41А вообще Libre нередко крашится. А как выяснить причину, не знаю.

Да, согласен. И всякие программы слежения ни при чём. Надо каждый раз выяснять, что приводит к такому, и писать баги. Только так можно постепенно улучшать стабильность...
С уважением,
Михаил Каганский

RageGuy

#53
Когда устроился сюда, к себе на работу, писали текстовуху в Компасе. Вот это та еще жесть. Хотя там тоже есть и автонумерация (гораздо проще, чем в Word или Writer, есть многоуровневость и возможность начать с начала список, зато кондовая, не ломалась) и стили. Естественно этим не пользовался никто. Таблицы здесь очень скудные и глюкавые. Невозможно растянуть на несколько листов. Только отдельные таблички на каждую страницу. Для первичного написания пойдет. А в редактировании очень муторно. Мне установили MS Office. Перешел на него. Уперся в проблему (которые MS не хочет решать) с перекрестными ссылками, с разделами не смог решить проблему – когда текст должен автоматом переходить на следующий раздел с иным оформлением (колонтитулами), а не расширять предыдущий. В Writer оказалось, что все это работает по-другому и "правильно".
Кстати, и Word не вытерпел моих издевательств и стал периодически крашится. Возможно что-то я некорректно делал. И как всегда это происходило в последнюю ночь перед отправкой заказчику, когда я даже в PDF не могу сохранить, – крашился раньше.

RageGuy

#54
Подготовил документ.
Посмотрите, пожалуйста, и мою нумерацию. Может какая-то кривая. Почему не проходит макрос?

mikekaganski

Макрос плюс документ вскрыли баг.

Но вот этот код работает у меня:

Sub FieldsToText
  fields = ThisComponent.getTextFields.CreateEnumeration
  Dim map()
  While fields.hasMoreElements
    field = fields.nextElement
    ReDim Preserve map(LBound(map) To UBound(map) + 1)
    map(UBound(map)) = Array(field.getAnchor, field.getPresentation(false))
  Wend
  For i = LBound(map) To UBound(map)
    a = map(i)(0)
    If Not (a Is Nothing) Then
      a.setString(map(i)(1))
    End If
  Next i
End Sub
С уважением,
Михаил Каганский

RageGuy


mikekaganski

Цитата: RageGuy от  5 августа 2020, 14:31
Ошибка выскакивает. Libre обновить?

Выскакивает на том же документе? странно...
С уважением,
Михаил Каганский

RageGuy

Тоже стало подозрительно, так как и первый макрос стал давать подобную ошибку. Перезагрузил систему. Макрос отработал без сбоев. Класс!
Побочный эффект - уменьшилось количество страниц. Что-то где-то ужалось вероятно.

RageGuy

Не совсем все гладко получилось:
- некоторые подписи изображений (вместе с полем) удалены;
- нумерация страниц зависла - одна и та же цифра по всему документу.
Смотрю дальше...