Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi [OLE-Fernsteue]Formeln in Exceltabellen eintragen - Problem (https://www.delphipraxis.net/124947-%5Bole-fernsteue%5Dformeln-exceltabellen-eintragen-problem.html)

BingoBongo 27. Nov 2008 23:29


[OLE-Fernsteue]Formeln in Exceltabellen eintragen - Problem
 
Hallo allerseits,
ich habe ein Problem, bei dem ich mir Hilfe erhoffe.
Ich habe ein kleines Tool geschrieben, welches mir sehr lästige Routineaufgaben beim Arbeiten mit bestimmten Excel-Tabellen abnimmt. Unter anderem sollen Formeln innerhalb einer solchen Exceltabelle verändert oder überschrieben werden.
Leider klappt genau das nicht so wie es soll.
Hier mal der Code, den ich verwende, damit man sich ein Bild davon machen kann, wie ich die OLE Steuerung verwende.
Delphi-Quellcode:
procedure gesamtmiete;
//paßt die Formel für die Gesamtmiete so an, dass alle 8 Zellen addiert werden
var
  Excel: Variant;
  kopie, kopie2: string;
  pfad: string;
  i: integer;
begin
  Excel := CreateOleObject('Excel.Application');
  pfad:= form1.Edit2.Text;
  Excel.Workbooks.Open (pfad);
  Excel.Visible := true;

  application.ProcessMessages;
  Excel.Sheets[2].select;
  Excel.Sheets[2].Range['e5'].select;
  Excel.ActiveCell.formula:= '=sum(c5:d8)';
  Excel.ActiveCell.NumberFormat:='0,00';

  Excel.ActiveWorkbook.Save; //(pfad);
  Excel.Quit;
  Excel := unassigned;
end;
Mein Problem ist nun, wie schreibe ich eine sogenannte Array-Formel in eine Excel-Zelle. Das sind diese Formeltypen, die durch Ctrl-Shift-Enter abgeschlossen werden müssen und dann durch geschweifte Klammern dargestellt werden.
Ich habe eine solche Formel mal aus einer meiner Tabellen in eine Variable rauskopiert und in einem Edit-Feld anzeigen lassen, aber da fehlen die geschweiften Klammern. Ich habe es sogar schon versucht, diese geschweiften Klammern einfach mit in die Zielzelle reinzukopieren, aber das funktioniert genausowenig.
Hat da jemand eine Idee dazu?

Mein zweites Problem sind Tabellenverknüpfungen, also Zellbezüge, welche auf eine andere Tabelle zeigen, die zum Zeitpunkt der Tabellenbearbeitung nicht existieren. Beim Ausführen des Programmes kommt die Abfrage von Excel nach dem Verzeichnis, in dem sich die Tabelle befindet, die in der Verknüpfung benannt wurde.
Gibt es eine Möglichkeit, diese Art der Abfrage zu deaktivieren und wenn ja, wie?

Für Hilfe wäre ich wirklich sehr dankbar.

Bingo

Chemiker 28. Nov 2008 00:11

Re: [OLE-Fernsteue]Formeln in Exceltabellen eintragen - Prob
 
Hallo BingoBongo,

Delphi-Quellcode:
Excel.ActiveCell.formula:= '=sum(c5:d8)';
Versuche mal das Gleichzeitzeichen innerhalb der Formel wegzulassen:

Delphi-Quellcode:
Excel.ActiveCell.formula:= 'sum(c5:d8)';
Wenn Du die Suche in der DP benutzt, solltest Du unter den Begriffen: VarArrayCreate suchen um ein Array für Excel zu erstellen.

Als weiteres hilft es sich einen Macro in Excel aufzuzeichen und diesen unter Delphi nachzustellen (als erste Näherung).

Alle Deine Anforderungen können mit Delphi umgesetzt werden.

Das sind erst mal Informationen zum Weitermachen, morgen mehr.

Bis bald Chemiker

BingoBongo 28. Nov 2008 02:24

Re: [OLE-Fernsteue]Formeln in Exceltabellen eintragen - Prob
 
Erstmal danke für den ersten Tip. Ich habe aber an sich kein Problem mit dem Gleichheitszeichen. Das funktioniert schon so wie es soll. Dieses Codebeispiel sollte nur als Anschauung dienen, da es ja mehrere Möglichkeiten gibt, Excel anzusteuern.
Aber dein Rat, nach VarArrayCreate zu suchen, hat mich drauf gebracht.
Die Ergänzung zu
Delphi-Quellcode:
 Excel.ActiveCell.formula
heißt scheinbar für diese Art von Arrayfunktionen
Delphi-Quellcode:
 Excel.ActiveCell.formulaArray
Das werde ich aber aus Müdigkeitsgründen jetzt sofort nicht ausprobieren, sondern wohl erst heute Abend.
Hast du vielleicht auch einen Tipp in Hinblick auf mein Zellbezugsproblem?

Bingo

Reinhardtinho 28. Nov 2008 07:24

Re: [OLE-Fernsteue]Formeln in Exceltabellen eintragen - Prob
 
Zitat:

Zitat von BingoBongo
Gibt es eine Möglichkeit, diese Art der Abfrage zu deaktivieren und wenn ja, wie?

Delphi-Quellcode:
DisplayAlerts[LCID] := False

BingoBongo 29. Nov 2008 09:50

Re: [OLE-Fernsteue]Formeln in Exceltabellen eintragen - Prob
 
@Chemiker: die FormulaArray - Variante funktioniert, also vielen Dank für den Tip.

@Reinhardtinho:
Ich bin mir nicht sicher, aber ist die Zuweisung des Inhalts der LCID Variable nicht von dieser Excel-Typbibliothek abhängig? Soweit ich das bisher begriffen habe, wird bei mir diese Variable nicht deklariert, da ich die Ansteuerung ohne Verwendung der Typbibliothek durchführe.
Wenn es nur mit dieser Zuweisung funktioniert, würde es denn dann reichen, diese Variable einfach zu deklarieren und zuzuweisen, oder klappt das dann nicht?

Bingo

Reinhardtinho 29. Nov 2008 10:58

Re: [OLE-Fernsteue]Formeln in Exceltabellen eintragen - Prob
 
Es müsste auch mit LCID = 0 gehen, kannst du ja mal testen.

BingoBongo 29. Nov 2008 12:07

Re: [OLE-Fernsteue]Formeln in Exceltabellen eintragen - Prob
 
Scheint leider nicht so zu gehen. Hier mal der dazugehörige Quelltext, mit dem ich das ausprobiert habe.

Delphi-Quellcode:
procedure TForm1.Button13Click(Sender: TObject);
//zum testen diverser Funktionen
var
  Excel: Variant;
  row, column: Integer;
  kopie, kopie2: string;
  pfad: string;
  i: integer;
  LCID: integer;
begin
  LCID:= 0;
  Excel := CreateOleObject('Excel.Application');
  pfad:= form1.Edit4.Text;
  Excel.Workbooks.Open (pfad);
  Excel.DisplayAlerts[LCID] := False;
  Excel.Visible := true;
  Excel.Sheets[2].select;
//  Excel.Sheets[2].unprotect; Excel.Sheets[2].Password:= '13983816';
//  Excel.Sheets[2].range['b3'].select;
//  Excel.ActiveCell.FormulaArray:= '=f1+f2';

end;
Das ist wie gesagt der QT, mit dem ich solche Sachen ausprobiere. Kannst du da erkennen, wie ich es verändern müßte, damit es funktioniert?
Das komische an der Sache ist nun, beim normalen Laufenlassen der Anwendung kommt nach dem Wegklicken der Verknüpfungsaktualisierungsmeldung die Fehlermeldung "Unzulässige Parameteranzahl".

Weißt du da weiter?

Bingo

Chemiker 29. Nov 2008 12:47

Re: [OLE-Fernsteue]Formeln in Exceltabellen eintragen - Prob
 
Hallo BingoBongo,


Delphi-Quellcode:
Excel.DisplayAlerts := False;
  Excel.ActiveWorkBook.SaveAs(PathDateiName);
  FExcel.DisplayAlerts := False;
  Excel.ActiveWorkBook.Close;
  if (not varIsEmpty(Excel)) then
  begin
    Excel.Quit;
  end;
  Excel:= Unassigned;
Damit wir ohne nachfragen die Datei abgespeichert. Und die Excel-Instanz beendet.


Bis bald Chemiker

BingoBongo 29. Nov 2008 13:05

Re: [OLE-Fernsteue]Formeln in Exceltabellen eintragen - Prob
 
Ohne das [LCID] als Parameter hat es auch nicht geklappt. Die Aktualisierungsfrage kommt noch immer, leider.

Bingo

Chemiker 29. Nov 2008 13:33

Re: [OLE-Fernsteue]Formeln in Exceltabellen eintragen - Prob
 
Hallo BingoBongo,

starte das Programm mal ohne Debugger, ob dann immer noch die Meldung kommt. Eigentlich sollte das abspeichern so Funktionieren.

Bis bald Chemiker


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:36 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz