Создаются новые стили вида conditionalstyle_X

Автор luu, 3 августа 2023, 16:16

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

luu

Появилась проблема при работе с документом Calc. При открытии диспетчера стилей (F11), появляются новые стили вида conditionalstyle_X (conditionalstyle_1 ... conditionalstyle_3528) огромное количество. Плюс еще какие-то стили ячейки с Excel в наименовании. Пытаюсь их удалить (вручную на каждом Del), но при сохранении документа они появляются снова. При этом работа ощутимо замедляется, процессор шуршит, вентилятор дует как не в себя
Что это такое? Откуда они берутся? Как с этим бороться?

sokol92

#1
Стили не появляются при открытии диспетчера стилей, диспетчер их просто отображает.
Выложите, пожалуйста, файл с таким эффектом и опишите историю его происхождения - Вы этот файл делали от нуля, Вы этот файл импортировали и т.п.

Добавлено.

Версия - этот файл был создан в Excel. Если это так, то почитайте статью Николая Павлова "Ад условного форматирования". Если болезнь происходит оттуда, то Calc это не вылечит. В этом случае приложите исходный файл в формате Excel (или его фрагмент).
Владимир.

luu

Разобрался. Проблема была в том, что пользователи копировали диапазоны данных из книг Excel. Их видно по шрифту Calibri.

Решение удалось найти здесь:
https://ask.libreoffice.org/t/font-in-calc-is-changing/3446

Вручную каждому листу присвоил Базовый стиль. В свойствах файла - Шрифт снял все галочки с раздела Внедрять письменности шрифтов (не знаю, связано ли это и может ли влиять, но на всякий случай) и вручную поудалял тысячи инородных стилей, неизвестно как подтянутых.

Как вообще обезопаситься от этого? Можно ли принудительно запретить копирование в Calc из Excel всего кроме данных (значений)?

sokol92

Удалить условное форматирование на листе не сложно.
Меню Формат / Условное... / Управлениe, выделяем все правила (CTRL+A) и Удалить. После этого обязательно нажимаем на OK.

Есть также много опубликованных макросов для удаления не используемых стилей ячеек.
Владимир.

luu

#4
В том-то и дело, что условного форматирования в книге не было, по крайней мере, до вставки ячеек из Excel.
А после такого копирования и стили притащились и в условном форматировании куча правил по одной ячейке.

Конечно, все удалил, и условное форматирование и тысячи стилей. Файл с 362 КБ похудел до 246 КБ. Но можно ли как-то от этого обезопаситься? Пользователи ведь так и будут бездумно копировать все это из своих книг Excel

Условно говоря, можно ли запретить форматирование ячеек, позволяя пользователю вставлять только значения при копировании данных?

sokol92

Чисто теоретически можно, но надежным и простым такое решение точно не будет.
Владимир.

sokol92

Примерная схема (для желающих попробовать).

1. Перехватываем событие листа для изменения ячеек.
2. Анализируем последнее действие в UndoManager. При этом надо учесть, что свойство CurrentUndoActionTitle локализовано. Если значение этого свойства "Копировать" (в локализиции ru_RU), то
  • запоминаем измененные значения ячеек в массив (dataArray)
  • выполняем undo
  • заносим из массива значения ячеек
  • удаляем упомянутые выше стили ячеек (если есть)

Цитировать«Не советую, гражданин... мнэ-э... не советую. Съедят»  :) 
Владимир.