Autor Beitrag
Webo
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 577
Erhaltene Danke: 14

Win 7, Debian
C# (Visual Studio 2013), PHP, C, C++ (Eclipse, KDevelop)
BeitragVerfasst: Do 11.02.10 20:13 
Wie im Titel schon zu lesen ist, suche ich eine Möglichkeit um eine Excel-Datei zu öffnen, welche mit einem Kennwort in Excel selbst versehen ist. Dabei soll die Datei natürlich nicht nur geöffnet werden, sondern auch entsperrt werden, also soll mein Programm das Kennwort eingeben.
Bei meinen Überlegungen bin ich auf 2 Möglichkeiten gekommen:
  1. Excel per Parameter zu starten. Die Datei selbst ist ja nicht das Problem, aber dann das Kennwort zu übergeben (bin durch Google aber auch nicht schlauer geworden, ob das so geht)
  2. Excel fernsteuern per OLE (?) Ob und wie das geht, ein großes :?:


Webo

_________________
Man kann nur das aus dem Ärmel schütteln, was man auch vorher reingesteckt hat.
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 12.02.10 09:14 
user profile iconWebo hat folgendes geschrieben Zum zitierten Posting springen:
Excel per Parameter zu starten. Die Datei selbst ist ja nicht das Problem, aber dann das Kennwort zu übergeben (bin durch Google aber auch nicht schlauer geworden, ob das so geht)


Ich kenn mich mit Excel in der Hinsicht garnicht aus, aber geht da nicht ein Fenster auf, wo du das Kennwort eintippen sollst? Das könnte man evtl ansprechen wenns nicht anders geht.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Webo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 577
Erhaltene Danke: 14

Win 7, Debian
C# (Visual Studio 2013), PHP, C, C++ (Eclipse, KDevelop)
BeitragVerfasst: Fr 12.02.10 18:30 
Ich hab es jetzt (vorerst) hinbekommen, denn ich weiß noch nicht, ob das so funktioniert, wie mein Vater sich das vorgestellt hat.

Hier meine Lösung:

  • Erstmal die Excel-TypenBiblios installiert *g*
  • Folgende 3 Komponenten auf die Form gezogen: TExcelApplication, TExcelWorkbook, TExcelWorksheet
  • Folgenden Code zum "Verbinden" genutzt:
    ausblenden Delphi-Quelltext
    1:
    2:
    3:
    4:
    5:
    6:
    7:
    8:
    9:
    10:
    11:
    12:
    13:
    14:
    15:
    16:
    17:
    18:
    19:
    20:
    21:
    22:
    var flcid:Cardinal;
        _bool,_password:olevariant;
        Filename: OleVariant;

    begin
        Filename := 'E:\Test.xls';

        flcid:=GetUserDefaultLCID;
      try
        ExcelApplication1.Connect;
        ExcelApplication1.Visible[flcid]:=true;
        ExcelApplication1.UserControl:=true;
        ExcelApplication1.Application.Workbooks.Open(Filename, EmptyParam, EmptyParam,
                                    EmptyParam, EmptyParam, EmptyParam,
                                    EmptyParam, EmptyParam,EmptyParam,
                                    EmptyParam,EmptyParam,EmptyParam,
                                    EmptyParam,EmptyParam,EmptyParam, 
                                    fLCID);
        //Warum hier so viele Parameter benötigt werden, keine Ahnung, hab dieses Beispiel mit den leeren Parametern irgendwo gefunden

        ExcelWorkbook1.ConnectTo(ExcelApplication1.ActiveWorkbook);
        ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Sheets.Item[1as ExcelWorkSheet);

  • Und zum Aufheben des Kennworts folgenden Code:
    ausblenden Delphi-Quelltext
    1:
    2:
    3:
    4:
    5:
      _bool:=true;
      _password:='Passwort';
        
      ExcelWorksheet1.unProtect(_password); 
      ExcelWorkbook1.Unprotect(_password);

  • Und falls man das Kennwort wieder setzen will:
    ausblenden Delphi-Quelltext
    1:
    2:
      ExcelWorksheet1.Protect(_password,_bool,_bool,_bool);
      ExcelWorkbook1.Protect(_password,_bool,_bool);

  • Anschließend müsste man Excel noch wieder schließen, was ich aber in meinem Beispiel nicht brauche / nicht gewollt ist
    ausblenden Delphi-Quelltext
    1:
    2:
    3:
      ExcelWorksheet1.Disconnect;
      ExcelWorkbook1.Disconnect;
      ExcelApplication1.Disconnect;


_________________
Man kann nur das aus dem Ärmel schütteln, was man auch vorher reingesteckt hat.