Yoksel: 20080109ОФункционалеТабличныйДокументЗагрузитьИзТаблицы ...
SourceForge.net Logo

Home Page | Изменения / НовыеКомментарии / Справка / Помочь проекту | Вход:  Пароль:  

Блог 2008–01–09 Несколько слов о функционале метода ТабличныйДокумент.ЗагрузитьИзТаблицы


Практически, еще когда только начинал создаваться Йоксель, было ясно, что возможность загрузить данные из существующей таблицы Мокселя просто напрашивается. Нельзя сказать, что этот функционал необходим, но иногда точно может быть полезен. Сначала предполагался примерно такой путь реализации: присосаться к объекту CSheet или CSheetDoc и при помощи торчащих оттуда методов вытягивать данные. Путь это довольно тяжелый и сопоставим по объему с написанием отдельного конвертера типа mxl => yoksel. Поэтому реализация возможности импорта из объекта «Таблица» была отложена в весьма долгий ящик.


Однако, в процессе изучения формата Мокселя стало ясно, что файл mxl по сути представляет собой продукт сериализации объекта типа CSheetDoc. Соответственно, появилась идея простого доступа к данным моксель-документа: взять CMemFile, на его основе создать CArchive, сериализовать в этот архив CSheetDoc и полученный от CMemFile блок памяти скормить в конвертер из формата mxl. Путь, в общем-то, довольно некрасивый, связанный с большим оверхедом по памяти, но все же очень простой. К тому же от одного из первых пользователей Йокселя как раз поступило рацпредложение: «а, типа, почему бы не сделать?...»


Изучение вопроса дало следующее. Объект типа «Таблица» представляет собой класс CTableOutputContext. Класс имеет, приблизительно, такую структуру:


Естественно, скорее всего, структура немного больше, но при доступе через указатель на существующий объект это сути не меняет.


Дальше просто. Делаем, как сказано выше: CMemFile => CArchive => CSheetDoc.Serialize. При этом обязательно следует заполнить член m_pDocument объекта CArchive. Иначе таблицы, содержащие ячейки с ориентацией текста, будут сериализоваться некорректно: в заголовок файла версия будет писаться 7-мая, а все ячейки записываться как для 6-ой.


И три небольшие проблемы этого алгоритма:





Ссылок на эту страницу нет


 
Файлов нет. [Показать файлы/форму]
Комментариев нет. [Показать комментарии/форму]