Seite 1 von 1

[SOLVED] Bestimmtes Format ganzen Spalten zuweisen

Verfasst: Fr 28. Mär 2014, 00:24
von xundeenergie
Hi!

1) Ich finde leider nicht wirklich brauchbares, um einer ganzen Spalte per Makro das Format Text "@" zuzuweisen.

2) Weiters stehe ich momentan auch damit an, das Fenster per Makro zu fixieren. Sprich, ich erzeuge ein Spreadsheet, kopiere verschiedene Spalten hinein, generiere andere dazu.
Wenn ich fertig bin, möchte ich dann dass die erste Zeile automatisch fixiert wird.

3) Wenn diese Datei/Tabelle fertig ist, soll noch abhängig von einem Statuscode in Spalte 0 die ganze Zeile rot/gelb/grün eingefärbt werden. Sprich, ich muss den Zellen eine bedingte Formatierung - auch per Makro - zuweisen.

Den großen Brocken der Aufgabe hab ich schon gelöst, an diesen paar Schönheitskorrekturen hänge ich leider noch fest, und ich würd mich unheimlich freuen, wenn ich ein paar Hinweise bekomme, wo ich weiterforschen kann. Dannehöfer hat mir da leider auch nicht weitergeholfen.

lg xundeenergie

Re: Bestimmtes Forma ganzen Spalten zuweisen

Verfasst: Fr 28. Mär 2014, 07:19
von karolus
Hallo

Warum möchtest du das alles per Makro lösen ?
2. & 3. & (1.)*** kannst du ganz prima in einer Dokumentvorlage einrichten

***nur falls immer die gleiche[n] Spalte[n] als Text formatiert werden sollen.

das VorlagenDokument musst du dann nur noch mit Daten füllen.

Karolus

Re: Bestimmtes Format ganzen Spalten zuweisen

Verfasst: Fr 28. Mär 2014, 08:23
von xundeenergie
dein ansinnen ist sicher auch keine schlechte idee. jedoch ist mir das zu wenig flexibel. ich möchte das eben gern makrogesteuert erzeugen.

daher ist die frage nach dem wie, und nicht nach dem ob. ;-)

DASS es gehen müsste, hab ich mir schon zusammenreimen können aus den bisher gelesenen meldungen.

hast du eine idee?

Re: Bestimmtes Forma ganzen Spalten zuweisen

Verfasst: Fr 28. Mär 2014, 10:48
von karolus
Hallo
hast du eine idee?
Meine "Idee" hab ich bereits kundgetan - ich bezweifle ob das "per makro" wirklich flexiber wird, und robust

Und ja bei Dannenhöfer finden sich ein Beispiel zum Thema Zahlenformat:***
http://www.dannenhoefer.de/faqstarbasic ... l#Zweig184
das kannst du gleichermassen auch auf Zellbereiche anwenden als auch auf ganzen Spalten, zB.:

Code: Alles auswählen

sheet = thisComponent.Sheets(0) 'erstes Tabellenblatt
'folgende Varianten verweisen jeweils auf die komplette Spalte C
sheet.Columns.C
sheet.Columns.getByName("C")
sheet.Columns.getByIndex(2)
***es ist aber nicht garantiert das zb. das Zahlenformat für Text immer und überall an den gleichen Numberformat-Wert gebunden ist.

Bedingte Formatierung:
http://www.dannenhoefer.de/faqstarbasic ... rungInsert

In dem Kontext benötigst du dann auch Zellvorlagen und musst diesen Hintergrundfarben zuweisen.
http://www.dannenhoefer.de/faqstarbasic ... l#Zweig168

Fixieren:
http://www.dannenhoefer.de/faqstarbasic ... erFixieren



Karolus

Re: Bestimmtes Format ganzen Spalten zuweisen

