Excel Spalten einfärben

Einbindung von Office-Komponenten wie Word, Excel usw.

Moderator: Moderatoren

Antworten
P. Jossi
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 31
Registriert: Mi, 17. Mai 2006 7:16

Excel Spalten einfärben

Beitrag von P. Jossi »

ich übergebe ein grosses Array sehr schnell ins Excel.
Nun sollte ich gezielt einige Zellen einfärben
das durchlaufen des Farbarrays und dann setzen der Farbe mittels interior.ColorIndex =afarb[nfarb]
dauert ewig (bis ca 1 Std.)

wie kann ich die Farben auf einen schlag setzen analog value:=a_daten.
alle Versuche enden bei mir zur Laufzeit mit der Fehlermeldung falscher dateitype

eine Alternative wäre eventuell ein macro das die Zellen anhand ihres Inhaltes einfärbt.
Jede Idee wie man aus xbase ein macro in Excel startet ist darum heiss begehrt.

oder kennt Jemand eine andere Möglichkeit?

ich danke Euch im voraus
P. Jossi
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Excel Spalten einfärben

Beitrag von brandelh »

immer schön in Excel mit "Macro aufzeichnen" was man tun will (eventuell muss man sich die "Entwicklertools" noch freischalten) und dann ansehen wie der VB-Code ansieht:

* Hintergrund mit GELB einfärben

Code: Alles auswählen

Range("A1:A6").Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
        .PatternTintAndShade = 0
End With
* Zeichenfarbe in ROT darstellen

Code: Alles auswählen

    Range("A2").Select
    With Selection.Font
        .Color = -16777024
        .TintAndShade = 0
    End With
ich übersetze mal aus der Hüfte ...

Code: Alles auswählen

oExcel := CreateObject("Excel.Application")
IF Empty( oExcel )
    MsgBox( "Excel ist nicht installiert" )
    RETURN
ENDIF

oExcel:DisplayAlerts := .F.
oExcel:visible       := .T.

cDir := CurDrive()+":\"+CurDir()
oBook  := oExcel:workbooks:Add() // oder öffnen ?
oSheet := oBook:ActiveSheet
oSheet:PageSetup:Orientation := xlLandscape // Ausrichtung
* oSheet:Columns( 2 ):NumberFormat := "0.00"  // numerisch
* oSheet:Cells(nRow,1):Value := FIELD->PARTNAME  // inhalte
* oSheet:Columns( 1 ):AutoFit() // automatische Breite 
*  ? oBook:FullName

// Gelber Hintergrund
oRange := oSheet:Range("A1:A6")
oRange:Interior:Pattern = xlSolid   // eventuell auch oRange:Pattern direkt
oRange:Interior:PatternColorIndex = xlAutomatic
oRange:Interior:Color = 65535
oRange:Interior:TintAndShade = 0
oRange:Interior:PatternTintAndShade = 0

// Rote Schrift
oRange := oSheet:Range("A2")
oRange:Font:Color = -16777024
oRange:Font:TintAndShade = 0

oBook:SaveAs(cDir+"\MyExcel.xls",xlWorkbookNormal) // kompatibles Format oder anderes
oExcel:Quit()
oExcel:Destroy()
Die Anweisungen .Select und Selection. sind vermutlich VB Schleifenelemente auf die Anzahl der selektierten Zeilen:

Code: Alles auswählen

?.Select
  With Selection.?
Gruß
Hubert
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Excel Spalten einfärben

Beitrag von peternmb »

Hallo,

ich hänge mich nochmal an diesen etwas älteren Beitrag weil der mein Probem schon halber löst :wink:

Die Fragen die allerdings noch bleiben:
- wie erhalte ich die Farbwerte für z.B. Grün oder Blau?
- wie kann ich die Schriftattribute (Größe oder z.B. fett) für bestimmte Zellen setzen?

PS.: von VB habe ich absolut keine Ahnung...
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2821
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 94 Mal
Danksagung erhalten: 13 Mal

Re: Excel Spalten einfärben

Beitrag von georg »

Hallo, Peter -


wie schon geschrieben: einfach in Excel die Makro-Aufzeichnung starten, eine Zelle so, eine andere so einfärben, Aufzeichnung beenden, Makro mit dem Makroeditor anschauen. Da findest Du die Werte, die Du brauchst.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Excel Spalten einfärben

Beitrag von brandelh »

Ich kenne nur ausprobieren, als in Excel Entwicklertools unter Optionen anzeigen, Macro aufzeichnen,
dabei GELB GRÜN ROT etc. als Text in Zellen schreiben und einfärben.
Macro speichern und Macro anzeigen lassen, das VB in Excel eignet sich dafür ...
Gruß
Hubert
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Excel Spalten einfärben

Beitrag von peternmb »

Danke für die Antworten, das hatte ich schon so ähnlich befürchtet.
Ich hatte die Hoffung, dass jemand sich schon eine Übersicht mit den entsprechnden Werten erstellt hat 8)
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Excel Spalten einfärben

Beitrag von AUGE_OHR »

