[allgemeinen Dateizugriff] Öffnen einer Tabelle mit OpenOffice
spacer
Autor Nachricht
Peter18
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 107


Delphi4
BeitragVerfasst: Mi 14.09.11 11:04 
Betrifft: allgemeinen Dateizugriff
Ein freundliches Hallo an alle,

ich verwende Delphi 4 und möchte nachdem ich via MS auf Excel-Tabellen zugreifen kann, dies auch über OpenOfice tun. Leider bekomme ich die Fehlermeldung: Type-Konflikt. Alle Versuche das Problem zu lösen schlugen fehl. Auch die UNO Docs haben bisher nicht geholfen. Vielleicht habe ich ja einen Knick in der Optik und schiele immer an der Lösung vorbei. :( Hoffe jemand kann sie mir gerade biegen.

ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.FormCreate(Sender: TObject);
var
OpenOffice, StarDesktop : OleVariant;
Tabel, Sheet : OleVariant;
Prop : OleVariant;
begin
Path := 'O:/BUERO/Geschäftsleitung/Tabellen/Firmen.xls';
OpenOffice := CreateOleObject('com.sun.star.ServiceManager');
StarDesktop := OpenOffice.createInstance('com.sun.star.frame.Desktop');
Tabel := StarDesktop.loadComponentFromURL( Path, '_blank', 0, Prop );

Ich nehme an, "Prop" ist der Übeltäter. Ich hoffe auf :idea: und güße euch von der Nordsee

Peter
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Peter18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 107


Delphi4
BeitragVerfasst: So 09.10.11 14:41 
Ein freundliches Hallo an alle,

ich kann meine eigene Frage beantworten:

ausblenden volle Höhe Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
function convertToURL(winAddr: String): String;
var
sv : Variant; x: Integer; sLow, UTF8Addr, prefix: String;
begin
sLow:= AnsiLowerCase(winAddr);
prefix:= '';
for x:= 1 to High(URLprefix) do
if Pos(URLprefix[x], sLow) = 1 then begin
winAddr:= Copy(winAddr, Length(URLprefix[x]) +1, 2000);
if x>1 then prefix:= URLprefix[x]; // prefix file:/// is useless
Break;
end;
if (Length(prefix) = 0) and (Pos('@', sLow) > 0) then
Result:= 'mailto:' +winAddr
else begin
sv:= Vertrieb.OpenOffice.createInstance('com.sun.star.ucb.FileContentProvider');
UTF8Addr:= sv.getFileURLFromSystemPath('', winAddr);
// if Length(UTF8Addr) = 0 then Raise EOOoError.Create(OOo_convertToURLKO);
Result:= prefix +UTF8Addr;
end;
end;

// #############################################################################

function convertFromURL(URLaddr: String): String;
var
sv : Variant; x: Integer; sLow, winAddr, prefix: String;
begin
sLow:= AnsiLowerCase(URLaddr);
prefix:= '';
for x:= 1 to High(URLprefix) do
if Pos(URLprefix[x], sLow) = 1 then begin
if x>1 then begin
URLaddr:= Copy(URLaddr, Length(URLprefix[x]) +1, 2000);
prefix:= URLprefix[x];
end;
Break;
end;
sv:= Vertrieb.OpenOffice.createInstance('com.sun.star.ucb.FileContentProvider');
winAddr:= sv.getSystemPathFromFileURL(URLaddr);
if Length(prefix) <> 0 then // backslash only with file:///
winAddr:= StringReplace(winAddr, '\', '/', [rfReplaceAll]);
// if Length(winAddr) = 0 then Raise EOOoError.Create(OOo_convertFromURLKO);
Result:= prefix +winAddr;
end;

// #######################################################################

procedure OpenCalc;
var
Path : String;
Par : Variant;

begin
with Form1 do
begin

Par := VarArrayCreate([0, - 1], varVariant);
OpenOffice := CreateOleObject('com.sun.star.ServiceManager');
StarDesktop := OpenOffice.createInstance('com.sun.star.frame.Desktop');
sv := OpenOffice.createInstance('com.sun.star.ucb.FileContentProvider');
Path := sv.getFileURLFromSystemPath('', FilePath);
excel := StarDesktop.loadComponentFromURL( Path, '_blank', 0, Par );
Sheet := excel.Sheets.getByName( WorkSheet );

end;
end;

// #######################################################################

Die Funktion "convertToURL" ist notwändig, um den String in eine OpenOffice konformen Pfad zu verwandeln. Leerschritte und andere Zeichen werden in z.B. %20% für " " umgewandelt u.s.w. "Form1.FilePath" enthält den Windows-Pfad. Als Parameter wird ein leeres Variantes Array übergeben {VarArrayCreate([0, - 1], varVariant)}.

Ich hoffe irgend jemandem hilft das!

Grüße

Peter
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home