Подписка

добавить на Яндекс

Наши проекты

Delphi+Google

Google API

Google API в Delphi - проект с открытым исходным кодом.

Chrono

Chrono

Хронометр - программа для ведения списка задач.

ODFProc

ODFProc

ODFProc - работа с документами OpenOffice в Lazarus и FreePascal.

Поддержка блога

А тут я коплю на лицензию Delphi XE на iPad =).
Сумма пожертвования не фиксирована.

Публикации

Год назад

Случайный пост

Последние

Сообщения форума

Комментарии

Социальные сети

Google

Facebook

Twitter

Опрос

Вы сейчас или в ближайшем обозримом будущем планируете разрабатывать кроссплатформенное приложение с использованием Firemonkey?



Loading ... Loading ...

Блоги и сообщества

Статьи по Delphi DelphiFeeds.ru - Все Delphi-блоги Рунета Сообщество умных людей VR-Online.RU Бесплатный журнал для программистов и всех, кто интересуется IT Статьи и уроки по Delphi Новостной блог о высоких технологиях
Система Orphus
Опубликовал Vlad 3 апреля 2010 в 18:22.
Категории: Основы Delphi.


Чем дольше живет в Сети блог www.webdelphi.ru, тем большее количество народа его посещает. Что в целом закономерно - блог наращивает "пузо", ссылки на статьи копируются по форумам, тексты цитируются и т.д. Подобные обстоятельства не могут не радовать автора любого блога, ведь, если блог цитируют значит он кому-то да нужен и работа была проделана не зря, посты написаны не "в ящик" и их используют. Думаю, что владельца блогов по программированию со мной согласятся, если я скажу, что наибольшую мотивацию для дальнейшего ведения блога привносят не только комментарии к статьям, но и непосредственное живое участие читателей в жизни блога. Вот и мне вчера пришло на email письмо от пользователя с ником Unitay, который не просто воспользовался материалами из блога, но и не поленился отправить доработанный вариант модуля uOpenOffice.pas мне на почту. За что ему большое спасибо, а Вам - новые возможности по работе с OpenOffice.

Так как сегодня я выступаю лишь в роли посредника между автором обновленного модуля и Вами, то я просто скопирую комментарий Unitay по поводу обновлений в модуле. Вот собственно, что было сделано:

Примененный формат называется "Таблица XML 2003" в MSExcel и "Microsoft Excel 2003 XML" в OOCalc. Есть также более современные версии. Для совместимости с xml 2003 необходимо указать вначале документа ProcessingInstruction

<?mso-application progid="Excel.Sheet"?>

Далее необходимо указать схемы используемые в книге документа

<Workbook xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:x="urn:schemas-microsoft-com:office:excel">

Файл содержит книгу, в книгу вложены листы, листы содержат таблицу, разделенную на строки, которые в свою очередь делятся на ячейки:

<ss:Worksheet ss:Name="Имя листа">

<Table ss:StyleID="ta1">
<Column ss:Span="0" ss:Width="64.2614"/> ##Span=0 новое значение ширины применяется только к одному столбцу
<Column ss:Span="1" ss:Width="94.2614"/> ##Span=1 ширина применяется к следующим двум столбцам
<Column ss:Span="3" ss:Width="194.2614"/>
<Row ss:Height="12.8409">
<Cell><Data ss:Type="Number">1</Data></Cell> ##Type указывает на тип данных в ячейке
<Cell><Data ss:Type="Number">2</Data></Cell> ##Number - число, String - строка

 <Cell><Data ss:Type="Number">3</Data></Cell>
</Row>
</Table>
<x:WorksheetOptions/>
</ss:Worksheet>

остальное можно найти в спецификации на xml 2003.
Небольшой пример использования:

procedure TForm1.Button1Click(Sender: TObject);
var Table: TXmlTable;
OoXmlWriter: TOoXmlWriter;
begin
  OoXmlWriter := TOoXmlWriter.Create; //создали объект TOoXmlWriter
{Добавляем пустую таблицу в документ}
  Table := OoXmlWriter.InsertTable(3{Cols}, 3{Rows});
   if Assigned(Table)then //таблица создана успешно
     begin
{заполняем ячейки таблицы текстом}
       Table.Cell[0,0] := 'col 0 row 0';
       Table.Cell[1,0] := Utf8ToAnsi('Столбец 1 строка 0');
       Table.Cell[2,0] := 'Столбец 2 строка 0';
       Table.Cell[0,1] := 'Столбец 0 строка 1';
       Table.Cell[1,1] := 'Столбец 1 строка 1';
       Table.Cell[2,1] := 'Столбец 2 строка 1';
    end;
{записываем документ на диск}
 OoXmlWriter.GenerateDocument(ExtractFilePath(Application.ExeName) + 'document.xml');
end;

А вот и сам обновленный модуль: zip uOpenOffice.pas(9.5 KB)
Скачивайте, используйте новые возможности, вносите свои поправки, доработки. Думаю, что обновленная версия модуля пригодится сообществу Delphi.
Unitay, ещё раз спасибо за обновление ;)

Понравилась статья? Тогда:
Делись! Загружай! Плюсуй!
   Отправить PDF на   
Читай ещё статьи на WebDelphi.ru

Комментарии (6)

WP_Cloudy
  • Максим Коробов пишет:

    Есть предложение: все примеры, части которых приводятся в статье, выкладывать в виде архивов готовых проектов. Если для сборки примеров требуется установка каких-либо компонентов, то тогда имеет смысл включать также скомпилированные варианты проектов.

    Автору не будет накладно, так как у него есть указанные материалы при подготовке статьи.
    Читателям же получится экономить время на: 1) создание проекта с новыми знаниями; 2) сборку этого добра. :)

  • Vlad пишет:

    Ну я обычно стараюсь выкладывать то, о чем пишу. Правда сейчас по большей части на файл-хостинги т.к. из 250 Мб доступного место блог уже использует 254 :)

  • Kirill Krasnov пишет:

    Влад, а почему не закидывать на source-hosting (code.google.com, sourceforge.net, или другие)?

  • Vlad пишет:

    Отдельные моменты и так уже на google находятся :) По-маленьку, по-тихоньку и другие вещи туда перекочуют.

  • Андрей пишет:

    Удобнее было бы работать с odt или doc, используя COM. Хотя для веба и так удобнее, но нужно изучать дополнительный материал. А так можно использовать одни и те же знания для написания прикладных программ, как то отчётов и веб-публикаций. Не лень, просто технологии меняются и привязывать себя жёстко к чему-то очень не хочется, да и не очень умно это по сути.

  • Kirill Krasnov пишет:

    Андрей, если ничего не поменялось, то работать с COM нет возможности. Они используют свою технику, но ее я уже не изучал.

Ваш ответ

Внимание: Все комментарии модерируются, и это может вызвать задержку их публикации. Отправлять комментарий заново не требуется.

Пожалуйста, заключайте исходный код в тэги [code][/code].
Если код большой, то воспользуйтесь Вставкой кода на отдельной странице и оставьте в комментарии ссылку на исходник