Чем дольше живет в Сети блог 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;
А вот и сам обновленный модуль: [download id=»45″ format=»1″]
Скачивайте, используйте новые возможности, вносите свои поправки, доработки. Думаю, что обновленная версия модуля пригодится сообществу Delphi.
Unitay, ещё раз спасибо за обновление ;)
Есть предложение: все примеры, части которых приводятся в статье, выкладывать в виде архивов готовых проектов. Если для сборки примеров требуется установка каких-либо компонентов, то тогда имеет смысл включать также скомпилированные варианты проектов.
Автору не будет накладно, так как у него есть указанные материалы при подготовке статьи.
Читателям же получится экономить время на: 1) создание проекта с новыми знаниями; 2) сборку этого добра. :)
Ну я обычно стараюсь выкладывать то, о чем пишу. Правда сейчас по большей части на файл-хостинги т.к. из 250 Мб доступного место блог уже использует 254 :)
Влад, а почему не закидывать на source-hosting (code.google.com, sourceforge.net, или другие)?
Отдельные моменты и так уже на google находятся :) По-маленьку, по-тихоньку и другие вещи туда перекочуют.
Удобнее было бы работать с odt или doc, используя COM. Хотя для веба и так удобнее, но нужно изучать дополнительный материал. А так можно использовать одни и те же знания для написания прикладных программ, как то отчётов и веб-публикаций. Не лень, просто технологии меняются и привязывать себя жёстко к чему-то очень не хочется, да и не очень умно это по сути.
Андрей, если ничего не поменялось, то работать с COM нет возможности. Они используют свою технику, но ее я уже не изучал.