METHOD IKS_Excel_Class2:Open_ExcelFile( cExcelDateiName, lFehlerMeldungAusgeben) IF VALTYPE( lFehlerMeldungAusgeben ) <> "L" lFehlerMeldungAusgeben = .T. ENDIF // Gibt's die Datei überhaupt? IF .NOT. FILE( cExcelDateiName ) IF lFehlerMeldungAusgeben Meldung( { "Datei existiert nicht: " + cExcelDateiName },,"Fehler ::Open_ExcelFile",,,, MSG_ST_S) ENDIF RETURN(.F.) ENDIF // Excel starten ::IKS_Excel_init() // 20.01.2018 ::oExcel := CreateObject( "Excel.Application" ) IF Empty( ::oExcel ) IF lFehlerMeldungAusgeben Meldung( { "Excel ist nicht (korrekt) installiert!" },,"Fehler ::Open_ExcelFile",,,, MSG_ST_S) ENDIF RETURN(.F.) ENDIF // Excel konfigurieren ::oExcel:DisplayAlerts := .F. // Keine Ausgabe von Fehlermeldungen ::oExcel:visible := .F. // soll im Hintergrund erfolgen ::oBook := ::oExcel:workbooks:Open( cExcelDateiName ) IF Empty( ::oBook ) IF lFehlerMeldungAusgeben Meldung( { "Excel-Datei konnte nicht geöffnet werden:",; cExcelDateiName },,"Fehler ::Open_ExcelFile",,,, MSG_ST_S) ENDIF ::oExcel:Quit() ::oExcel:Destroy() RETURN(.F.) ENDIF ::oSheet := ::oBook:worksheets( 1 ) // setzt die 1. Tabelle aktiv IF Empty( ::oSheet ) IF lFehlerMeldungAusgeben Meldung( { "Arbeitsblatt konnte nicht geöffnet werden:",; cExcelDateiName,; "Arbeitsblatt: 1" },,"Fehler ::Open_ExcelFile",,,, MSG_ST_S) ENDIF ::oExcel:Quit() ::oExcel:Destroy() RETURN(.F.) ENDIF ::cExcelFileName = cExcelDateiName RETURN( .T. ) ***************************************************************** METHOD IKS_Excel_Class2:IKS_Excel_init() ::oExcel := NIL ::oBook := NIL ::oSheet := NIL ::nExp_Zeile := 1 ::nExp_Spalte := 1 ::nExcelVersion := 0 ::aMEMO_Spalten := {} // Hintergrundfarben für 1. Zeile (manche funktionieren in älteren Excel-Version nicht! ::nColor_MEMO := 32 ::nColor_Text := 33 ::nColor_Datum := 44 ::nColor_Zahl := 19 ::nColor_Other := 3 // (1) schwarz, (2) weiß, (3) rot, (4) hellgrün, (5) blau, (6) gelb // (7) lila, 10: grün, (15) grau, 19: Blassgelb, 20: blassblau, 32: dunkelblau, 33: Hellblau, 34: BlassHellblau, 44: Ockerorange, (50) Dunkelgrün RETURN self ************************************************************* METHOD IKS_Excel_Class2:Get_ExcelStdExtension() LOCAL cRet:=".xls", oTmpExcel // Create the "Excel.Application" object oTmpExcel := CreateObject("Excel.Application") IF .NOT. Empty( oTmpExcel ) IF VAL( oTmpExcel:Version ) >= 12 cRet = ".xlsx" ENDIF oTmpExcel:Quit() oTmpExcel:destroy() ENDIF ::cStd_Excel_Extension := cRet RETURN( cRet ) ************************************************************* METHOD IKS_Excel_Class2:Destroy_ExcelObject( lSaveFile, lStandardformat, lDestroyAndClose ) LOCAL cPfad:="", h:=0, cStdExcelExtension:=::Get_ExcelStdExtension() // Excel-Dateiname muss in ::cExcelFileName enthalten (kann ohne Extension drin stehen! IF VALTYPE( lStandardformat ) = "L" .AND. lStandardformat ::Standardformatierung() ENDIF IF VALTYPE( lSaveFile ) = "L" .AND. lSaveFile .AND. VALTYPE( ::cExcelFileName ) = "C" IF VALTYPE( ::oBook ) = "O" IF FILE( ALLTRIM( ::cExcelFileName ) ) // automatisch überschreiben! IF .NOT. IKS_FileDelete( ALLTRIM( ::cExcelFileName ) ) Meldung({"Datei konnte nicht ersetzt werden:",; ALLTRIM( ::cExcelFileName ),; "Excel wird mit der erzeugten Tabelle geöffnet!"},,,,,, MSG_AZ_S) ::oExcel:visible := .T. ::oExcel:DisplayAlerts := .T. ::cExcelFileName = "" RETURN( self ) ENDIF ENDIF IF UPPER( cStdExcelExtension ) == ".XLS" ::oBook:Saveas( ::cExcelFileName, xlWorkbookNormal ) // <- erzeugt IMMER eine .xls ELSE ::oBook:Saveas( ::cExcelFileName, xlWorkbookDefault ) // <- erzeugt eine .xlsx bei Office 2007 ff. ENDIF // Extension ggf. automatisch geändert? h = RAT( "\", ::cExcelFileName ) IF h <> 0 cPfad = SUBSTR( cPfad + ::cExcelFileName, 1, h ) ::cExcelFileName = cPfad + ::oBook:name ELSE ::cExcelFileName = ::oBook:name ENDIF ENDIF IF VALTYPE( ::oSheet ) = "O" ::oSheet:Destroy() ENDIF IF VALTYPE( ::oBook ) = "O" ::oBook:Destroy() ENDIF IF VALTYPE( ::oExcel ) = "O" ::oExcel:Quit() ::oExcel:Destroy() ENDIF ELSE IF VALTYPE( lDestroyAndClose ) = "L" .AND. lDestroyAndClose // Tabelle muss ggf. vorher gespeichert worden sein! IF VALTYPE( ::oSheet ) = "O" ::oSheet:Destroy() ENDIF IF VALTYPE( ::oBook ) = "O" ::oBook:Destroy() ENDIF IF VALTYPE( ::oExcel ) = "O" ::oExcel:Quit() ::oExcel:Destroy() ENDIF ::cExcelFileName = "" ::oExcel = NIL // eingefügt 01.11.2019 ELSE // nicht speichern UND nicht einfach nur zerstören: dann Excel anzeigen! IF VALTYPE( ::oExcel ) = "O" ::oExcel:visible := .T. ENDIF ENDIF ENDIF RETURN( .T. ) *****************************************************************