8

OpenXmlで行内(または行全体)の複数のセルの背景を設定する方法は?

いくつかの記事を読んだ後:

  1. C#でopenXMLを使用してExcelシートのセルを着色する
  2. Excel Open XML の高度なスタイル設定

私はまだそれを機能させることができません。

私の仕事は実際には一見簡単に見え、それらの記事に書かれていることとは少し異なります。前述のチュートリアルでは、主に新しいドキュメントを作成してスタイルを設定する方法を示しています。既存のスタイリングを変更する必要がありますが。

つまり、既存のxlsxドキュメント (レポート テンプレート) があります。レポートに必要な値を入力します ( SO open xml Excel read cell valueMSDN Working with sheets (Open XML SDK)のおかげで管理できました)。しかし次に、たとえば赤い背景でいくつかの行をマークする必要があります。

使用するかどうか、使用する必要があるかどうか、または何か他のものを使用するかどうかはわかりません...これが私が今得たものCellStyleです:CellFormat

SpreadsheetDocument doc = SpreadsheetDocument.Open("ole.xlsx", true);

Sheet sheet = (Sheet)doc.WorkbookPart
                        .Workbook
                        .Sheets
                        .FirstOrDefault();

WorksheetPart worksheetPart = (WorksheetPart)doc.WorkbookPart
                                                .GetPartById(sheet.Id);
Worksheet worksheet = worksheetPart.Worksheet;


CellStyle cs = new CellStyle();
cs.Name = StringValue.FromString("Normal");
cs.FormatId = 0;
cs.BuiltinId = 0;
//where are the style values?

WorkbookStylesPart wbsp = doc.WorkbookPart
                                .GetPartsOfType<WorkbookStylesPart>()
                                .FirstOrDefault();
wbsp.Stylesheet.CellStyles.Append(cs);
wbsp.Stylesheet.Save();



Cell cell = GetCell(worksheet, "A", 20);
cell.StyleIndex = 1U;//get the new cellstyle index somehow

doc.Close();

A20実際には、セルや範囲などのスタイルを設定する方法の、より軽量で簡単な例を非常に高く評価しA20ていJ20ます。または、おそらく、より連続したチュートリアルへのリンクです。

4

2 に答える 2

9

最終的に、セルの背景と使用フォントを使用することに気が変わりました。SO Creation Excel document with OpenXml sdk 2.0 の fosonによる回答のおかげで、元のセルの書式を保持して (つまり、フォントの色のみを変更して) 、新しいFontと新しい を追加できました。CellFormat

SpreadsheetDocument doc = SpreadsheetDocument.Open("1.xlsx", true);
Sheet sheet = (Sheet)doc.WorkbookPart.Workbook.Sheets.FirstOrDefault();
WorksheetPart worksheetPart = (WorksheetPart)doc.WorkbookPart
                                                .GetPartById(sheet.Id);
Worksheet worksheet = worksheetPart.Worksheet;

WorkbookStylesPart styles = doc.WorkbookPart.WorkbookStylesPart;
Stylesheet stylesheet = styles.Stylesheet;
CellFormats cellformats = stylesheet.CellFormats;
Fonts fonts = stylesheet.Fonts;

UInt32 fontIndex = fonts.Count;
UInt32 formatIndex = cellformats.Count;

Cell cell = GetCell(worksheet, "A", 19);
cell.CellValue = new CellValue(DateTime.Now.ToLongTimeString());
cell.DataType = new EnumValue<CellValues>(CellValues.String);

CellFormat f = (CellFormat)cellformats.ElementAt((int)cell.StyleIndex.Value);

var font = (Font)fonts.ElementAt((int)f.FontId.Value);
var newfont = (Font)font.Clone();
newfont.Color = new Color() { Rgb = new HexBinaryValue("ff0000") };
fonts.Append(newfont);

CellFormat newformat = (CellFormat)f.Clone();
newformat.FontId = fontIndex;
cellformats.Append(newformat);

stylesheet.Save();

cell.StyleIndex = formatIndex;
doc.Close();
于 2012-12-28T01:16:53.180 に答える