уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Чем дольше живет в Сети блог 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, ещё раз спасибо за обновление ;)

0 0 голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Подписаться
Уведомить о
6 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
Максим Коробов
Максим Коробов
04/04/2010 15:17

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

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

Kirill Krasnov
04/04/2010 18:21

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

Андрей
Андрей
07/04/2010 21:43

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

Kirill Krasnov
08/04/2010 20:56

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