我有以下代码,在OpenXML SDK中为该单元格添加一个值和数据类型的单元格:
Cell cell = InsertCellInWorksheet(column, row, worksheetPart);
cell.CellValue = new CellValue(index.ToString());
cell.DataType = new EnumValue<CellValues>(CellValues.SharedString);
Run Code Online (Sandbox Code Playgroud)
对于此单元格,如何在每侧添加边框?我也想在单元格上添加背景颜色.
我有以下但不知道如何将边框添加到单元格:
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);
Run Code Online (Sandbox Code Playgroud)
提前致谢
amu*_*rra 23
我建议安装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;
}
Run Code Online (Sandbox Code Playgroud)
以下是添加填充的代码:
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;
}
Run Code Online (Sandbox Code Playgroud)
您将需要此代码来插入边框并填充样式部分:
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++;
}
Run Code Online (Sandbox Code Playgroud)
您需要首先获得对要添加填充和边框的单元格的引用,其中cellAddress的格式为"B2":
public Cell GetCell(WorksheetPart workSheetPart, string cellAddress)
{
return workSheetPart.Worksheet.Descendants<Cell>()
.SingleOrDefault(c => cellAddress.Equals(c.CellReference));
}
Run Code Online (Sandbox Code Playgroud)
然后,一旦你获得了你的单元格,你需要获得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++;
}
Run Code Online (Sandbox Code Playgroud)
一旦你有了,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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26549 次 |
| 最近记录: |