Verfasst: Fr 28. Mär 2014, 12:01
von xundeenergie
Oha... vielen Dank. Dannehöfer ist ja SEHR umfangreich... diese Seiten hab ich doch tatsächlich noch nicht (teilweise) entdeckt.
karolus hat geschrieben:Hallo
hast du eine idee?
Meine "Idee" hab ich bereits kundgetan - ich bezweifle ob das "per makro" wirklich flexiber wird, und robust
Ich denken schon, denn diese Tabellen sind noch in Entwicklung und verändern sich weiter. Wenn ich Makros UND Vorformatierte Tabellen verteilen muss... ist diese Variante sicher robuster.
karolus hat geschrieben: Und ja bei Dannenhöfer finden sich ein Beispiel zum Thema Zahlenformat:***
http://www.dannenhoefer.de/faqstarbasic ... l#Zweig184
das kannst du gleichermassen auch auf Zellbereiche anwenden als auch auf ganzen Spalten, zB.:

Code: Alles auswählen

sheet = thisComponent.Sheets(0) 'erstes Tabellenblatt
'folgende Varianten verweisen jeweils auf die komplette Spalte C
sheet.Columns.C
sheet.Columns.getByName("C")
sheet.Columns.getByIndex(2)
***es ist aber nicht garantiert das zb. das Zahlenformat für Text immer und überall an den gleichen Numberformat-Wert gebunden ist.
Ich will explizit nur eine Formatierung als "TEXT". Mittels Dannehöfer konnte ich rausfinden, dass der Code "100" ist und weise diesen nun der Spalte zu. Für z.B. Telefonnummer-Spalten ist Textformat angesagt, sonst gehen die führenden Nullen verloren... (Was für ein Sinnbild :) )
karolus hat geschrieben: Bedingte Formatierung:
http://www.dannenhoefer.de/faqstarbasic ... rungInsert

In dem Kontext benötigst du dann auch Zellvorlagen und musst diesen Hintergrundfarben zuweisen.
http://www.dannenhoefer.de/faqstarbasic ... l#Zweig168
Die Bedingten Formatierungen bereiten mir noch Kopfzerbrechen... Aber ich werd mich durchackern.
karolus hat geschrieben: Fixieren:
http://www.dannenhoefer.de/faqstarbasic ... erFixieren

Karolus
Super, das haut hin. Ist schon in Verwendung. Auch das hab ich bei Dannehöfer bisher noch nicht gefunden. Danke!!

lg xundeenergie

Re: Bestimmtes Format ganzen Spalten zuweisen

Verfasst: Fr 28. Mär 2014, 13:26
von xundeenergie
hab das jetzt lösen können. ich erzeuge auch per makro die formatvorlagen für die farbhinterlegung. so kann ich die stati und entsprechenden farben auch dynamisch anpassen.

den code poste ich wenns fertig ist.

vielen dank nochmal für den schubs in die richtige richtung.

Re: Bestimmtes Format ganzen Spalten zuweisen

Verfasst: Fr 28. Mär 2014, 16:11
von xundeenergie
Ich hab jetzt die Bedingte Formatierung SO gelöst:

In meinem Makro kommt diese Sequenz vor. Damit belege ich die Stati mit Farben. Dieser Teil wird später noch in ein Konfigurationsfile ausgelagert und dann beim Aufruf eingelesen.

oWorkFile und oSheetWorkfile sind mit

Code: Alles auswählen

		oMyWorkfile = fnNewDoc("scalc")
		oSheetWorkfile = oMyWorkFile.sheets(0)
		oWorkFile = thisComponent
belegt.
fnNewDoc ist eine Funktion, welche ein neues Spreadsheet erzeugt.

Code: Alles auswählen

		REM - Workfile mit bedingter Formatierung nach Status belegen
		Dim Status(6,2) 
		Status(0,0) = "a"
		Status(0,1) = "&H99FF66"
		Status(0,2) = "Auftrag erteilt"
		Status(1,0) = "g"
		Status(1,1) = "&HFFFF99	"
		Status(1,2) = "Auftrag gesendet"
		Status(2,0) = "v"
		Status(2,1) = "&H66FF66"
		Status(2,2) = "Auftrag verbessert senden"
		Status(3,0) = "ne"
		Status(3,1) = "&HFFFF00"
		Status(3,2) = "Nicht erreicht - nochmal kontaktieren"
		Status(4,0) = "ki"
		Status(4,1) = "&H808080"
		Status(4,2) = "Kein Interesse - nicht wieder kontaktieren"
		Status(5,0) = "en"
		Status(5,1) = "&H666666"
		Status(5,2) = "Existiert nicht (mehr)"
		Status(6,0) = "gv"
		Status(6,1) = "&HFFFF99"
		Status(6,2) = "Gesendet verbessert"
		
		for i = 0 to UBound(Status)
			sFormTemName = "Status " & Status(i, 0)
			CellVorlage(sFormTemName, Status(i, 1),oWorkFile)
			EinfuegenConditionalFormCell(Status(i, 0),oSheetWorkFile)	
		
		next

