Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Электронные таблицы SocialCalc

Глава 19 из книги "Архитектура приложений с открытым исходным кодом", том 1.

Оригинал: SocialCalc, глава из книги "The Architecture of Open Source Applications" том 1.
Автор: Audrey Tang, перевод: Н.Ромоданов

19.5. Формат сохранения save

Формат сохранения save является стандартным форматом MIME multipart/mixed, состоящим из четырех частей ext/plain; charset=UTF-8; в каждой части находится текст, разделяемый символами новой строки, с полями, которые отделяются друг от друга с помощью двоеточий. Это следующие части:

  • Часть meta, в которой перечислены типы других частей.
  • Часть sheet, в котором перечислены формат и содержимое каждой ячейки, ширина каждого столбца (если не используется значение, определяемое по умолчанию), за которым следует список шрифтов, вариантов цвета и границ, используемых в листе.
  • Необязательная часть edit, сохраняющая состояние редактора TableEditor, в том числе последнее положение элемента Ecell, а также зафиксированные размеры панелей строк/столбцов.
  • Необязательная часть audit, в которой хранится история команд, выполненных в предыдущем сеансе редактирования.

Например, на рис.19.11 показана таблица с тремя ячейками со значением 1874 в ячейке A1, представляющей собой элемент ECell, формулой 2^2*43 в ячейке A2, и формулой SUM(Foo) в ячейке A3, выделенные жирным шрифтом, и ссылкой на диапазон A1:A2 с именем Foo.

Рис.19.11: Таблица с тремя ячейками

Сериализованный формат save таблицы выглядит следующим образом:

    socialcalc:version:1.0
    MIME-Version: 1.0
    Content-Type: multipart/mixed; boundary=SocialCalcSpreadsheetControlSave
    --SocialCalcSpreadsheetControlSave
    Content-type: text/plain; charset=UTF-8

    # SocialCalc Spreadsheet Control Save
    version:1.0
    part:sheet
    part:edit
    part:audit
    --SocialCalcSpreadsheetControlSave
    Content-type: text/plain; charset=UTF-8

    version:1.5
    cell:A1:v:1874
    cell:A2:vtf:n:172:2^2*43
    cell:A3:vtf:n:2046:SUM(Foo):f:1
    sheet:c:1:r:3
    font:1:normal bold * *
    name:FOO::A1\cA2
    --SocialCalcSpreadsheetControlSave
    Content-type: text/plain; charset=UTF-8

    version:1.0
    rowpane:0:1:14
    colpane:0:1:16
    ecell:A1
    --SocialCalcSpreadsheetControlSave
    Content-type: text/plain; charset=UTF-8

    set A1 value n 1874
    set A2 formula 2^2*43
    name define Foo A1:A2
    set A3 formula SUM(Foo)
    --SocialCalcSpreadsheetControlSave--

Этот формат создавался таким образом, чтобы он был понятен человеку и чтобы его можно было относительно легко генерировать программно. Это дает возможность с помощью плагина Sheetnode из фреймворка Drupal, использующего язык PHP, выполнять преобразования между этим форматом и другими популярными форматами электронных таблиц, например, Excel (.xls) и OpenDocument (.ods).

Теперь, когда мы понимаем, как отдельные части в SocialCalc, сочетаются друг с другом, давайте рассмотрим два реальных примера расширений SocialCalc.


Далее: Расширенные возможности редактирования