Экспорт списка в OpenOffice Calc из Delphi

#delphi #automation #delphi-7 #openoffice.org #openoffice-calc

#delphi #автоматизация #delphi-7 #openoffice.org #openoffice-calc

Вопрос:

Я использую Delphi 7 и хотел бы экспортировать содержимое списка из моей программы в OpenOffice Calc с помощью автоматизации, вместо использования файлов.

Задача проста: создать новый документ, выполнить итерацию по строкам / столбцам и изменить данные ячейки.

Я нашел некоторый код, но он неполный, и я надеялся, что у кого-нибудь есть готовый пример кода для выполнения этой очень простой задачи. Это могло бы сэкономить мне несколько часов попыток.

Заранее спасибо!


Редактировать: Я хотел бы автоматизировать OpenOffice Calc для достижения того, что я написал выше. Спасибо!

Комментарии:

1. OpenOffice Calc поддерживает импорт данных в нескольких форматах (HTML, с разделителями табуляции, CSV и т.д.). В чем конкретно заключается ваш вопрос — как создать файл импорта данных из Delphi, или как импортировать эти данные в Calc, или как автоматизировать Calc и программно создать электронную таблицу?

2. Как автоматизировать Calc и программно создать spreasheet

3. @steve проблема с вопросом в том, что вы не сказали нам, чего вы хотите.

4. Стив, я помог тебе задать твой вопрос. Надеюсь, вам нравится, как я четко сформулировал вопрос вверху, а не внизу.

5. Имейте в виду, что автоматизация OOo 3.3 COM полностью нарушена, вместо этого используйте OOo 3.2. Смотрите openoffice.org/bugzilla/show_bug.cgi?id=117010

Ответ №1:

Самое простое решение — записать выходные данные в CSV-файл и открыть его в OpenOffice.

Существуют также библиотеки для записи файлов .XLS, которые могут читать как OpenOffice Calc, так и Excel. CSV настолько прост, что я удивляюсь, что вам нужен пример. Создайте TStringList и добавьте в него строки в формате, разделенном запятыми. Сохранить в файл.

Так называемый «программный» метод предполагает автоматизацию OLE.

 uses
  OleAuto;

var
 mgr,calc,sheets,sheet1,dt,args:Variant;
begin
   args = VarArrayCreate(...);    
   mgr := CreateOleObject('com.sun.star.ServiceManager');
   dt := mgr.createInstance('com.sun.star.frame.Desktop')
   calc = dt.loadComponentFromURL('private:factory/scalc', '_blank', 0, args)
   sheets = calc.getSheets()
   sheet1 = sheets.getByIndex(0)
   ...
  

Комментарии:

1. Спасибо, но я бы просто хотел экспортировать его без сохранения. Моя программа делает то же самое с Excel, и для обеспечения согласованности я хотел бы сделать то же самое с OO. Сохраняет пользователь лист или нет — это его / ее выбор.

2. Это намного больше работы. Для чего? Создайте временную папку, запустите программу, позже удалите временный файл. Я не знаю о поддержке OO для OLE Automation, я знаю, как это сделать с MS Excel, но не с OOCalc.

Ответ №2:

Open Office поддерживает автоматизацию

смотрите: http://udk.openoffice.org/common/man/tutorial/office_automation.html

Информацию об Open Office для Delphi можно найти на:
http://development.openoffice.org/#OLE

Сайт ooomacros.org похоже, что не работает, к счастью, на машине wayback все еще есть копия:
http://replay.web.archive.org/20090608051118/http://www.ooomacros.org/dev.php

Удачи.