воскресенье, 4 сентября 2016 г.

Портим документы, используя LibreOffice. Часть 2

Итак, опять непонятно что случилось. Есть рабочий файл-электронная таблица на более, чем 2000 строк с данными. Данные - это куча цифр (объемы и деньги). Файл в формате Excel 2007, то бишь .xlsx. Нужно было его доредактировать срочно, пришлось делать это дома. Дома есть только LibreOffice, в данном случае это была версия 5.1.5. После открытия, некоторых правок (форматирование некоторых ячеек с текстом и удаление лишних строк), сохранения документа в формат, какой был, то есть в .xlsx, и повторного открытия его в том же LibreOffice обнаружилось, что формат ячеек, содержащих числа, стал невменяемый абсолютно. Выражалось визуально это тем, что все числа отображались, как поделенные на тысячу. Данные все сохранены, однако визуально это выглядит, как будто всё стало дешевле и меньше в объемах в 1000 раз! А на печать-то пойдет ЭТОТ результат. Вот как выглядит это (обратите внимание на отображаемое значение в ячейке и реальное значение в строке ввода формул выше):
А вот, как выглядит код формата числа в диалоге "Формат ячейки":
Нормально? Что это за пакость? Никогда такого не встречал =( А документ более чем важный и труда в него было вложено за сегодня на несколько часов. Всё переделывать. Хорошо, что вообще заметил...
Будьте внимательны!

6 комментариев:

  1. Calc не сохраняет настройку языка формата чисел, если сохранять и переоткрывать в xlsx.
    См. https://bugs.documentfoundation.org/show_bug.cgi?id=103173

    ОтветитьУдалить
    Ответы
    1. регрессия что ли? я такого что-то не припомню поведения?

      Удалить
    2. Нет, не регрессия. Проверил с LO 3.3.4 - то же самое.
      Я не нахожу сходу информации, может ли вообще XLS(X) сохранять данные о языке формата ячейки. На первый взгляд как будто нет. (Кстати, с XLS та же проблема.)

      Удалить
  2. А причина, по которой произошло уменьшение чисел в 1000 раз, следующая.
    Строка формата (которая была предназначена для другого языка) после потери информации о языке стала анализироваться применительно к русскому. При этом фактически (после отбрасывания мусора) использовалась строка формата "0,00 ". Обратите внимание на пробел в конце. Этот пробел - разделитель тысяч. Когда он стоит после десятичного разделителя (в русском - запятая), он делит результат на 1000. Ну, как если сказать: выведи результат в тысячах.

    ОтветитьУдалить
    Ответы
    1. но это ведь не нормальное поведение, правда? мне все равно по каким причинам испортились данные (ну внешний вид данных, ок). Хорошо, что я обратил внимание, а если это была бы одна строка на пару тысяч, однако влияющая на результат?

      Удалить
  3. Согласен.
    Насчёт проблемы с языкозависимыми символами в строке формата я писал ещё в 2013: https://bugs.documentfoundation.org/show_bug.cgi?id=67822
    Я не старался "оправдать" поведение программы, просто объяснял механизм - для информации

    ОтветитьУдалить