AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Excel Automation

Ein Thema von Cogito · begonnen am 13. Dez 2011 · letzter Beitrag vom 15. Dez 2011
Antwort Antwort
Seite 2 von 2     12   
Cogito

Registriert seit: 12. Jun 2008
280 Beiträge
 
#11

AW: Excel Automation

  Alt 13. Dez 2011, 16:17
Hi,

mit der Fehlermeldung ..."Operator ist auf diesen Operandentyp nicht anwendbar!" Ausserdem steht im Tutorial ExcelWorkbook1 (siehe Fettdruck), was ja wohl auch falsch ist.
Kann mir jemand weiterhelfen oder hat einer noch einen anderen Vorschlag ?
warum falsch? Was soll dann da stehen? Das Tutorial habe ich mit MSOffice 2000 geschrieben - keinen PLan ob das aktuell auch mit der 2007er oder 2010er läuft - habe ich leider nicht. Wenn Du die Komponenten hast, dann sollte es ein leichtes sein, den Fehler zu finden - habe ich nichts gegen einen Hinweis, dann würde ich das Tutorial aktualisieren...

Grüße
Ich habe ja oben die fehlerhafte Zeile und die Fehlermeldung aufgelistet. Ich benutze Delphi 2010 und auf meinem Rechner ist Office 2010 installiert.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#12

AW: Excel Automation

  Alt 13. Dez 2011, 16:18
Das ist aber eigentlich nicht so fein... falls die Excel Sheets beispielsweise in einem Verzeichnis mit ungenügenden Schreibrechten liegen, kracht's jedesmal. Gibt's denn keine Möglichkeit die Anzeige des Dialogs zu unterdrücken ? Ich lese aus den Sheets ja nur aus.
Sowohl Word als auch Excel haben eine sehr eigene Auffassung von "Änderungen" darum quitiere ich beide immer mit "nicht speichern" wenn es keine Datenänderung gibt.
Ich habe leider kein Excel zur Hand, aber es müßte einen Parameter "NoSave" oder so ähnlich geben. Schau doch mal in die VBA-Hilfe, da solltest Du eigentlich alles notwendige finden.

Gruß
K-H

Edith:
@Lemmy
Es sieht wirklich nach einem Tippfehler aus:
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var sValue, filename: String;
begin
  filename:=ExtractFilePath(ParamStr(0))+'Mappe1.xls';
  ExcelWorkbook.ConnectTo(ExcelApplication.Workbooks.Open(filename,
    emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam,
    emptyParam, emptyParam, emptyParam, emptyParam, emptyParam,
    emptyParam, flcid));
  ExcelWorksheet.ConnectTo(ExcelWorkbook1.Sheets.Item[1] as
    ExcelWorkSheet);
  sValue:=ExcelWorksheet.Range['B1','B1'].Value;
  MessageDlg(sValue, mtInformation, [mbOK], 0);
end;
Edith2:
Hier kann man sich den richtigen Paramer raussuchen:
http://www.ozgrid.com/VBA/prevent-save-prompt.htm
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 (13. Dez 2011 um 16:41 Uhr)
  Mit Zitat antworten Zitat
FrankJ28

Registriert seit: 7. Apr 2008
211 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: Excel Automation

  Alt 13. Dez 2011, 16:32
Hallo,
saveas in einem temporären Verzeichnis (User, sollte da ja Schreibrechte haben) und dann die Datei löschen.
Sobald das Sheet mehr als nur ein einfacher Datensammler ist (eingebettete Funktionen etc.), ist immer gleich eine Änderung vorhanden.
Ciao
Frank
"Sage was du tust, und tue was du sagst"
Johannes Rau
  Mit Zitat antworten Zitat
Cogito

Registriert seit: 12. Jun 2008
280 Beiträge
 
#14

AW: Excel Automation

  Alt 13. Dez 2011, 16:41
Das ist aber eigentlich nicht so fein... falls die Excel Sheets beispielsweise in einem Verzeichnis mit ungenügenden Schreibrechten liegen, kracht's jedesmal. Gibt's denn keine Möglichkeit die Anzeige des Dialogs zu unterdrücken ? Ich lese aus den Sheets ja nur aus.
Sowohl Word als auch Excel haben eine sehr eigene Auffassung von "Änderungen" darum quitiere ich beide immer mit "nicht speichern" wenn es keine Datenänderung gibt.
Ich habe leider kein Excel zur Hand, aber es müßte einen Parameter "NoSave" oder so ähnlich geben. Schau doch mal in die VBA-Hilfe, da solltest Du eigentlich alles notwendige finden.
Ja stimmt, man braucht lediglich Close(0) aufzurufen und die Zwischenfrage entfällt.
Vielen Dank !
  Mit Zitat antworten Zitat
