EPPlus:如何为合并单元格设置样式?

6

编辑:这些示例应该都可以正常工作。我的问题实际上与epplus和此代码无关,标记答案以及此代码适用于样式化合并单元格。

我想要能够为合并单元格设置样式,但是我的尝试没有效果。以下是我合并单元格的方法:

WorkSheet.Cells["A1:K1"].Merge = true;

我尝试设置合并单元格的背景和字体颜色的方法如下:

WorkSheet.Cells["A1:K1"].Style.Fill.PatternType = ExcelFillStyle.Solid;
WorkSheet.Cells["A1:K1"].Style.Fill.BackgroundColor.SetColor(Color.Black);
WorkSheet.Cells["A1:K1"].Style.Font.Color.SetColor(Color.Red);

我尝试过另一种方法:
WorkSheet.Cells["A1"].Style.Fill.PatternType = ExcelFillStyle.Solid;
WorkSheet.Cells["A1"].Style.Fill.BackgroundColor.SetColor(Color.Black);
WorkSheet.Cells["A1"].Style.Font.Color.SetColor(Color.Red);

另一种我尝试过的方法:

WorkSheet.Cells[1, 1].Style.Fill.PatternType = ExcelFillStyle.Solid;
WorkSheet.Cells[1, 1].Style.Fill.BackgroundColor.SetColor(Color.Black);
WorkSheet.Cells[1, 1].Style.Font.Color.SetColor(Color.Red);

我在这里错过了什么?我可以轻松地为未合并的单元格设置样式,但是我的合并单元格不会改变。

刚刚尝试了循环遍历每个合并的单元格并对其进行样式设置,还尝试了 WorkSheet.Cells[1, 1, 1, 11],但都没有成功。 - Jakotheshadows
1个回答

12

我无法重现这个问题。以下是合并单元格样式的示例。看看你做错了什么。你只需要运行它。

如果你有任何疑问,请告诉我。

    var stream = new MemoryStream();

// print header
using (var package = new ExcelPackage(stream))
{
    // add a new worksheet to the empty workbook
    var worksheet = package.Workbook.Worksheets.Add("testsheet");
    for(var i = 0; i < 10; i++)
        worksheet.Cells[i + 1, 1].Value = i.ToString();

    worksheet.Cells["A1:A3"].Merge = true;
    worksheet.Cells["A1:A3"].Style.VerticalAlignment = ExcelVerticalAlignment.Top;
    worksheet.Cells["A1:A3"].Style.Border.Top.Style = ExcelBorderStyle.Thin;
    worksheet.Cells["A1:A3"].Style.Border.Left.Style = ExcelBorderStyle.Thin;
    worksheet.Cells["A1:A3"].Style.Border.Right.Style = ExcelBorderStyle.Thin;
    worksheet.Cells["A1:A3"].Style.Border.Bottom.Style = ExcelBorderStyle.Thin;
    worksheet.Cells["A1:A3"].Style.Fill.PatternType = ExcelFillStyle.Solid;
    worksheet.Cells["A1:A3"].Style.Fill.BackgroundColor.SetColor(System.Drawing.ColorTranslator.FromHtml("#f0f3f5"));

     package.Save();
}

stream.Seek(0, SeekOrigin.Begin);

using (Stream file = File.Open("sample.xlsx", FileMode.Create))
{
    var buffer = new byte[8 * 1024];
    int len;
    while ((len = stream.Read(buffer, 0, buffer.Length)) > 0)
        file.Write(buffer, 0, len);
}

谢谢。我的示例也有效,我展示的代码只是由于一个无关的问题而没有被执行。我错误地认为我在错误地使用EPPlus。 - Jakotheshadows

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接