Autor Beitrag
Peter18
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Mi 14.09.11 11:04 
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
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
Peter18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


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
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]) +12000);
      if x>1  then prefix:= URLprefix[x];  // prefix file:/// is useless
      Break;
    end;
  if (Length(prefix) = 0and (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]) +12000);
        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