ExcelFunktionen COMatePlus

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

ExcelFunktionen COMatePlus

Beitrag von Falko »

@all

ExcelFunctions made COMatePLUS plus Testprogramm

Ich habe, soweit wie ich das mit COMate verwirklichen konnte, die
alten Disphelper-Excel-Funktionen auf COMate konvertiert.

Hierzu benötigt ihr die ComateLibrary von srod. COMatePlus 1.2 PB 4.50

Für PB5.40LTS wurde die COMatePlus-LIB von ts-soft nochmal angepasst, darum hier aktuelle Version COMatePlus 1.2 für PB5.40LTS

Ich habe nun auf einen Download auf meine HP umstellen müssen, da der Source durch einige Änderungen und Erweiterungen
zu lang für diesen Thread wurde und der Platz hier nicht mehr ausreicht.

Zusätzlich habe, ich soweit ich nichts übersehen habe, überall Debugs für die bisherigen Funktionen eingebaut um noch
vorhandene Fehler sehen zu können. Es sind also noch einige vorhanden :roll:


Nachfolgend sind PB-Codes angepasst auf PB 5.41LTS (pb, als auch pbi).

ExcelConstantsPLUS.pbi

ExcelFunktion.pbi

Test_Excel_Funktion.pb

Test_Paste_Image_Funktion.pb

Folgende ExcelConstants-Version ist eine ältere Version (älter PB 5.40LTS) und habe ich hier beigefügt.

ExcelConstants.pbi

Letzte, aktuelle Änderung 13.12.2015. Getestet mit PB 5.41LTS-Beta

Ich wünsche allen trotzdem viel Spaß damit.

Alle Links nochmal auf meine neue Webseite angepasst. 18.05.2022

Gruß Falko
Zuletzt geändert von Falko am 12.04.2009 21:59, insgesamt 11-mal geändert.
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Beitrag von Falko »

Fehler Linien_An_Aus() , Nun LinienEinAus() behoben.

[Edit]
Weitere Funktionen an Comate angepasst:

InsertCell()
DeleteCell()

Jetzt muss ich nur noch sehen, wie ich :

RechtsMarkieren()

und

AddWorksheetAfter()

an Comate korrekt angepasst kriege :D

[/Edit]

Gruß, Falko
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Beitrag von Falko »

SetFont() ist nun um weitere Formatierungseinstellungen ergänzt

Der Text in der Zelle lässt sich nun auf Fett,horizontal zentriert, links und rechtsbündig, sowie
auf vertikal hoch, mittig und tief setzen.

Standardfonteinstellung ohne weitere Parameter
ist SetFont(ExcelObject)

Was ich bis jetzt in COMate noch nicht hinbekommen habe, sind die Funktionen:

AddWorksheetAfter() und RechtsMarkieren(), wobei ich letzteres
wohl rausnehmen werde.

Vielleicht habt ihr eine passende Lösung für mich, die ich einpflegen kann.


Mit freundlichen Grüßen,
Falko
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Beitrag von Falko »

Ich habe nun noch eine weitere Funktion: Procedure
SetRGBtoColorindex() hinzugefügt. Hiermit kann man nun seine eigenen Farben anstelle der 56 Grundfarben festlegen und überall, wo Colorindex benutzt wird, nutzen.

Eine interessante Seite zu den Grundfarben dazu findet ihr hier:
http://www.mvps.org/dmcritchie/excel/colors.htm


Gruß Falko
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Beitrag von Falko »

AddWorksheetAfter() wurde nun, dank Kiffis Unterstützung und Beispielsource nun neu eingefügt.
Hiermit ist es nun möglich, gleich beim Aufruf den Tabellennamen mit anzugeben.

Vielen Dank Kiffi.


Grüße, Falko
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Beitrag von Falko »

So, ich habe nun auch das MarkCellsRight(..) bereinigen können, und nun
läuft alles so wie beim Disphelper, nun auch mit Comate.

Grüße, Falko
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

ExcelFunktionen COMate

Beitrag von jear »

@Falko

Versuche mich mal gerade darin, mit Hilfe der ExcelFunktionen eine bestehende Tabelle zu öffnen und auszulesen.

Code: Alles auswählen

XIncludeFile "ExcelFunktionen.pbi"

If FileSize("Test.xls") < 0 : End : EndIf

ExcelObject = OpenExcelFile("Test.xls")

