Чем дольше живет в Сети блог 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;
А вот и сам обновленный модуль:
uOpenOffice.pas(9.5 KB)
Скачивайте, используйте новые возможности, вносите свои поправки, доработки. Думаю, что обновленная версия модуля пригодится сообществу Delphi.
Unitay, ещё раз спасибо за обновление ;)
| Делись! | Загружай! | Плюсуй! |
| | |









04 Апр 2010 в 3:17 пп
Есть предложение: все примеры, части которых приводятся в статье, выкладывать в виде архивов готовых проектов. Если для сборки примеров требуется установка каких-либо компонентов, то тогда имеет смысл включать также скомпилированные варианты проектов.
Автору не будет накладно, так как у него есть указанные материалы при подготовке статьи.
Читателям же получится экономить время на: 1) создание проекта с новыми знаниями; 2) сборку этого добра. :)
04 Апр 2010 в 4:58 пп
Ну я обычно стараюсь выкладывать то, о чем пишу. Правда сейчас по большей части на файл-хостинги т.к. из 250 Мб доступного место блог уже использует 254 :)
04 Апр 2010 в 6:21 пп
Влад, а почему не закидывать на source-hosting (code.google.com, sourceforge.net, или другие)?
04 Апр 2010 в 7:57 пп
Отдельные моменты и так уже на google находятся :) По-маленьку, по-тихоньку и другие вещи туда перекочуют.
07 Апр 2010 в 9:43 пп
Удобнее было бы работать с odt или doc, используя COM. Хотя для веба и так удобнее, но нужно изучать дополнительный материал. А так можно использовать одни и те же знания для написания прикладных программ, как то отчётов и веб-публикаций. Не лень, просто технологии меняются и привязывать себя жёстко к чему-то очень не хочется, да и не очень умно это по сути.
08 Апр 2010 в 8:56 пп
Андрей, если ничего не поменялось, то работать с COM нет возможности. Они используют свою технику, но ее я уже не изучал.