ASM

Registriert seit: 15. Aug 2004
165 Beiträge
 
Delphi 7 Enterprise
 
#15

AW: Excel Automation

  Alt 13. Dez 2011, 17:29
Ich habe leider kein Excel zur Hand, aber es müßte einen Parameter "NoSave" oder so ähnlich geben.
Korrekt heißen die dafür benötigten, als OleVariant-Parameter zu übergebenden Konstanten:
Code:
Const
  wdDoNotSaveChanges = 0;
  wdSaveChanges = -1;
  wdPromptToSaveChanges = -2;
Sehr gut geht es aber auch so (MSExel ist die als 'Excel.Application' eröffnete OleVariant):
Code:
procedure CloseExcel(SaveChanges: Boolean=true);
begin
  if VarIsEmpty(MSExcel) = false then
  begin
    // speichert, wenn SaveChanges = TRUE;
    // speichert nicht (ohne Rückfrage), wenn SaveChanges = FALSE
    MSExcel.DisplayAlerts:= SaveChanges;
    MSExcel.quit;
    MSExcel:= Unassigned;
  end;

Geändert von ASM (13. Dez 2011 um 17:31 Uhr) Grund: Kommentare verbessert
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#16

AW: Excel Automation

  Alt 14. Dez 2011, 13:54
Hallo,

if VarIsEmpty(MSExcel) = false then nicht auf TRUE oder FALSE prüfen, dass kann zu Probleme führen.
besser:
if not (VarIsEmpty(MSExcel) then
DisplayAlerts wird auf TRUE oder FALSE gestellt, mit SaveChanges hat das nichts zu tun.

Excel schließen ohne nachfragen:
Delphi-Quellcode:
excel.ActiveWorkBook.Saved:= TRUE;
excel.Workbooks.Close;
excel.Quit;
excel:= Unassigned;
Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#17

AW: Excel Automation

  Alt 14. Dez 2011, 14:00
Hallo,

if VarIsEmpty(MSExcel) = false then nicht auf TRUE oder FALSE prüfen, dass kann zu Probleme führen.
Kannst du ein beispiel liefern wie man dieses Problem in Delphi herstellen kann.
In C/C++ ist klar. Da wird ja in jeder Bibliothek mindestens 10* TRUE und FALSE neu wenn du pech hast mit FALSE=0; TRUE=1 neu definiert.

Excel schließen ohne nachfragen:
Delphi-Quellcode:
excel.ActiveWorkBook.Saved:= TRUE;
excel.Workbooks.Close;
excel.Quit;
excel:= Unassigned;
Bis bald Chemiker
wenn man mit Variants arbeitet kann man ein Exceldatei mittels
FWorkBook.Close(SaveChanges:=False); schließen und die Rückfrage vermeiden.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#18

AW: Excel Automation

  Alt 14. Dez 2011, 22:08
Hallo Bernhard,

mach doch mal

Delphi-Quellcode:
if boolean(4) then showmessage('4 ist true');
if boolean(4)=true then showmessage(inttostr(integer(true)) ist gleich 4');
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Excel Automation

  Alt 15. Dez 2011, 09:36
Hallo,

Zitat:
Kannst du ein beispiel liefern wie man dieses Problem in Delphi herstellen kann.
In C/C++ ist klar. Da wird ja in jeder Bibliothek mindestens 10* TRUE und FALSE neu wenn du pech hast mit FALSE=0; TRUE=1 neu definiert.
http://www.delphi-treff.de/tutorials...faengerfehler/

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#20

AW: Excel Automation

  Alt 15. Dez 2011, 09:40
Hallo Bernhard,

mach doch mal

Delphi-Quellcode:
if boolean(4) then showmessage('4 ist true');
if boolean(4)=true then showmessage(inttostr(integer(true)) ist gleich 4');
Gruß
K-H
Autsch. An diese harten Casts auf ungültige Enumwerte hatte ich gar nicht mehr gedacht.
Aber wer macht auch solche fehleranfälligen Konstrukte.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:30 Uhr.
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