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: 3535
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.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: ExcelFunktionen COMatePlus

Beitrag von Falko »

MightyMAC hat geschrieben:Ja, genau.
Das ist noch nicht korrekt. Hierbei wird mit dieser VBA-Funktion wohl die Kopie aus einer tabelle in eine neue
Arbeitsmappe erzeugt, wie ich testen konnte. Vielleicht hat Kiffi noch eine Idee.

Schade, das man in Comate nicht die Zeile komplett mit Invoke übernehmen kann.
Excel VBA hat geschrieben:Worksheets("Sheet1").Copy After:=Worksheets("Sheet3")

Code: Alles auswählen

Procedure XLSFunc_CopyWorksheetAfter(ExcelObject.COMateObject, FirstSheet.s="",SecondSheet.s="");Copy Sheet_One after Sheet_Two
  ExcelObject\Setproperty("After:=Worksheets('"+SecondSheet+"')")
  ExcelObject\Invoke("Worksheets('"+FirstSheet+"')\Copy")
EndProcedure
Gruß,
Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Falko
Admin
Beiträge: 3535
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.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: ExcelFunktionen COMatePlus

Beitrag von Falko »

Ich sehe, das du einige Funktionen benutzt, die ich nicht in meiner Funktionslibrary
habe. Das ist hier XLSFunc_SetExcelVisible(ES,#False).
Nachdem ich deinen Source bei zu meinen Funktionen angepasst habe. Funktioniert
er so wie es fast soll. Nur wenn man von Excel schon drei Tabellen (Tabelle1, Tabelle2 und Tabelle3)
voreingestellt bekommt, wird die erste Tabelle in Jan umbenannt, und die beiden anderen Tabellen Feb u. Mrz
natürlich hinter der letzten Tabelle3 angehängt.

Code: Alles auswählen

XIncludeFile "ExcelFunktion.pbi"
Define WorkDir.s, DATEI.s,ES.COMateObject

WorkDir="F:\Purebasic\X86\Falko\ExcelProgramm\"

DATEI=WorkDir+"Test.xls"
ES=XLSFunc_CreateExcelFile(WorkDir)
Debug COMate_GetLastErrorDescription() 
XLSFunc_ExcelVisible(ES,#False)
Debug COMate_GetLastErrorDescription() 
XLSFunc_PageSetup(ES,#xlLandscape,1,1,2.5,1)
Debug COMate_GetLastErrorDescription() 
XLSFunc_RenameActiveSheet(ES,"Jan")
Debug COMate_GetLastErrorDescription() 
XLSFunc_AddWorksheetAfter(ES,"Feb")
Debug COMate_GetLastErrorDescription() 
XLSFunc_AddWorksheetAfter(ES,"Mrz")
Debug COMate_GetLastErrorDescription() 
XLSFunc_SaveAsWorkbook(ES,DATEI)
Debug COMate_GetLastErrorDescription() 
XLSFunc_ExcelVisible(ES,#True)
Debug COMate_GetLastErrorDescription() 
XLSFunc_CloseWorkbook(ES)
Debug COMate_GetLastErrorDescription() 

Gruß,
Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
MightyMAC
Beiträge: 55
Registriert: 07.01.2007 18:11
Wohnort: Duisburg
Kontaktdaten:

Re: ExcelFunktionen COMatePlus

Beitrag von MightyMAC »

Falko hat geschrieben:Hierbei wird mit dieser VBA-Funktion wohl die Kopie aus einer tabelle in eine neue
Arbeitsmappe erzeugt, wie ich testen konnte.
Laut MSDN kopiert Excel ein Sheet in ein neues Workbook, wenn es kein "After" oder "Before" Schlüsselwort erkennt. Ich vermute das dies der Fall ist, weiß allerdings keine Lösung.
Windows XP 32-bit SP3, Windows 7 64-bit, PB 4.60, PB 5.11, PB 5.20
Benutzeravatar
Falko
Admin
Beiträge: 3535
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.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: ExcelFunktionen COMatePlus

Beitrag von Falko »

Stimmt, das hatte ich dort auch gelesen.
Ich habe mal versucht das in Excel direkt über VBA zu probieren. Da wird tatsächlich dann die Tabelle1 hinter der Tabelle3 als Tabelle1(1) kopiert.
Da ich leider noch keine passende Lösung mit COMate herausgefunden habe, habe ich bezüglich Excel ....\Copy After:=... einen Thread im englischen
Forum unter "Coding Questions" eröffnet und hoffe das dort srod vielleicht eine passende Lösung mit COMate zeigen kann.

Das After:= wird so in meinem obigen Beispiel von Comate wohl nicht hinzugefügt und somit ist es nur eine einfache Copyfunktion, welche eine komplett neue Tabelle mit einem Tabellen-blatt 1 aufmacht. Vielleicht komme ich noch dahinter, wie man dieses gesplittete After:= oder Before:= mit copy anwenden kann.

Gruß,
Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Falko
Admin
Beiträge: 3535
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.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: ExcelFunktionen COMatePlus

Beitrag von Falko »

MightyMAC hat geschrieben:
Falko hat geschrieben:Hierbei wird mit dieser VBA-Funktion wohl die Kopie aus einer tabelle in eine neue
Arbeitsmappe erzeugt, wie ich testen konnte.
Laut MSDN kopiert Excel ein Sheet in ein neues Workbook, wenn es kein "After" oder "Before" Schlüsselwort erkennt. Ich vermute das dies der Fall ist, weiß allerdings keine Lösung.
Ich glaube, jetzt habe ich eine passende Lösung für Copy After und Move After gefunden :wink:
Zwar hatte ich eine Anfrage dazu ins englische Forum unter Codefragen gestellt, aber leider kam keine Resonanz.
Somit habe ich erst mal hier und da nach anderen Lösungen gesucht und ein klitzekleines Beispiel von srod gefunden.

http://www.purebasic.fr/english/viewtop ... lit=Comate

Nun habe ich es so, wie es Excel VBA auch macht hin bekommen und zwei weitere Funktionen im Anfangsthread hinzugefügt.

Folgende Funktionen habe ich ergänzt:
XLSFunc_CopyWorksheetAfter()
XLSFunc_MoveWorksheetAfter()
[Edit]
Da in VBA das Copy und Move nicht nur den Zusatz After, sondern auch Before hat, habe ich auch hierzu eine passende
Proceduren in meiner ExcelFunktions.pbi eingebaut. Ich freue mich, wenn ich hier Einigen PBler hiermit weiterhelfen konnte.

Folgende Funktionen ergänzt:
XLSFunc_CopyWorksheetBefore()
XLSFunc_MoveWorksheetBefore()
[/Edit]

Gruß,
Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
MightyMAC
Beiträge: 55
Registriert: 07.01.2007 18:11
Wohnort: Duisburg
Kontaktdaten:

Re: ExcelFunktionen COMatePlus

Beitrag von MightyMAC »

Funktioniert ganz ausgezeichnet! Danke Falko, du bist der Hammer! :D
Windows XP 32-bit SP3, Windows 7 64-bit, PB 4.60, PB 5.11, PB 5.20
Benutzeravatar
Falko
Admin
Beiträge: 3535
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.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: ExcelFunktionen COMatePlus

Beitrag von Falko »

@MightyMAC
Das freut mich :wink:
ThoPie hat geschrieben:Hallo Leute,
ich möchte gern per XLSFunc_AddWorksheetAfter Arbeitsblätter für alle 12 Monate anlegen. Mein Quellcode-Fragment sieht wie folgt aus:

Code: Alles auswählen

DATEI=WorkDir+"Test.xls"
ES=XLSFunc_CreateExcelFile(WorkDir)
XLSFunc_SetExcelVisible(ES,#False)
XLSFunc_PageSetup(ES,#xlLandscape,1,1,2.5,1)
XLSFunc_RenameActiveSheet(ES,"Jan")
XLSFunc_AddWorksheetAfter(ES,"Feb")
XLSFunc_AddWorksheetAfter(ES,"Mrz")
XLSFunc_SaveAsWorkbook(ES,DATEI)
XLSFunc_SetExcelVisible(ES,#True)
XLSFunc_CloseWorkbook(ES)
XLSFunc_CloseExcel(ES)
Beim Erstellen der Februar-Tabelle kommt immer ein Adressfehler in der Zeile
NewSheet\SetProperty("Name='"+NewSheetName+"'")
der Prozedur XLSFunc_AddWorksheetAfter.
Kann mit bitte mal jemand sagen, was ich falsch mache.
Danke schön.
Ich habe zu XLSFunc_AddWorksheetAfter
eine weitere Procedure XLSFunc_AddWorksheetAfterSheet(Tabellennummer.l,NeueTabelle.s)
geschrieben, mit der Du gezielt eine neue Tabelle nach der anderen hintereinander einfügen kannst.
Sorry @Kiffi, das ich deinen Code dafür benutzt und umgeändert habe :roll:


Siehe ExcelFunctions.pbi am Threadanfang.

Dazu habe ich dein Beispiel hierzu angepasst:

Code: Alles auswählen

XIncludeFile "ExcelFunktion.pbi"
Define WorkDir.s, DATEI.s,ES.COMateObject

WorkDir="F:\Purebasic\X86\Falko\ExcelProgramm\"; hier den Verzeichnispfad korrigieren

DATEI=WorkDir+"Test.xls"
ES=XLSFunc_CreateExcelFile(WorkDir)
XLSFunc_ExcelVisible(ES,#False)
XLSFunc_PageSetup(ES,#xlLandscape,1,1,2.5,1)
XLSFunc_RenameActiveSheet(ES,"Jan")
XLSFunc_AddWorksheetAfterSheet(ES,1,"Feb")
XLSFunc_AddWorksheetAfterSheet(ES,2,"Mrz")
XLSFunc_SaveAsWorkbook(ES,DATEI)
XLSFunc_ExcelVisible(ES,#True)
XLSFunc_CloseWorkbook(ES)
Ich hoffe, Du kannst es gebrauchen :wink:

Gruß,
Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Falko
Admin
Beiträge: 3535
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.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: ExcelFunktionen COMatePlus

Beitrag von Falko »

Nun hier noch eine weitere Funktion um wahlweise Tabellen zu löschen.
Manchmal ist es sehr praktisch leere Tabellenblätter zu löschen.
Da wir sie nun auf einfache Weise hinzufügen können, ob am Ende oder dazwischen,
ist es nun auch möglich diese oder andere wiederum zu löschen.

Folgende Funktion ist nun in der ExcelFunktion.pbi enthalten.
XLSFunc_DeleteWorksheet()
Gruß,
Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
ThoPie
Beiträge: 130
Registriert: 19.05.2006 15:18
Kontaktdaten:

Re: ExcelFunktionen COMatePlus

Beitrag von ThoPie »

Hallo Falko,
vielen Dank für deine Ergänzungen. Die funktionieren super. :allright:
Gibt es eigentlich schon eine Funktion, mit der die Textfarbe einer Zelle eines Bereiches geändert werden kann?
Also so was wie XLSFunc_SetTextColor(ExcelObject.COMateObject, Range.s, cRed.l, cGreen.l, cBlue.l).

Viele Grüße
ThoPie
Bild
Benutzeravatar
Falko
Admin
Beiträge: 3535
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.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: ExcelFunktionen COMatePlus

Beitrag von Falko »

ThoPie hat geschrieben:Hallo Falko,
vielen Dank für deine Ergänzungen. Die funktionieren super. :allright:
Gibt es eigentlich schon eine Funktion, mit der die Textfarbe einer Zelle eines Bereiches geändert werden kann?
Also so was wie XLSFunc_SetTextColor(ExcelObject.COMateObject, Range.s, cRed.l, cGreen.l, cBlue.l).

Viele Grüße
ThoPie
Die gibt es noch nicht, aber ich habe sie jetzt aus einer vorherigen Funktion etwas angepasst und
nun gibt es sie :lol:

Die Funktion in der ExcelFunktion.pbi heißt:
Procedure XLSFunc_SetFontColor(ExcelObject.COMateObject, Range.s, cRed.l, cGreen.l, cBlue.l); Set FontColor
Das dazugehörige Beispiel habe ich auch leicht modifiziert.

Gruß,
Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Antworten