Erste Zell-Hintergrundfarbe in Excel mit Open XML 2.0
Ich versuche die Hintergrundfarbe einer Zelle in einer excel-Tabelle. Ich bin mit Open XML 2.0 SDK, und ich bin in der Lage, öffnen Sie die *.xlsx-Datei und um Zell-Werte zum Beispiel. Mein code für die Hintergrund-Farbe ist die folgende:
public BackgroundColor GetCellBackColor(Cell theCell, SpreadsheetDocument document)
{
BackgroundColor backGroundColor = null;
WorkbookStylesPart styles = SpreadsheetReader.GetWorkbookStyles(document);
int cellStyleIndex = (int)theCell.StyleIndex.Value;
CellFormat cellFormat = (CellFormat)styles.Stylesheet.CellFormats.ChildElements[cellStyleIndex];
Fill fill = (Fill)styles.Stylesheet.Fills.ChildElements[(int)cellFormat.FillId.Value];
backGroundColor = fill.PatternFill.BackgroundColor;
return backGroundColor;
}
Mein problem hier ist, dass PatternFill.BackgroundColor
gibt nur eine Natürliche Zahl, ich denke, es ist die id des styles. Mein problem ist, dass die code-Zeile
DocumentFormat.OpenXml.Spreadsheet.Color c = (DocumentFormat.OpenXml.Spreadsheet.Color)styles.Stylesheet.Colors.ChildElements[Int32.Parse(backGroundColor.InnerText)];
gibt einen Fehler zurück, weil Stylesheet.Colors
ist null
... ...vielleicht liegt es daran, dass ich eine "eingebaute" Farbe in excel - nicht eine selbst definierte Farbe?!
Irgendwelche Ideen, wie ich könnte "berechnen" kann der Reale Farbe-Zahl von der "backGroundColor-Wert"?
InformationsquelleAutor basti | 2012-05-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die fill-pattern einer Zelle in einer excel-Tabelle ist
aus zwei Farben: die Hintergrundfarbe und Die Vordergrundfarbe.
Der Begriff Vordergrund-Farbe ist ein wenig irreführend, hier. Es ist nicht die
Farbe der Schrift, aber die Vordergrundfarbe des Musters füllen.
Zum Beispiel, wenn Sie füllen den hintergrund einer Zelle mit einer Farbe
die
ForegroundColor
Eigenschaft der bezogenenPatternFill
Objekt der Zellefestgelegt ist, um die gewünschte Feste Farbe Wert, wo Die
BackgroundColor
Objekteingestellt ist das system Vordergrundfarbe. Die
PatternType
Eigenschaft desPatternFill
Objekt wird festgelegt, umPatternValues.Solid
.So, um den Farbwert der Zelle hintergrund (Füllfarbe), Sie haben zu analysieren, die
die
ForegroundColor
Eigenschaft der bezogenenPatternFill
Objekt. Sie haben, umbestimmen die "Art der Farbe" die Instanz darstellt:
Weitere Informationen über die verschiedenen "Farb-Typen" finden Sie die folgenden
link.
Bitte beachten Sie, dass die Bedeutung der
InnerText
Eigenschaft desForegroundColor
undBackgroundColor
Klasse hängt vom Typ Farbe. Für den Fall, dass in einem theme-basiert, Farbe der
InnerText
Eigenschafteingestellt ist der index in der
ColorScheme
Sammlung.Folgende Beispiel druckt alle hintergrund-Farbe-Informationen für alle Zellen in einer Tabellenkalkulation Dokument:
Ich denke, (ich habe einige Tests), wenn StyleIndex null ist, verwenden Sie die Formatvorlage für die Zelle mit dem index 0. Allerdings habe ich nicht gefunden, ein Hinweis darüber in der open-xml-Spezifikation.
Vielen Dank für die Informationen. Es gibt wirklich die Notwendigkeit für eine gute und vollständige wrapper - wo können Sie einfach anrufen "Zelle.GetColor" etc.. (und das funktioniert tatsächlich 😉 )
Vielen Dank für diese ausführliche Erklärung, aber ich finde, dass man nicht zuverlässig erhalten Farben aus
ThemeElements.ColorScheme
mitColorType.Theme
als index: die Indizes 0 und 1 (meist schwarz/weiß) haben die Plätze getauscht, und auch die Indizes 2 und 3. Diese sind dem Thema "Dark1"/"Light1"/"Dark2"/"Light2" Farben. Können wir zählen auf diese Indizes immer getauscht, oder müssen wir das Thema Farben auf eine andere Weise?Der gleiche code funktioniert für die font-Attribute sowie. Danke für die Hilfe. Für das Protokoll: Extrahieren Sie die schriftart-id und Holen Sie sich die font (Schriftart) aus dem Fonts-Eigenschaft.
InformationsquelleAutor Hans