OpenXMLSDKでそのセルの値とデータ型を持つセルを追加する次のコードがあります。
Cell cell = InsertCellInWorksheet(column, row, worksheetPart);
cell.CellValue = new CellValue(index.ToString());
cell.DataType = new EnumValue<CellValues>(CellValues.SharedString);
このセルの場合、両側に境界線を追加するにはどうすればよいですか?また、セルに背景色を追加するのも好きです。
私は以下を持っていますが、セルに境界線を追加する方法がわかりません:
Borders borders1 = new Borders() { Count = (UInt32Value)1U };
Border border1 = new Border();
LeftBorder leftBorder1 = new LeftBorder();
RightBorder rightBorder1 = new RightBorder();
TopBorder topBorder1 = new TopBorder();
BottomBorder bottomBorder1 = new BottomBorder();
border1.Append(leftBorder1);
border1.Append(rightBorder1);
border1.Append(topBorder1);
border1.Append(bottomBorder1);
borders1.Append(border1);
前もって感謝します
Open XML 2.0生産性ツール をインストールすることをお勧めします。次に、必要な境界線と色を含む空白のExcelドキュメントを作成します。そのファイルを生産性ツールで開き、[コードを反映]をクリックします。次に、その境界線と背景色を生成するために必要なC#コードを提供します。コードは投稿するのに少し時間がかかりますが、これらの手順に従うと、それを使用できるはずです。
Borderプロパティとfillプロパティは、WookbookStylesPart
と呼ばれる別の部分に保存されます。この部分は、ブック内のセルに適用する境界線、塗りつぶし、フォントなどのタイプを挿入する場所です。これらのプロパティは、インデックスを介して挿入したスタイルにアクセスする配列型構造に格納されます。セルに複数のスタイルを適用できるため、CellFormat
オブジェクトには、さまざまなスタイルのすべてのインデックスが格納されます。セルのCellFormat
を取得したら、そのインデックスをStlyeIndex
プロパティを介して実際のセルで参照する必要があります。これが、セルがさまざまなスタイルを自分自身に適用する方法を知っている方法です。
境界線を作成するコードは次のとおりです。
public Border GenerateBorder()
{
Border border2 = new Border();
LeftBorder leftBorder2 = new LeftBorder(){ Style = BorderStyleValues.Thin };
Color color1 = new Color(){ Indexed = (UInt32Value)64U };
leftBorder2.Append(color1);
RightBorder rightBorder2 = new RightBorder(){ Style = BorderStyleValues.Thin };
Color color2 = new Color(){ Indexed = (UInt32Value)64U };
rightBorder2.Append(color2);
TopBorder topBorder2 = new TopBorder(){ Style = BorderStyleValues.Thin };
Color color3 = new Color(){ Indexed = (UInt32Value)64U };
topBorder2.Append(color3);
BottomBorder bottomBorder2 = new BottomBorder(){ Style = BorderStyleValues.Thin };
Color color4 = new Color(){ Indexed = (UInt32Value)64U };
bottomBorder2.Append(color4);
DiagonalBorder diagonalBorder2 = new DiagonalBorder();
border2.Append(leftBorder2);
border2.Append(rightBorder2);
border2.Append(topBorder2);
border2.Append(bottomBorder2);
border2.Append(diagonalBorder2);
return borders2;
}
塗りつぶしを追加するコードは次のとおりです。
public Fill GenerateFill()
{
Fill fill = new Fill();
PatternFill patternFill = new PatternFill(){ PatternType = PatternValues.Solid };
ForegroundColor foregroundColor1 = new ForegroundColor(){ Rgb = "FFFFFF00" };
BackgroundColor backgroundColor1 = new BackgroundColor(){ Indexed = (UInt32Value)64U };
patternFill.Append(foregroundColor1);
patternFill.Append(backgroundColor1);
fill.Append(patternFill);
return fill;
}
境界線を挿入してスタイル部分に入力するには、次のコードが必要になります。
public uint InsertBorder(WorkbookPart workbookPart, Border border)
{
Borders borders = workbookPart.WorkbookStylesPart.Stylesheet.Elements<Borders>().First();
borders.Append(border);
return (uint)borders.Count++;
}
public uint InsertFill(WorkbookPart workbookPart, Fill fill)
{
Fills fills = workbookPart.WorkbookStylesPart.Stylesheet.Elements<Fills>().First();
fills.Append(fill);
return (uint)fills.Count++;
}
最初に、セルアドレスが「B2」の形式である場所に塗りつぶしと境界線を追加するセルへの参照を取得する必要があります。
public Cell GetCell(WorksheetPart workSheetPart, string cellAddress)
{
return workSheetPart.Worksheet.Descendants<Cell>()
.SingleOrDefault(c => cellAddress.Equals(c.CellReference));
}
次に、セルを取得したら、そのセルに属するCellFormat
を取得し、新しいCellFormat
を追加する必要があります。
public CellFormat GetCellFormat(WorkbookPart workbookPart, uint styleIndex)
{
return workbookPart.WorkbookStylesPart.Stylesheet.Elements<CellFormats>().First().Elements<CellFormat>().ElementAt((int)styleIndex);
}
public uint InsertCellFormat(WorkbookPart workbookPart, CellFormat cellFormat)
{
CellFormats cellFormats = workbookPart.WorkbookStylesPart.Stylesheet.Elements<CellFormats>().First();
cellFormats.Append(cellFormat);
return (uint)cellFormats.Count++;
}
CellFormat
を取得したら、塗りつぶしと境界線のプロパティを変更できます。それらが変更されたら、新しいCellFormat
を挿入し、そのCellFormat
のインデックスをセルのStyleIndex
にポイントする必要があります。これは、セルがそれ自体に適用するスタイルを知る方法です。
public void SetBorderAndFill(WorkbookPart workbookPart, WorksheetPart workSheetPart)
{
Cell cell = GetCell(workSheetPart, "B2");
CellFormat cellFormat = cell.StyleIndex != null ? GetCellFormat(workbookPart, cell.StyleIndex).CloneNode(true) as CellFormat : new CellFormat();
cellFormat.FillId = InsertFill(workbookPart, GenerateFill());
cellFormat.BorderId = InsertBorder(workbookPart, GenerateBorder());
cell.StyleIndex = InsertCellFormat(workbookPart, cellFormat);
}
ただ呼び出すのがはるかに簡単
ws.Cells[row, col].Style.Border.BorderAround(ExcelBorderStyle.Thin);
SpreadsheetDocumentは、WorkbookPartsのコレクションとして構造化されています。これらの1つであるWorkbookStylesPartには、ドキュメントで使用されているすべてのスタイルが含まれています。 WorkbookPartには、Worksheetsが含まれています。セルまたはセルの範囲にスタイルを適用するには、StyleIndexプロパティをWorkbookStylesPartの対応するスタイルに設定する必要があります。
この答えはあなたが始めるのに役立つはずです: https://stackoverflow.com/a/11118442/741326