c# – EPPlus:将样式复制到一个范围

前端之家收集整理的这篇文章主要介绍了c# – EPPlus:将样式复制到一个范围前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想将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();
    }
}
原文链接:https://www.f2er.com/csharp/243294.html

猜你在找的C#相关文章