OpenXML SDK具有单元格边框

我有以下代码,在OpenXML SDK中为该单元格添加具有值和数据类型的单元格:

Cell cell = InsertCellInWorksheet(column, row, worksheetPart); cell.CellValue = new CellValue(index.ToString()); cell.DataType = new EnumValue(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文档。 在生产力工具中打开该文件,然后单击reflection代码。 然后它将为您提供生成该边框和背景颜色所需的C#代码。 代码有点张贴,但如果您按照这些步骤操作,则应该可以使用它。

**编辑**

border和fill属性存储在一个名为WookbookStylesPart的单独部分中。 在此部分中,您将插入要应用于工作簿中的单元格的边框,填充,字体等类型。 这些属性存储在数组类型结构中,您可以在其中访问通过索引插入的样式。 由于您可以将多个样式应用于单元格,因此CellFormat对象是存储各种样式的所有索引的位置。 一旦你有一个单元格的CellFormat ,它的索引需要通过StlyeIndex属性在实际单元格上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().First(); borders.Append(border); return (uint)borders.Count++; } public uint InsertFill(WorkbookPart workbookPart, Fill fill) { Fills fills = workbookPart.WorkbookStylesPart.Stylesheet.Elements().First(); fills.Append(fill); return (uint)fills.Count++; } 

您需要首先获得对要添加填充和边框的单元格的引用,其中cellAddress的格式为“B2”:

 public Cell GetCell(WorksheetPart workSheetPart, string cellAddress) { return workSheetPart.Worksheet.Descendants() .SingleOrDefault(c => cellAddress.Equals(c.CellReference)); } 

然后,一旦获得单元格,您需要获取属于该单元格的CellFormat ,并添加新的CellFormat

 public CellFormat GetCellFormat(WorkbookPart workbookPart, uint styleIndex) { return workbookPart.WorkbookStylesPart.Stylesheet.Elements().First().Elements().ElementAt((int)styleIndex); } public uint InsertCellFormat(WorkbookPart workbookPart, CellFormat cellFormat) { CellFormats cellFormats = workbookPart.WorkbookStylesPart.Stylesheet.Elements().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的集合。 其中之一, WorkbookStylesPart ,包含文档中使用的所有样式。 WorkbookPart包含您的工作表 。 要将样式应用于单元格或单元格区域,需要将StyleIndex属性设置为WorkbookStylesPart中的相应样式。

这个答案应该有助于您入门: https : //stackoverflow.com/a/11118442/741326