我想将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相比需要数年时间. : – /
解决方法
我认为他们打破了版本4的复制功能部分.看到:
http://epplus.codeplex.com/workitem/15068
因此,可以在复制后手动设置样式ID:
[TestMethod] public void Copy_Styles_Test() { //https://stackoverflow.com/questions/31853046/epplus-copy-style-to-a-range //Throw in some data var datatable = new DataTable("tblData"); datatable.Columns.AddRange(new[] {new DataColumn("Col1",typeof (int)),new DataColumn("Col2",new DataColumn("Col3",typeof (int)) }); for (var i = 0; i < 20; i++) { var row = datatable.NewRow(); row[0] = i; row[1] = i * 10; row[2] = i * 100; datatable.Rows.Add(row); } var existingFile = new FileInfo(@"c:\temp\test.xlsx"); if (existingFile.Exists) existingFile.Delete(); using (var pck = new ExcelPackage(existingFile)) { const int rowCount = 5; const int startRow = 18; //Show the data var xlsSheet = pck.Workbook.Worksheets.Add("Sheet1"); xlsSheet.Cells.LoadFromDataTable(datatable,true); //Throw in some styles for testing xlsSheet.Row(startRow).Style.Fill.PatternType = ExcelFillStyle.Solid; xlsSheet.Row(startRow).Style.Fill.BackgroundColor.SetColor(Color.Aqua); xlsSheet.Cells[String.Format("A{0}:C{0}",startRow)].Style.Fill.BackgroundColor.SetColor(Color.Red); //Insert new rows xlsSheet.InsertRow(startRow,rowCount); //Copy the cells and manually set the style IDs var copyrow = startRow + rowCount; for (var i = 0; i < rowCount; i++) { var row = startRow + i; xlsSheet.Cells[String.Format("{0}:{0}",copyrow)].Copy(xlsSheet.Cells[String.Format("{0}:{0}",row)]); xlsSheet.Row(row).StyleID = xlsSheet.Row(copyrow).StyleID; } //May not be needed but cant hurt xlsSheet.Cells.Worksheet.Workbook.Styles.UpdateXml(); //save it pck.Save(); } }