 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
|
| Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Qua Jul 04, 2007 11:57 am Assunto: |
|
|
| Código: |
unit SampleCode;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, ComObj, Variants;
type
TOpenOffice = class
function Connect: boolean;
procedure Disconnect;
function CreateDocument: boolean;
function OpenDocument(const aFileUrl:string): boolean;
procedure SaveDocument(const aFileUrl:string);
procedure InsertText(const aText: String);
private
StarOffice: Variant;
Document: Variant;
function MakePropertyValue(PropName, PropValue:string):variant;
end;
implementation
CreateOleObject.}
function TOpenOffice.Connect: boolean;
begin
if VarIsEmpty(StarOffice) then
StarOffice := CreateOleObject('com.sun.star.ServiceManager');
Result := not (VarIsEmpty(StarOffice) or VarIsNull(StarOffice));
end;
procedure TOpenOffice.Disconnect;
begin
StarOffice := Unassigned;
end;
function TOpenOffice.CreateDocument: boolean;
var
StarDesktop: Variant;
begin
StarDesktop := StarOffice.createInstance('com.sun.star.frame.Desktop');
Document := StarDesktop.LoadComponentFromURL(
'private:factory/swriter', '_blank', 0,
VarArrayCreate([0, -1], varVariant));
Result := not (VarIsEmpty(Document) or VarIsNull(Document));
end;
function TOpenOffice.MakePropertyValue(PropName, PropValue:string):variant;
var Struct: variant;
begin
Struct := StarOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
Struct.Name := PropName;
Struct.Value := PropValue;
Result := Struct;
end;
function TOpenOffice.OpenDocument(const aFileUrl:string): boolean;
var
StarDesktop: Variant;
VariantArr: variant;
begin
StarDesktop := StarOffice.CreateInstance('com.sun.star.frame.Desktop');
VariantArr := VarArrayCreate([0, 0], varVariant);
VariantArr[0] := MakePropertyValue('FilterName', 'HTML (StarWriter)');
Document := StarDesktop.LoadComponentFromURL(
aFileUrl, '_blank', 0,
VariantArr);
Result := not (VarIsEmpty(Document) or VarIsNull(Document));
end;
procedure TOpenOffice.SaveDocument(const aFileUrl:string);
var
StarDesktop: Variant;
VariantArr: variant;
begin
StarDesktop := StarOffice.createInstance('com.sun.star.frame.Desktop');
VariantArr := VarArrayCreate([0, 0], varVariant);
VariantArr[0] := MakePropertyValue('FilterName', 'MS Word 97');
//VariantArr[0] := MakePropertyValue('FilterName', 'Rich Text Format');
Document.StoreToURL(aFileUrl, VariantArr);
end;
|
Editado pela última vez por johnny-walker em Qua Nov 03, 2010 9:02 am, num total de 1 vez |
|
| Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Qua Jul 04, 2007 11:58 am Assunto: |
|
|
| Código: |
procedure TOpenOffice.InsertText(const aText: String);
var
oCursor: Variant;
oText: Variant;
begin
//get document text object
oText := Document.GetText;
//create cursor
oCursor := oText.CreateTextCursor;
//set some text properties
oCursor.SetPropertyValue('CharColor', 255);
oCursor.SetPropertyValue('CharShadowed', True);
//insert string
oText.InsertString(oCursor, aText, false);
//insert line break character
oText.InsertControlCharacter(oCursor, 0, false);
end;
end.
|
http://www.developpez.com/delphi/faq/?page=opengenera
| Código: |
I had to make a non visual delphi object capable of interacting with spread sheets in general, first it was able to use Excel docs only, but now I have made it dual, so you can manage OpenOffice Calc docs or Excel docs transparently.
The code it self contains a example of use and a to-do list, as long as I improve it I will edit this post to reflect the new capabilities.
Hope it help to all delphi programers trying to master OpenOffice, it was dificult to work all this out without decent examples!
BitFarmer.
Code:
// ********************************************
// ** Object for dual SpreadSheet managing **
// ** using Excel or OpenOffice automaticaly **
// ** By: Sergio Hernandez **
// ** oficina(at)hcsoft.net, CopyLeft 2004 **
// ** Version 0.92 18-05-2004 (DDMMYYYY) **
// ** Use it freely, change it, etc. **
// ********************************************
{EXAMPLE OF USE
//Create object: We have two flavours:
//(A) from an existing file...
HCalc:= THojaCalc.create(OpenDialog.FileName, false);
//(B) from a blank document...
HCalc:= THojaCalc.create(thcOpenOffice); //OpenOffice doc if possible, please
HCalc.FileName:= 'C:\MyNewDoc'; //Needs a file name before you SaveDoc!
//--end of creation.
HCalc.ActivateSheetByIndex(2); //Activate second sheet
if HCalc.IsActiveSheetProtected then
ShowMessage('2nd sheet of name "'+HCalc.ActiveSheetName+'" IS protected');
//Change a cell value (well, change formula, not the double float value)
if HCalc.CellText[i,2] = '' then HCalc.CellText[i,2] := 'Hello world!';
HCalc.AddNewSheet('New Sheet');
HCalc.PrintDoc;
HCalc.SaveDoc;
HCalc.Free;
}
{TODO LIST:
-PrintActiveSheet is not working for OpenOffice (is it even possible?)
-A way to write a date in a cell changing also the format (Excel is herratic in that)
}
|
Editado pela última vez por johnny-walker em Qua Nov 03, 2010 9:02 am, num total de 1 vez |
|
| Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Qua Jul 04, 2007 11:59 am Assunto: |
|
|
| Código: |
{CHANGE LOG:
V0.92:
-SetActiveSheetName didn't change the name to the right sheet on OpenOffice.
-PrintPreview: New procedure to show up the print preview window.
-Bold(Row, Col): Make bold the text in that cell.
-ColumnWidth(col, width): To change a column width.
V0.91:
-NewDoc: New procedure for creating a blank doc (used in create)
-Create from empty doc adds a blank document and take visibility as parameter.
-New functions ooCreateValue and ooDispatch to clean up the code.
-ActiveSheetName: Now is a read-write property, not a read-only function.
-Visible: Now is a read-write property instead of a create param only.
V0.9:
-Create from empty doc now tries both programs (if OO fails try to use Excel).
-CellTextByName: Didn't work on Excel docs.
}
unit UHojaCalc;
interface
uses Variants, SysUtils, ComObj;
//thcError: Tried to open but both failes
//thcNone: Haven't tried still to open any
type TTipoHojaCalc = (thcError, thcNone, thcExcel, thcOpenOffice);
type THojaCalc = class(TObject)
private
fVisible: boolean;
//Program loaded stuff...
procedure LoadProg;
procedure CloseProg;
function GetProgLoaded: boolean;
procedure NewDoc;
procedure LoadDoc;
procedure CloseDoc;
function GetDocLoaded: boolean;
function GetIsExcel: boolean;
function GetIsOpenOffice: boolean;
procedure SetVisible(v: boolean);
//Sheets stuff..
function GetCountSheets: integer;
function GetActiveSheetName: string;
procedure SetActiveSheetName(NewName: string);
//Cells stuff...
function GetCellText(row,col: integer): string;
procedure SetCellText(row,col: integer; Txt: string);
function GetCellTextByName(Range: string): string;
procedure SetCellTextByName(Range: string; Txt: string);
//OpenOffice only stuff...
function FileName2URL(FileName: string): string;
procedure ooDispatch(ooCommand: string; ooParams: variant);
function ooCreateValue(ooName: string; ooData: variant): variant;
public
Tipo: TTipoHojaCalc; //Witch program was used to manage the doc?
FileName: string; //In windows FileName format C:\MyDoc.XXX
Programa: variant; //Excel or OpenOfice instance created.
DeskTop: variant; //OpenOffice desktop reference (not used now).
Document: variant; //Document opened.
ActiveSheet: variant; //Active sheet.
//Object internals...
constructor Create(Name: string; MakeVisible: boolean); overload;
constructor Create(MyTipo: TTipoHojaCalc; MakeVisible: boolean); overload;
destructor Destroy; override;
//Program loaded stuff...
function SaveDoc: boolean;
function PrintDoc: boolean;
procedure ShowPrintPreview;
property ProgLoaded: boolean read GetProgLoaded;
property DocLoaded: boolean read GetDocLoaded;
property IsExcel: boolean read GetIsExcel;
property IsOpenOffice: boolean read GetIsOpenOffice;
property Visible: boolean read fVisible write SetVisible;
//Sheets stuff...
function ActivateSheetByIndex(nIndex: integer): boolean;
function ActivateSheetByName(SheetName: string; CaseSensitive: boolean): boolean;
function IsActiveSheetProtected: boolean;
function PrintActiveSheet: boolean;
procedure AddNewSheet(NewName: string);
property CountSheets: integer read GetCountSheets;
property ActiveSheetName: string read GetActiveSheetName write SetActiveSheetName;
//Cells stuff...
procedure Bold(row,col: integer);
procedure ColumnWidth(col, width: integer); //Width in 1/100 of mm.
property CellText[f,c: integer]: string read GetCellText write SetCellText;
property CellTextByName[Range: string]: string read GetCellTextByName write SetCellTextByName;
end;
implementation
// ************************
// ** Create and destroy **
// ************************
//Create with an empty doc of requested type (use thcExcel or thcOpenOffice)
//Remember to define FileName before calling to SaveDoc
constructor THojaCalc.Create(MyTipo: TTipoHojaCalc; MakeVisible: boolean);
var
i: integer;
IsFirstTry: boolean;
begin
//Close all opened things first...
if DocLoaded then CloseDoc;
if ProgLoaded then CloseProg;
//I will try to open twice, so if Excel fails, OpenOffice is used instead
IsFirstTry:= true;
for i:= 1 to 2 do begin
//Try to open OpenOffice...
if (MyTipo = thcOpenOffice) or (MyTipo = thcNone)then begin
Programa:= CreateOleObject('com.sun.star.ServiceManager');
if ProgLoaded then begin
Tipo:= thcOpenOffice;
break;
end else begin
if IsFirstTry then begin
//Try Excel as my second choice
MyTipo:= thcExcel;
IsFirstTry:= false;
end else begin
//Both failed!
break;
end;
end;
end;
//Try to open Excel...
if (MyTipo = thcExcel) or (MyTipo = thcNone) then begin
Programa:= CreateOleObject('Excel.Application');
if ProgLoaded then begin
Tipo:= thcExcel;
break;
end else begin
if IsFirstTry then begin
//Try OpenOffice as my second choice
MyTipo:= thcOpenOffice;
IsFirstTry:= false;
end else begin
//Both failed!
break;
end;
end;
end;
end;
//Was it able to open any of them?
if Tipo = thcNone then begin
Tipo:= thcError;
raise exception.create('THojaCalc.create failed, may be no Office is installed?');
end;
//Add a blank document...
fVisible:= MakeVisible;
NewDoc;
end;
constructor THojaCalc.Create(Name: string; MakeVisible: boolean);
begin
//Store values...
FileName:= Name;
fVisible:= MakeVisible;
//Open program and document...
LoadProg;
LoadDoc;
end;
destructor THojaCalc.Destroy;
begin
CloseDoc;
CloseProg;
inherited;
end;
// *************************
// ** Loading the program **
// ** Excel or OpenOffice **
// *************************
procedure THojaCalc.LoadProg;
begin
if ProgLoaded then CloseProg;
if (UpperCase(ExtractFileExt(FileName))='.XLS') then begin
//Excel is the primary choice...
Programa:= CreateOleObject('Excel.Application');
if ProgLoaded then Tipo:= thcExcel;
end;
//Not lucky with Excel? Another filetype? Let's go with OpenOffice...
if Tipo = thcNone then begin
//Try with OpenOffice...
Programa:= CreateOleObject('com.sun.star.ServiceManager');
if ProgLoaded then Tipo:= thcOpenOffice;
end;
//Still no program loaded?
if not ProgLoaded then begin
Tipo:= thcError;
raise Exception.create('THojaCalc.create failed, may be no Office is installed?');
end;
end;
procedure THojaCalc.CloseProg;
begin
if DocLoaded then CloseDoc;
if ProgLoaded then begin
try
if IsExcel then Programa.Quit;
Programa:= Unassigned;
finally end;
end;
Tipo:= thcNone;
end;
//Is there any prog loaded? Witch one?
function THojaCalc.GetProgLoaded: boolean;
begin
result:= not (VarIsEmpty(Programa) or VarIsNull(Programa));
end;
function THojaCalc.GetIsExcel: boolean;
begin
result:= (Tipo=thcExcel);
end;
function THojaCalc.GetIsOpenOffice: boolean;
begin
result:= (Tipo=thcOpenOffice);
end;
|
Editado pela última vez por johnny-walker em Qua Nov 03, 2010 9:03 am, num total de 1 vez |
|
| Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Qua Jul 04, 2007 12:02 pm Assunto: |
|
|
| Código: |
// ************************
// ** Loading a document **
// ************************
procedure THojaCalc.NewDoc;
var ooParams: variant;
begin
//Is the program running? (Excel or OpenOffice)
if not ProgLoaded then raise exception.create('No program loaded for the new document.');
//Is there a doc already loaded?
if DocLoaded then CloseDoc;
DeskTop:= Unassigned;
//OK, now try to create the doc...
if IsExcel then begin
Programa.WorkBooks.Add;
Programa.Visible:= Visible;
Document:= Programa.ActiveWorkBook;
ActiveSheet:= Document.ActiveSheet;
end;
if IsOpenOffice then begin
Desktop:= Programa.CreateInstance('com.sun.star.frame.Desktop');
//Optional parameters (visible)...
ooParams:= VarArrayCreate([0, 0], varVariant);
ooParams[0]:= ooCreateValue('Hidden', not Visible);
//Create the document...
Document:= Desktop.LoadComponentFromURL('private:factory/scalc', '_blank', 0, ooParams);
ActivateSheetByIndex(1);
end;
end;
procedure THojaCalc.LoadDoc;
var ooParams: variant;
begin
if FileName='' then exit;
//Is the program running? (Excel or OpenOffice)
if not ProgLoaded then LoadProg;
//Is there a doc already loaded?
if DocLoaded then CloseDoc;
DeskTop:= Unassigned;
//OK, now try to open the doc...
if IsExcel then begin
Programa.WorkBooks.Open(FileName,3);
Programa.Visible:= Visible;
Document:= Programa.ActiveWorkBook;
ActiveSheet:= Document.ActiveSheet;
end;
if IsOpenOffice then begin
Desktop:= Programa.CreateInstance('com.sun.star.frame.Desktop');
//Optional parameters (visible)...
ooParams:= VarArrayCreate([0, 0], varVariant);
ooParams[0]:= ooCreateValue('Hidden', not Visible);
//Open the document...
Document:= Desktop.LoadComponentFromURL(FileName2URL(FileName), '_blank', 0, ooParams);
ActiveSheet:= ActivateSheetByIndex(1);
end;
if Tipo=thcNone then
raise exception.create('No puedo leer el fichero "'+FileName+'" al no estar presente el programa necesario.');
end;
function THojaCalc.SaveDoc: boolean;
begin
result:= false;
if DocLoaded then begin
if IsExcel then begin
Document.Save;
result:= true;
end;
if IsOpenOffice then begin
Document.Store;
result:= true;
end;
end;
end;
//Print the Doc...
function THojaCalc.PrintDoc: boolean;
var ooParams: variant;
begin
result:= false;
if DocLoaded then begin
if IsExcel then begin
Document.PrintOut;
result:= true;
end;
if IsOpenOffice then begin
//NOTE: OpenOffice will print all sheets with Printable areas, but if no
//printable areas are defined in the doc, it will print all entire sheets.
//Optional parameters (wait until fully sent to printer)...
ooParams:= VarArrayCreate([0, 0], varVariant);
ooParams[0]:= ooCreateValue('Wait', true);
Document.Print(ooParams);
result:= true;
end;
end;
end;
procedure THojaCalc.ShowPrintPreview;
begin
if DocLoaded then begin
//Force visibility of the doc...
Visible:= true;
if IsExcel then
Document.PrintOut(,,,true);
if IsOpenOffice then
ooDispatch('.uno:PrintPreview', Unassigned);
end;
end;
procedure THojaCalc.SetVisible(v: boolean);
begin
if DocLoaded and (v<>fVisible) then begin
if IsExcel then
Programa.Visible:= v;
if IsOpenOffice then
Document.getCurrentController.getFrame.getContainerWindow.setVisible(v);
fVisible:= v;
end;
end;
procedure THojaCalc.CloseDoc;
begin
if DocLoaded then begin
//Close it...
try
if IsOpenOffice then Document.Dispose;
if IsExcel then Document.close;
finally end;
//Clean up both "pointer"...
Document:= Null;
ActiveSheet:= Null;
end;
end;
|
Editado pela última vez por johnny-walker em Qua Nov 03, 2010 9:03 am, num total de 1 vez |
|
| Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Qua Jul 04, 2007 12:03 pm Assunto: |
|
|
| Código: |
function THojaCalc.GetDocLoaded: boolean;
begin
result:= not (VarIsEmpty(Document) or VarIsNull(Document));
end;
// *********************
// ** Managing sheets **
// *********************
function THojaCalc.GetCountSheets: integer;
begin
result:= 0;
if DocLoaded then begin
if IsExcel then result:= Document.Sheets.count;
if IsOpenOffice then result:= Document.getSheets.GetCount;
end;
end;
//Index is 1 based in Excel, but OpenOffice uses it 0-based
//Here we asume 1-based so OO needs to activate (nIndex-1)
function THojaCalc.ActivateSheetByIndex(nIndex: integer): boolean;
begin
result:= false;
if DocLoaded then begin
if IsExcel then begin
Document.Sheets[nIndex].activate;
ActiveSheet:= Document.ActiveSheet;
result:= true;
end;
if IsOpenOffice then begin
ActiveSheet:= Document.getSheets.getByIndex(nIndex-1);
result:= true;
end;
sleep(100); //Asyncronus, so better give it time to make the change
end;
end;
//Find a sheet by its name...
function THojaCalc.ActivateSheetByName(SheetName: string; CaseSensitive: boolean): boolean;
var
OldActiveSheet: variant;
i: integer;
begin
result:= false;
if DocLoaded then begin
if CaseSensitive then begin
//Find the EXACT name...
if IsExcel then begin
Document.Sheets[SheetName].Select;
ActiveSheet:= Document.ActiveSheet;
result:= true;
end;
if IsOpenOffice then begin
ActiveSheet:= Document.getSheets.getByName(SheetName);
result:= true;
end;
end else begin
//Find the Sheet regardless of the case...
OldActiveSheet:= ActiveSheet;
for i:= 1 to GetCountSheets do begin
ActivateSheetByIndex(i);
if UpperCase(ActiveSheetName)=UpperCase(SheetName) then begin
result:= true;
Exit;
end;
end;
//If not found, let the old active sheet active...
ActiveSheet:= OldActiveSheet;
end;
end;
end;
//Name of the active sheet?
function THojaCalc.GetActiveSheetName: string;
begin
if DocLoaded then begin
if IsExcel then
result:= ActiveSheet.Name;
if IsOpenOffice then
result:= ActiveSheet.GetName;
end;
end;
procedure THojaCalc.SetActiveSheetName(NewName: string);
begin
if DocLoaded then begin
if IsExcel then
Programa.ActiveSheet.Name:= NewName;
if IsOpenOffice then begin
ActiveSheet.setName(NewName);
//This code always changes the name of "visible" sheet, not active one!
//ooParams:= VarArrayCreate([0, 0], varVariant);
//ooParams[0]:= ooCreateValue('Name', NewName);
//ooDispatch('.uno:RenameTable', ooParams);
end;
end;
end;
//Check for sheet protection (password)...
function THojaCalc.IsActiveSheetProtected: boolean;
begin
result:= false;
if DocLoaded then begin
if IsExcel then
result:= ActiveSheet.ProtectContents;
if IsOpenOffice then
result:= ActiveSheet.IsProtected;
end;
end;
//WARNING: This function is NOT dual, only works for Excel docs!
//Send active sheet to default printer (as seen in preview window)...
function THojaCalc.PrintActiveSheet: boolean;
begin
result:= false;
if DocLoaded then begin
if IsExcel then begin
ActiveSheet.PrintOut;
result:= true;
end;
if IsOpenOffice then begin
raise exception.create('Function "PrintActiveSheet" still not working in OpenOffice!');
//ActiveSheet.Print;
result:= false;
end;
end;
end;
//Add a new sheet, name it, and make it the active sheet...
procedure THojaCalc.AddNewSheet(NewName: string);
var
ooSheets: variant;
begin
if DocLoaded then begin
if IsExcel then begin
Document.WorkSheets.Add;
Document.ActiveSheet.Name:= NewName;
//Active sheet has move to this new one, so I need to update the var
ActiveSheet:= Document.ActiveSheet;
end;
if IsOpenOffice then begin
ooSheets:= Document.getSheets;
ooSheets.insertNewByName(NewName, 1);
//Redefine active sheet to this new one
ActiveSheet:= ooSheets.getByName(NewName);
end;
end;
end;
// ************************
// ** Manage the cells **
// ** in the ActiveSheet **
// ************************
//Read/Write cell text (formula en Excel) by index
//OpenOffice start at cell (0,0) while Excel at (1,1)
//Also, Excel uses (row, col) and OpenOffice uses (col, row)
function THojaCalc.GetCellText(row, col: integer): string;
begin
if DocLoaded then begin
if IsExcel then result:= ActiveSheet.Cells[row, col].Formula; //.Text;
if IsOpenOffice then result:= ActiveSheet.getCellByPosition(col-1, row-1).getFormula;
end;
end;
procedure THojaCalc.SetCellText(row, col: integer; Txt: string);
begin
if DocLoaded then begin
if IsExcel then ActiveSheet.Cells[row, col].Formula:= Txt;
if IsOpenOffice then ActiveSheet.getCellByPosition(col-1, row-1).setFormula(Txt);
end;
end;
//Read/Write cell text (formula in excel) by name instead of position
//For instance, you can set the value for cell 'NewSheet!A12' or similar
//NOTE: If range contains several cells, first one will be used.
function THojaCalc.GetCellTextByName(Range: string): string;
var OldActiveSheet: variant;
begin
if DocLoaded then begin
if IsExcel then begin
result:= Programa.Range[Range].Text; //Set 'Formula' but Get 'Text';
end;
if IsOpenOffice then begin
OldActiveSheet:= ActiveSheet;
//If range is in the form 'NewSheet!A1' then first change sheet to 'NewSheet'
if pos('!', Range) > 0 then begin
//Activate the proper sheet...
if not ActivateSheetByName(Copy(Range, 1, pos('!', Range)-1), false) then
raise exception.create('Sheet "'+Copy(Range, 1, pos('!', Range)-1)+'" not present in the document.');
Range:= Copy(Range, pos('!', Range)+1, 999);
end;
result:= ActiveSheet.getCellRangeByName(Range).getCellByPosition(0,0).getFormula;
ActiveSheet:= OldActiveSheet;
end;
end;
end;
procedure THojaCalc.SetCellTextByName(Range: string; Txt: string);
var OldActiveSheet: variant;
begin
if DocLoaded then begin
if IsExcel then begin
Programa.Range[Range].formula:= Txt;
end;
if IsOpenOffice then begin
OldActiveSheet:= ActiveSheet;
//If range is in the form 'NewSheet!A1' then first change sheet to 'NewSheet'
if pos('!', Range) > 0 then begin
//Activate the proper sheet...
if not ActivateSheetByName(Copy(Range, 1, pos('!', Range)-1), false) then
raise exception.create('Sheet "'+Copy(Range, 1, pos('!', Range)-1)+'" not present in the document.');
Range:= Copy(Range, pos('!', Range)+1, 999);
end;
ActiveSheet.getCellRangeByName(Range).getCellByPosition(0,0).SetFormula(Txt);
ActiveSheet:= OldActiveSheet;
end;
end;
end;
procedure THojaCalc.Bold(row,col: integer);
const ooBold: integer = 150; //150 = com.sun.star.awt.FontWeight.BOLD
begin
if DocLoaded then begin
if IsExcel then begin
Programa.ActiveSheet.Cells[row,col].Font.Bold;
end;
if IsOpenOffice then begin
ActiveSheet.getCellByPosition(col-1, row-1).getText.createTextCursor.CharWeight:= ooBold;
end;
end;
end;
procedure THojaCalc.ColumnWidth(col, width: integer); //Width in 1/100 of mm.
begin
if DocLoaded then begin
if IsExcel then begin
//Excel use the width of '0' as the unit, we do an aproximation: Width '0' = 2 mm.
Programa.ActiveSheet.Cells[1, col].ColumnWidth:= width/100/3;
end;
if IsOpenOffice then begin
ActiveSheet.getCellByPosition(col-1, 0).getColumns.getByIndex(0).Width:= width;
end;
end;
end;
// ***************************
// ** OpenOffice only stuff **
// ***************************
//Change 'C:\File.txt' into 'file:///c:/File.txt' (for OpenOffice OpenURL)
function THojaCalc.FileName2URL(FileName: string): string;
begin
result:= '';
if LowerCase(copy(FileName,1,8))<>'file:///' then
result:= 'file:///';
result:= result + StringReplace(FileName, '\', '/', [rfReplaceAll, rfIgnoreCase]);
end;
function THojaCalc.ooCreateValue(ooName: string; ooData: variant): variant;
var
ooReflection: variant;
begin
if IsOpenOffice then begin
ooReflection:= Programa.createInstance('com.sun.star.reflection.CoreReflection');
ooReflection.forName('com.sun.star.beans.PropertyValue').createObject(result);
result.Name := ooName;
result.Value:= ooData;
end else begin
raise exception.create('ooValue imposible to create, load OpenOffice first!');
end;
end;
procedure THojaCalc.ooDispatch(ooCommand: string; ooParams: variant);
var
ooDispatcher, ooFrame: variant;
begin
if DocLoaded and IsOpenOffice then begin
if (VarIsEmpty(ooParams) or VarIsNull(ooParams)) then
ooParams:= VarArrayCreate([0, -1], varVariant);
ooFrame:= Document.getCurrentController.getFrame;
ooDispatcher:= Programa.createInstance('com.sun.star.frame.DispatchHelper');
ooDispatcher.executeDispatch(ooFrame, ooCommand, '', 0, ooParams);
end else begin
raise exception.create('Dispatch imposible, load a OpenOffice doc first!');
end;
end;
end.
http://www.oooforum.org/forum/viewtopic.phtml?p=150870
http://www.oooforum.org/forum/viewtopic.phtml?t=22344
|
PS.: Desculpem a todos mas como não consegui postar o artigo totalmente devido a um erro de cgi que já reportei no forum, acreditto que é pelo tamanho do texto por isto o dividi em várias partes...
bye..
Editado pela última vez por johnny-walker em Qua Nov 03, 2010 9:03 am, num total de 1 vez |
|
| Voltar ao Topo |
|
 |
j.leo Novato

Registrado: Terça-Feira, 20 de Mai de 2008 Mensagens: 40 Localização: Campo Grande / MS
|
Enviada: Ter Jul 08, 2008 3:58 pm Assunto: |
|
|
ola johnny...
cara....sei lá se inesperiencia ou o meu ingles q não ta muito bom....
mas pelo q eu percebi nesse teu código vc tem exemplos de planilhas(calc) e documentos texto (wiriter)
carar mas eu não entendi ...
teria como m passar por e-mail apenas a parte de manipulação do wiriter?
grato... |
|
| Voltar ao Topo |
|
 |
Wolver Membro Junior

Registrado: Quinta-Feira, 9 de Fevereiro de 2006 Mensagens: 343
|
Enviada: Qua Jul 09, 2008 10:32 am Assunto: Re: BROffice - OpenOffice - Utilização |
|
|
johnny-walker
Eu vi uma vídeo aula sobre a interação entre o delphi e o excel, tipo exportar dados de um TDataSet para uma planilha excel.
Com esse sdk será que consigo fazer a mesma coisa?
sem mais ...obrigado! |
|
| Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|