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.
LuZiF3R
Beiträge: 18
Registriert: 22.03.2012 16:24

Re: ExcelFunktionen COMatePlus

Beitrag von LuZiF3R »

funzt super, Danke
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 »

Das freut mich.

Gruß,
Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
LuZiF3R
Beiträge: 18
Registriert: 22.03.2012 16:24

Re: ExcelFunktionen COMatePlus

Beitrag von LuZiF3R »

hab doch nochmal nen problem, wenn ich nen zweites bild(das gleich nochmal, aber an einer anderen Position) , dann verschiebt/vergrößert er auch das erste 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 »

So, nun habe ich das so, wie es soll. Ich habe die alte Funktion so belassen und
eine neue hinzugefügt, womit nun den Bildern unterschiedliche Größen und Positionen
korrekt zugefügt werden können. Bei der vorherigen Funktion werden wohl alle Bilder
mit den gleichen Einstellungen zur Breite, Höhe und Position des letzten Bildes gleichgesetzt, was man aus den VB-Programmbeispiel nicht erkennen konnte.

Die neue Funktion heißt:

Code: Alles auswählen

#msoTrue=-1
#msoFalse=0
Procedure XLSFunc_Image(ExcelObject.COMateObject,File.s,X.l,Y.l,Width.l,Height.l,Rot.l=0,Prop=#msoTrue,Trans.f=0)
  Protected pct.COMateObject,Tran.l

  If FileSize(File)>=0
    ExcelObject\Invoke("ActiveSheet\Pictures\Insert('"+File+"')\Select")
    ExcelObject\SetProperty("Selection\ShapeRange\LockAspectRatio = "+Str(Prop));msoTrue = Proportional
    ExcelObject\SetProperty("Selection\ShapeRange\Height="+Str(Height))
    ExcelObject\SetProperty("Selection\ShapeRange\Widht="+Str(Width))
    ExcelObject\SetProperty("Selection\ShapeRange\Left="+Str(X))
    ExcelObject\SetProperty("Selection\ShapeRange\Top="+Str(Y))
    If Trans>0
      Tran=#msoTrue
    Else
      Tran=#msoFalse
    EndIf
    ExcelObject\SetProperty("Selection\ShapeRange\Fill\Visible ="+Str(Tran))
    ExcelObject\SetProperty("Selection\ShapeRange\Fill\Solid")
    ExcelObject\SetProperty("Selection\ShapeRange\Fill\Transparency ="+StrF(Trans))
    ExcelObject\SetProperty("Selection\ShapeRange\Rotation ="+Str(Rot))
  Else
    MessageRequester("Achtung","Grafik nicht gefunden")
  EndIf
EndProcedure
Und der Test dazu ist folgender:

Code: Alles auswählen

XIncludeFile "ExcelFunktion.pbi"
Define NewExcelObject,UserDesktop.s
NewExcelObject=XLSFunc_CreateExcelFile(UserDesktop+"ExcelProgramm"); Create a new Excelfile to this Path.
XLSFunc_Image(NewExcelobject,"C:\Users\Public\Pictures\Sample Pictures\Autumn Leaves.jpg",100,100,200,200,180);Bildproportionen automatisch
XLSFunc_Image(NewExcelobject,"C:\Users\Public\Pictures\Sample Pictures\Creek.jpg",500,300,10,150,90,#msoFalse,0.75);Bildproportionen manuell
Debug COMate_GetLastErrorDescription() 
XLSFunc_ExcelVisible(NewExcelObject,#True); To see Excel, behind close Workbook
MessageRequester("Warnung","Excel wird bei ok geschlossen")
XLSFunc_CloseExcelAll(NewExcelObject)
Nun sollte es so funktionieren, wie du es haben wolltest. Viel Spass mit der erweiterten
ExcelFunctions.pbi :allright:

[Edit]
Bilder können nun auch rotiert werden.
Bildproportionen automatisch oder manuell
[/Edit]

//Edit2
habe noch Transparenzeinstellungen hinzugefügt.
Werte können dann von 0, ... 0.5 bis 1 dargestellt werden,
was dann 0 bis 100% entspricht.

In Excel wird das dann unter Bildeinstellungen angezeigt.
Wie man das Bild dann Transparent bekommt, muss vermutlich
mit dem Hintergrund zusammen hängen. Vielleicht kriege ich das
auch noch hin :)
//

MfG,
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 nehme mal an, das man mit der letzten, aktuellen Funktion um mehrere Bilder mit unterschiedlichen
Größen und Positionen in das Excelblatt eintragen kann, so akzeptiert wurde.

Nun habe ich noch drei weitere Funktionen in der ExcelFunctions.pbi (siehe Thread-Anfang)
hinzugefügt, mit denen man Kreis, Quadrat und Linien einfügen kann.
Transparenz und Farben sind auch möglich.

Hierzu nun ein TestCode, welcher auch das Laden zweier Bilder aus Windows7, sowie Kreise, Rechteck und Linie zeigt.

Code: Alles auswählen

XIncludeFile "ExcelFunktion.pbi"
;http://www.vba-wissen.de/grafikprogrammierung.html 
Define NewExcelObject,UserDesktop.s
NewExcelObject=XLSFunc_CreateExcelFile(UserDesktop+"ExcelProgramm"); Create a new Excelfile to this Path.
XLSFunc_Image(NewExcelobject,"C:\Users\Public\Pictures\Sample Pictures\Autumn Leaves.jpg",100,100,200,200,180);Bildproportionen automatisch
XLSFunc_Image(NewExcelobject,"C:\Users\Public\Pictures\Sample Pictures\Creek.jpg",500,300,10,150,90,#msoFalse);Bildproportionen manuell
XLSFunc_Elipse(NewExcelObject,245.63, 152.33, 114.78,114.78,RGB(255,255,0),RGB(0,0,255),2,1)
XLSFunc_Elipse(NewExcelObject,245.63, 152.33+150, 114.78,114.78,RGB(255,0,255),RGB(0,0,255),2,0.5)
XLSFunc_Rectangle(NewExcelObject,445.93, 152.33, 114.78,114.78,RGB(0,255,255),RGB(0,0,255),5,0.5)
XLSFunc_Line(NewExcelObject,245.63,152.33,360.41,267.11,RGB(255,0,0),#msoLineSolid,4)
XLSFunc_Elipse(NewExcelObject,245.63-150, 152.33+40, 114.78,114.78,RGB(255,255,0),RGB(0,0,255),2,0.5)
XLSFunc_ExcelVisible(NewExcelObject,#True)
MessageRequester("Warnung","Excel wird bei ok geschlossen")
XLSFunc_CloseExcelAll(NewExcelObject)
Damit hat man einige Beispiele, wie man die Shapes einsetzen kann.
Eine schöne VBA-Seite, wo auch noch andere Funktionen wie Polygon, Pfeile, Textbox usw. gezeigt
werden können, findet ihr hier.

http://www.vba-wissen.de/grafikprogrammierung.html

Ich hoffe, das dieser Thread noch viel mehr Leute anspricht. /:->

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 »

Das Ganze nochmal zusätzlich mit der Funktion für Textbox, welche ich nun auch
in der ExcelFunctions.pbi hinzugefügt habe :wink:

Code: Alles auswählen

XIncludeFile "ExcelFunktion.pbi"
;http://www.vba-wissen.de/grafikprogrammierung.html 
Define NewExcelObject,UserDesktop.s
NewExcelObject=XLSFunc_CreateExcelFile(UserDesktop+"ExcelProgramm"); Create a new Excelfile to this Path.
XLSFunc_Image(NewExcelobject,"C:\Users\Public\Pictures\Sample Pictures\Autumn Leaves.jpg",100,100,200,200,180);Bildproportionen automatisch
XLSFunc_Image(NewExcelobject,"C:\Users\Public\Pictures\Sample Pictures\Creek.jpg",500,300,10,150,90,#msoFalse);Bildproportionen manuell
XLSFunc_Elipse(NewExcelObject,245.63, 152.33, 114.78,114.78,RGB(255,255,0),RGB(0,0,255),2,1)
XLSFunc_Elipse(NewExcelObject,245.63, 152.33+150, 114.78,114.78,RGB(255,0,255),RGB(0,0,255),2,0.5)
XLSFunc_Rectangle(NewExcelObject,445.93, 152.33, 114.78,114.78,RGB(0,255,255),RGB(0,0,255),5,0.5)
XLSFunc_Line(NewExcelObject,245.63,152.33,360.41,267.11,RGB(255,0,0),#msoLineSolid,4)
XLSFunc_Elipse(NewExcelObject,245.63-150, 152.33+40, 114.78,114.78,RGB(255,255,0),RGB(0,0,255),3,0.5)
XLSFunc_TextBox(NewExcelObject,#msoTextOrientationHorizontal,100,20,60,50,"Textfeld 1","Dies ist mein Testtext")
XLSFunc_TextBox(NewExcelObject,#msoTextOrientationHorizontal,190,20,80,40,"Textfeld 2","Und hier ein weiterer Text")
XLSFunc_ExcelVisible(NewExcelObject,#True); To see Excel, behind close Workbook
MessageRequester("Warnung","Excel wird bei ok geschlossen")
XLSFunc_CloseExcelAll(NewExcelObject)
.
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 »

Hallo,

erst einmal danke für die Arbeit an diesem Projekt. Ich benutze die Funktionen sehr oft und bin begeistert. Eine Frage hätte ich aber dazu:

Gibt es eine (einfache) Möglichkeit eine Worksheet komplett in ein neues zu kopieren?

Gruß
Mac
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 »

Hallo,
meinst du so was wie in dieser VBA-Funktion?
VBA_EXCEL hat geschrieben:Worksheets("Sheet1").Copy After:=Worksheets("Sheet3")
bzw.
VBA_EXCEL hat geschrieben:Worksheets("Sheet1").Copy Before:=Worksheets("Sheet3")
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 »

Ja, genau.
Windows XP 32-bit SP3, Windows 7 64-bit, PB 4.60, PB 5.11, PB 5.20
ThoPie
Beiträge: 130
Registriert: 19.05.2006 15:18
Kontaktdaten:

Re: ExcelFunktionen COMatePlus

Beitrag von ThoPie »

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.
Bild
Antworten