If ExcelObject
 
  ExcelVisible(ExcelObject,#True)
  
  Zellen.s = "Zelleninhalte:" + #lf$
  For ix.i = 1 To 5
    Zellen + Str(ix) + ": " + ReadCellS(ExcelObject, ix, 1) + #lf$
  Next
  
  MessageRequester("Test Excel", Zellen , #MB_OK)
  
EndIf

CloseExcelAll(ExcelObject)
Die kleine Tabelle "Test.xls" existiert und enthält Angaben in den Zellen 1 - 5.

Trotzdem bleibt das Excel Fenster grau und es werden keine Zellinhalte ausgelesen.
Was mache ich da falsch?

Anschlussfragen:

Geht das Ganze auch mit COMatePlus von SROD?

Wie müsste der Befehl aussehen, eine bestehende Tabelle als csv-Datei zu speichern?

ActiveWorkbook.SaveAs FileName:="C:\Temp\xxxx.csv", FileFormat:=xlCSV, CreateBackup:=False, local:=True
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Re: ExcelFunktionen PureDisphelper / COMate

Beitrag von Falko »

Hallo @jear

Ich schaue mir das am Wochenende mal in Ruhe durch, da ich Spätschicht habe und leider nicht viel
Zeit entbehren kann. Wenn du die letzten Beiträge anschaust, wirst du sehen, das ich das schon komplett auf Comate umgestellt hatte. Aber das mit dem, was du beschrieben hattest, muss ich mir
am Wochenende ausarbeiten. Ich werde auf jedenfall darauf zurück kommen :allright:

Gruß Falko
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Re: ExcelFunktionen PureDisphelper / COMate

Beitrag von jear »

Aus meinen Bemühungen ist der folgende Code rausgekommen.

Der speichert eine Excel-Tabelle aus einer Excel-Datei in eines der gängigen Formate.
Es stört nur noch der IMHO sinnlose Dialog mit Excel nach einem "Speichern als", wenn man die erzeugte Datei verlassen will.
Man kann zwar den Dialog unterdrücken (siehe Code) , zurück bleibt aber dann eine Excel-Leiche im Speicher. :(

Ich nutze Excel 2002. Ist das bei neueren Versionen immer noch so?

Code: Alles auswählen

;/ jear * Nov 2009 * ExcelSheet SaveAs

IncludePath "..\"
XIncludeFile "COMatePLUS.pbi"

;/ Excel FileFormat Constants
#xlNormal = -4143
#xlSYLK = 2
#xlCSV = 6
#xlCSVMac = 22
#xlCSVMSDOS = 24
#xlCSVWindows = 23
#xlText = -4158
#xlTextMac = 19
#xlTextMSDOS = 21

Procedure.s ExcelSheetSaveAs(Origin.s, Copy.s, FileFormat.l=#xlNormal, SheetNumber.l=1)
  Protected ApplObj.COMateObject, ExcelBook.COMateObject, ExcelSheet.COMateObject
  Protected result.s, args.s 
  If FileSize(Copy) > 0 : DeleteFile(Copy) : Delay(50) : EndIf
  ApplObj = COMate_CreateObject("Excel.Application")
  If COMate_GetLastErrorCode() = #S_OK
    ApplObj\SetProperty("Visible = #False")
    ApplObj\SetProperty("DisplayAlerts = #False") 
    ExcelBook = ApplObj\GetObjectProperty("Workbooks\Open('" + Origin + "')") 
    If COMate_GetLastErrorCode() = #S_OK
      ExcelBook\Invoke("Activate()") 
      ExcelSheet = ApplObj\GetObjectProperty("Sheets(" + Str(SheetNumber) + ")")
      If COMate_GetLastErrorCode() = #S_OK
        ExcelSheet\Invoke("Activate()") 
        args = "SaveAs('" + Copy + "'," + Str(FileFormat) + ")" 
        ExcelBook\Invoke(args)
        If COMate_GetLastErrorCode() = #S_OK
          ApplObj\SetProperty("DisplayAlerts = #True") 
          ;/ Es erfolgt die von Excel bekannte überflüssige Abfrage beim "Speichern als"
          
          ;/ Wie verhindert man diese überflüssige Abfrage ???
          ;/ Der nachfolgende Befehl unterdrückt zwar die Abfrage, es bleibt aber der Excel-Prozess
          ;/ als Leiche zurück, da er offenbar auf die Antwort wartet!
          ;ExcelBook\SetProperty("Saved = #True")
          
          ;/ Wickelt man den Dialog aber ab (empfehle "Nein"), bendet Excel normal.
          
          MessageRequester("ExcelSheetSaveAs", "SavedAs " + Copy, #MB_OK|#MB_ICONWARNING)
        Else
          result = "ERROR: " + COMate_GetLastErrorDescription() + " (" + args + ")"
        EndIf 
        ExcelSheet\Invoke("Close")
        ExcelSheet\Release()
      Else 
        result = "ERROR: Sheet Nr. " + Str(SheetNumber) + " does not exist"
      EndIf
      ExcelBook\Release()
    Else
      result = "ERROR: Cannot open EXCEL book" + Origin 
    EndIf 
    ApplObj\Invoke("Quit()")
    ApplObj\Release()  
  Else
    result = "ERROR: Cannot open EXCEL application" 
  EndIf  
  ProcedureReturn result
EndProcedure

;/Test

SetCurrentDirectory(GetPathPart(ProgramFilename()))
Define.s home = GetCurrentDirectory(), result

;result = ExcelSheetSaveAs(home + "Test.xls", home + "Test2.xls", #xlNormal, 1)
;result = ExcelSheetSaveAs(home + "Test.xls", home + "Test.slk", #xlSYLK, 1)
result = ExcelSheetSaveAs(home + "Test.xls", home + "Test.csv", #xlCSV, 1)

If result : MessageRequester("ExcelSheetSaveAs", result, #MB_OK|#MB_ICONWARNING) : EndIf

End
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Re: ExcelFunktionen PureDisphelper / COMate

Beitrag von Falko »

Hi jear, dann bist du ja doch noch soweit gekommen.

ich erhalte bei diesem Source leider die folgende Fehlermeldung:

---------------------------
ExcelSheetSaveAs
---------------------------
ERROR: Cannot open EXCEL book F:\PureBasic4_31_X86\Falko\ExcelProgramm\ExcelFunktionslibrary\Test.xls
---------------------------
OK
---------------------------


Mit der Vorherigen, wurde zwar excel2007 geöffnet, aber ein Fehler in der Zusammensetzung vorhanden.
Diese hatte ich mir angeschaut, aber ich war selbst auch nicht weiter gekommen.

Damit ich das immer aus einem bestimmten Verzeichnis mit comateComPlus verwenden kann, habe ich bei mir
den includepath wie folgt so geschrieben und das comateCom auch dort eingefügt.

Code: Alles auswählen

IncludePath #PB_Compiler_Home+"COMatePlus" 
...

Gruß Falko
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Antworten