Code: Alles auswählen

REM - Für bedingte Formatierungen müssen Formatvorlagen erstellt werden.
sub CellVorlage(sName,sColor,oDoc)
'Dim oDoc as object
'      oDoc = ThisComponent
   Dim vParaStyles
      cellStyles = oDoc.StyleFamilies.getByName("CellStyles") 

   if not cellStyles.hasByName(sName) then
      Dim vStyle2
         vStyle2 = oDoc.createInstance("com.sun.star.style.CellStyle") 
         cellStyles.insertByName(sName, vStyle2)
         with vStyle2
         .CellBackColor = sColor
'         .CharColor = RGB(222, 222, 222)
         .ParentStyle = "Standard"
'         .CharFontName = "Arial"
      end with
      
   end if
end sub
Damit lege ich die bedingte Formatierung mit Makro fest. Die Formatvorlage wurde wie schon erwähnt mit dem Makro eins weiter oben erzeugt.

Code: Alles auswählen

Sub EinfuegenConditionalFormCell(sStat,Sheet)
	Dim oCell as Object
	Dim oConditionalForm as Object
	'oCell = ThisComponent.Sheets(0).getCellRangeByPosition(0,0,26,31999)
	oCell = Sheet.getCellRangeByPosition(0,0,26,31999)
	oConditionalForm = oCell.ConditionalFormat
	Dim oCondition(3) as New com.sun.star.beans.PropertyValue
	oCondition(0).Name = "Operator"
	oCondition(0).Value = com.sun.star.sheet.ConditionOperator.FORMULA
	oCondition(1).Name = "Formula1"
	oCondition(1).Value = "$a1 = " & chr(34) & sStat & chr(34)
	oCondition(2).Name = "StyleName"
	oCondition(2).Value = "Status " & sStat
	oConditionalForm.addNew( oCondition() )
	oCell.ConditionalFormat = oConditionalForm
End Sub

Jetzt wird das neu erzeugte Arbeitsfile mit den richtigen Spalten befüllt, Zusatzspalten eingefügt und mit Titel versehen, die Titelzeile wird fixiert und es werden die ganzen Zeilen entsprechend dem Statuscode der ersten Spalte bunt eingefärbt.

Genauso wollte ich das haben. :)

Vielen Dank für die entpsrechenden Hinweise.

xundeenergie

Re: Benutzerdefinierten Formatstring ganzen Spalten zuweisen

Verfasst: Mo 31. Mär 2014, 12:15
von xundeenergie
Einen bestimmten Formatierungscode einer ganzen Spalte zuweisen hab ich so lösen können:

Code: Alles auswählen

		Dim NumberFormats as Object
		Dim NumberFormatString as String
		Dim LocalSettings As New com.sun.star.lang.Locale
		Dim NumberFormatId As Long
	
		oMyWorkfile = fnNewDoc("scalc")
		oSheetWorkfile = oMyWorkFile.sheets(0)
		oWorkFile = thisComponent


		NumberFormats = oWorkFile.NumberFormats
		NumberFormatString = "#.##0," & chr(34) & "--" & chr(34)
		LocalSettings.Language = "de"
		LocalSettings.Country = "at"
		'oWorkFile.Numberformats.addNew(NumberFormatString, LocalSettings)
		NumberFormatId = NumberFormats.queryKey(NumberFormatString, LocalSettings, True)
		If NumberFormatId = -1 Then 
			NumberFormatId = NumberFormats.addNew(NumberFormatString, LocalSettings) 
		End If
		oSheetWorkFile.Columns(3).Numberformat = NumberFormatId
Damit bekommt die Spalte D das Zahlenformat, mit dem ein Tausenderpunkt und zwei Stricherl nach dem Komma dargestellt werden. z.B. "3.425,--"

Ich wollt das nur noch der Community zurückgeben, falls es noch jemand sucht. :)