Seite 1 von 1

Excel Spalten einfärben

Verfasst: So, 26. Jul 2009 20:14
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

Re: Excel Spalten einfärben

Verfasst: Mi, 24. Jul 2013 22:10
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.?

Re: Excel Spalten einfärben

Verfasst: Sa, 03. Okt 2015 17:23
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...

Re: Excel Spalten einfärben

Verfasst: Sa, 03. Okt 2015 19:42
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.

Re: Excel Spalten einfärben

Verfasst: Sa, 03. Okt 2015 19:50
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 ...

Re: Excel Spalten einfärben

Verfasst: So, 04. Okt 2015 10:55
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)

Re: Excel Spalten einfärben

Verfasst: Mo, 05. Okt 2015 1:01
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

Re: Excel Spalten einfärben

Verfasst: Mo, 05. Okt 2015 14:36
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.

Re: Excel Spalten einfärben

Verfasst: Mo, 05. Okt 2015 16:33
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???

Re: Excel Spalten einfärben

Verfasst: Mo, 05. Okt 2015 16:51
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 ;-)

Re: Excel Spalten einfärben

Verfasst: Mo, 05. Okt 2015 17:24
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 :?

Re: Excel Spalten einfärben

Verfasst: Di, 06. Okt 2015 1:09
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}

Re: Excel Spalten einfärben

Verfasst: Di, 06. Okt 2015 10:00
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?

Re: Excel Spalten einfärben

Verfasst: Di, 06. Okt 2015 10:19
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.

Re: Excel Spalten einfärben

Verfasst: Di, 06. Okt 2015 10:31
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.

Re: Excel Spalten einfärben [erledigt]

Verfasst: Sa, 10. Okt 2015 17:02
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