peternmb hat geschrieben:Ich hatte die Hoffung, dass jemand sich schon eine Übersicht mit den entsprechnden Werten erstellt hat 8)
wie wäre es mal Google zu fragen : "excel colorindex"
https://msdn.microsoft.com/de-de/librar ... 40443.aspx
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Excel Spalten einfärben

Beitrag von brandelh »

Es geht einfacher ... auf Jimmys Seite gibt es eine Erklärung zur Color Eigenschaft:

Code: Alles auswählen

myChart.Axes(xlValue).TickLabels.Font.Color = RGB(0, 255, 0)

Code: Alles auswählen

RGB Farbfunktionen haben wir auch ...

GraMakeRGBColor( <aRGB> ) --> nRGBColor | NIL 

Parameter 
<aRGB> := { nRed, nGreen, nBlue }
<aRGB> ist ein Array mit drei Elementen, das numerische Werte für die Intensität der Farben Rot, Grün und Blau enthält.
Die Farbe <nColorIndex> wird gemäß der Intensität dieser drei Farben gemischt. 
Die Intensität einer der drei Farben wird durch Werte zwischen 0 und 255 definiert. 
ROT == { 255,0,0 }
Grün == { 0,255,0 }
Blau == { 0,0,255 }
Weiß == { 255,255,255 }
Schwarz == {0,0,0}
etc.

Wenn man die aus der Palette will, ist das mit dem Index wohl besser, ich weiß aber nicht ob die Palette immer gleich ist.
Gruß
Hubert
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Excel Spalten einfärben

Beitrag von peternmb »

Irgendetwas verstehe ich da nicht so richtig :?
* Zeichenfarbe in ROT darstellen
Range("A2").Select
With Selection.Font
.Color = -16777024
.TintAndShade = 0
End With
Wie komme ich da mit RGB zu dem Wert -16777024???
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Excel Spalten einfärben

Beitrag von brandelh »

Das Minus kommt von unserer Darstellung (Xbase kennt nur LONG), tatsächlich müsste es ein DWORD sein, beides 32 bit integer ... also 4 Byte im Speicher.
Excel über ActiveX setzt das dann richtig um. Ist also nur eine Anzeige Sache ;-)
Gruß
Hubert
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Excel Spalten einfärben

Beitrag von peternmb »

Dann müsste es doch so funktionieren:

Code: Alles auswählen

// Rote Schrift
oRange := oSheet:Range("B1:B6")
//oRange:Font:Color = -16777024
oRange:Font:Color = GraMakeRGBColor(255, 0, 0)
oRange:Font:TintAndShade = 0
Die Schrift bleibt aber schwarz :?
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Excel Spalten einfärben

Beitrag von AUGE_OHR »

peternmb hat geschrieben:Dann müsste es doch so funktionieren:

Code: Alles auswählen

//oRange:Font:Color = -16777024
oRange:Font:Color = GraMakeRGBColor(255, 0, 0) // falsche Syntax für ein RGB Array
Die Schrift bleibt aber schwarz :?
zunächst ist deine Syntax falsch.
dann solltest du dir c:\ALASKA\XPPW32\Source\SYS\GraSys.prg ansehen wie GraMakeRGBColor() funktioniert.
da Excel einen negativen Wert haben möchte wäre der Code folgendermassen

Code: Alles auswählen

oRange:Font:Color = GraMakeRGBColor({255, 0, 0})-(256*256*256)
wobei 16777024 kein richtiges ROT ist sondern {192,0,0}
gruss by OHR
Jimmy
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Excel Spalten einfärben

Beitrag von peternmb »

Ja klar ist ja ein Array, da habe ich die geschweiften Klammern vergessen - Danke :idea: .
Ich habe den Wert für das Rot aus dem Beispiel von Hubert übernommen - im Moment bin ich noch am experimentieren.

Doch woher weiß ich ob bzw. wann Excel einen negativen Wert erwartet?
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Excel Spalten einfärben

Beitrag von brandelh »

Am Einfachsten einmal bei Excel abfragen (Macro) und DEFINES setzen

Igentlich sollten die Werte automatisch negativ sein, wenn das 32. Bit gesetzt wurde.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Excel Spalten einfärben

Beitrag von brandelh »

Ich hab mich geirrt, der Zahlenbereich von RGB Zahlen ist zu nieder um überhaupt in negative Werte zu rutschen ...
An RGB value is a long integer value in the range of 0 to &H00FFFFFF.
Keine Ahnung warum Excel das negativ braucht.
Gruß
Hubert
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Excel Spalten einfärben [erledigt]

Beitrag von peternmb »

brandelh hat geschrieben:Keine Ahnung warum Excel das negativ braucht.
Ich habe mittlerweile gemerkt, dass es auch mit positiven Zahlen problemlos funktioniert.

Auch das Festlegen von Schriftstil und Schriftgröße ist recht simpel:

Code: Alles auswählen

oRange := oSheet:Range("A1:A10")
oRange:Font:Bold = .T.
oRange:Font:Size = 10
//
oRange := oSheet:Range("B1:B10")
oRange:Font:Italic = .T.
oRange:Font:Size = 12
//
oRange := oSheet:Range("C1:C10")
oRange:Font:Strikethrough  = .T.
oRange:Font:Size = 14
Antworten