class DarkRaha extends com { // разработка приложений
            String a="Главная" b="Контакты" c="О сайте"
};

генератор отчетов BIRT
отчеты в Ms Office
отчеты Rave Reports

Справка по отчетам

Отчеты в Ms Office

Иногда заказчику предпочтительнее получать результат обработки данных в виде готовых документов Ms Word или Ms Exel. Благодоря технологии OLE Automation это становится возможным.

delphi/cbuilder

В Delphi или CBuilder это можно сделать через специальные компоненты (в BDS группа Servers) или напрямую через объекты Olevariant/Variant как в следующих примерах. При запуске приложения из IDE, возникают дополнительные ошибки, которые нужно просто пропустить.


// пример для Delphi
uses ..., Comobj;

procedure TForm1.Button1Click(Sender: TObject);
var
   word :Olevariant;  // variant
   selfcreates: boolean;

begin
selfcreates:=false;
try // если MsWord уже открыт пользователем
    word := GetActiveOleObject('word.application');
except  
  try // иначе создаем сами
    word:=CreateOleObject('word.application');
    selfcreates:=true;
	except
    ShowMessage(
    'cannot access to MsWord, '+
    'check your installation.'
    );
    exit;
  end;
end;

// делаем MsWord видимым пользователю
word.Visible := true;

// добавим новый документ
word.Documents.Add;

// добавим текст
word.ActiveDocument.Content.
     InsertAfter('Hello World ');

// выбрали символы от 3 по 7
// и сделали их жирными
word.ActiveDocument.Range(3,7).
     bold:=true;

// разобьем страницу на два столбца
word.ActiveDocument.PageSetup.
     TextColumns.SetCount(2);
...

// по умолчанию расширение
word.ActiveDocument.SaveAs('c:\demo');
// закрываем документ
word.ActiveDocument.Close;

// закрываем Ms Word если открывали сами
try
if selfcreates then
      word.Quit;
finally
end;

end;

//-----------------------------------------------
// пример для Cbuilder
#include <ActiveX.hpp>
...

void __fastcall TForm1::Button1Click(TObject *Sender) {
Variant  word;
Variant  adoc;
bool  selfcreates=false;

try {// если MsWord уже открыт пользователем
	word = GetActiveOleObject("word.application");
	ShowMessage("connection ok");
}
catch(...){
  try{
word=CreateOleObject("word.application");
selfcreates=true;
}
catch(...){
ShowMessage(
"cannot access to MsWord, check your installation."
  );
return;
}
}

// делаем MsWord видимым пользователю
//word.OlePropertySet("Visible", true);

// добавим новый документ
adoc=word.OlePropertyGet("documents").
          OleFunction("Add");

// добавим текст
adoc.OlePropertyGet("Content").
	OleProcedure("InsertAfter","Hello World ");

// выбрали символы от 3 по 7
// и сделали их жирными
adoc.OleFunction("Range",3,7).
	OlePropertySet("bold",true);

// разобьем страницу на два столбца
adoc.OlePropertyGet("PageSetup").
	 OlePropertyGet("TextColumns").
	 OleProcedure("SetCount",2);
...

библиотека VOLE для С++

В других С++ средах лучше всего воспользоваться бесплатной библиотекой VOLE (использует STLSoft), значительно упрощающую работу с ole объектами. Ее инсталляция не предствляет сложностей, нужно просто скопировать включаемые файлы в ваш компилятор.

 
#include <vole/vole.hpp<
#include <comstl/util/initialisers.hpp>
#include <comstl/util/variant.hpp>
#include <winstl/error/error_desc.hpp>
#include <iostream>
using namespace std;
using namespace vole;

int main(){
// инициализация OLE	
comstl::ole_init oleinit;

try{
object word = object::create(
		"word.application",
		CLSCTX_LOCAL_SERVER,
		coercion_level::naturalPromotion);	

// делаем MsWord видимым пользователю
word.put_property(L"Visible", true);

// добавим новый документ
collection documents = word.
      get_property<collection>(L"Documents");
object adoc = documents.
      invoke_method<object>(L"Add");

// добавим текст
object content = adoc.get_property<object> 
                (L"Content");
content.invoke_method<void>
                (L"InsertAfter",L"Hello World ");

// выбрали символы от 3 по 7
// и сделали их жирными
object range = adoc.invoke_method<object>
               (L"Range",3,7);
range.put_property(L"Bold",true);

// разобьем страницу на два столбца
adoc.get_property<object>(L"PageSetup").
     get_property<object>(L"TextColumns").
     invoke_method<void>(L"SetCount",2);

// можно не закрывать, и дать пользователю
// возможность закрыть самому		
//word.invoke_method<void>(L"Quit");
}
catch(vole_exception&e){
	cout<<e.what()<<endl;	
}

return 0;	
}

JavaScript

Для пользователей браузеров, поддерживающих ActiveX как IE, можно использовать JavaScript код, создающий документы. При этом необходимо разрешить в браузере исполнение скриптов и ActiveX объектов. Иначе сервер не сможет создать объект программирования.


document.write('JavaScript Demo<br>');
document.write(
   'разрешите использование ActiveX <br>');

var word=new ActiveXObject('Word.Application');
var adoc;

if (word != null) {
adoc=word.Documents.Add();
adoc.Content.InsertAfter('Hello World');
adoc.Range(3,7).bold=true;
adoc.PageSetup.TextColumns.SetCount(2);
adoc.SaveAs('c:/demo');
adoc.Close();
word.Quit(); 
document.writeln('look demo.doc at c:\\<br>');
}
else
  document.write
      ('проблемы с созданием ActiveX<br>');

document.write('JavaScript DemoEND');

php

Аналогичные возможности существуют в Windows версии PHP. В документации по COM объекту как раз приведен пример работы с Ms Word.



И наконец, java программисты могут поискать готовые классы обертки, использующие JNI для доступа к com объектам.


Рейтинг@Mail.ru