我想将x-new行/列插入工作表并应用插入的行/列的样式(backgroundcolor / border等)。
这是我添加新行的方式:
xlsSheet.InsertRow(18, RowCount);
然后我想将“base”行的样式复制/应用到新插入的行:
for (int i = 0; i < RowCount; i++)
{
xlsSheet.Cells[16, 1, 16, xlsSheet.Dimension.End.Column].Copy(xlsSheet.Cells[16 + i + 1, 1]);
}
但是这段代码不会复制/应用“基础”行的样式。在这一刻,我有一个互操作的解决方法,但这与epplus相比需要数年时间。 : - /
答案 0 :(得分:5)
在4.0.4代码中:
if (copyStylesFromRow > 0)
{
var cseS = new CellsStoreEnumerator<int>(_styles, copyStylesFromRow, 0, copyStylesFromRow, ExcelPackage.MaxColumns); //Fixes issue 15068 , 15090
while(cseS.Next())
{
for (var r = 0; r < rows; r++)
{
_styles.SetValue(rowFrom + r, cseS.Column, cseS.Value);
}
}
}
它使用copyStylesFromRow值,但由于代码序列,它使用新的行号。所以如果你想从第3行开始插入4行:
workbook.Worksheets[1].InsertRow(3,4,6);
这将从第3行开始插入4个新行,因为包含第3行,您必须指向第6行。这是一个错误,但你可以解释它。
答案 1 :(得分:4)
我认为他们用版本4破坏了部分复制功能。请参阅:
http://epplus.codeplex.com/workitem/15068
因此,可以在复制后手动设置样式ID:
Dim dTime As Double
Dim startTime As Date, endTime As Date
startTime = Now() ' at the start of the analysis
'analysis here
endTime = Now() ' at the end of the analysis
dTime = endTime - startTime
StatusBox.Value = "Analysis completed in " & Format(dTime, "hh:mm:ss") & "."
答案 2 :(得分:2)
您应该像这样定义工作表:
string sheetName="Your Sheet Name";
ExcelWorksheet ws = pck.Workbook.Worksheets.Add(sheetName);
然后您可以使用以下代码更改整个工作表的样式:
Color colFromHex = System.Drawing.ColorTranslator.FromHtml("#B8C9E9");
ws.Cells.Style.Fill.PatternType = ExcelFillStyle.Solid;
ws.Cells.Style.Fill.BackgroundColor.SetColor(colFromHex);
ws.Cells.Style.Border.Top.Style = ExcelBorderStyle.Medium;
// . . . . .
并使用以下代码更改范围的样式:
Color colFromHex = System.Drawing.ColorTranslator.FromHtml("#B8C9E9");
ws.Cells["A1:H16"].Style.Fill.PatternType = ExcelFillStyle.Solid;
ws.Cells["A1:H16"].Style.Fill.BackgroundColor.SetColor(colFromHex);
ws.Cells["A1:H16"].Style.Border.Top.Style = ExcelBorderStyle.Medium;