首页 > 解决方案 > 如何使用 C# 和 ClosedXML 将相同的值合并在一起?

问题描述

我正在尝试使用 C# 中的 ClosedXML 包将 Excel 的相同值合并在一起。

这是我当前的输出..它没有将相同的值合并在一起并留下一些。

例如,No.7 合并了两个单元格而不是第三个单元格。

例如,No.9 不断合并 2 个单元格并重复相同的合并。

在此处输入图像描述

我目前的逻辑:

// Foreach record
int i = 1;

foreach (var record in ...)
{
    i++;

    // Minimum Months
    // Create Value
    worksheet.Cell($"D{i}").Value = record.MinimumMonths.ToString();


    // Evaluate value - if they're the same then merge
    if(i > 2 && worksheet.Cell($"D{i}").Value.ToString() == worksheet.Cell($"D{i - 1}").Value.ToString())
    {
        worksheet.Range($"D{i - 1}:D{i}").Merge();
    }    
}

我不明白我的逻辑哪里出错了。如何将所有相同的值合并在一起?

标签: c#excelclosedxml

解决方案


worksheet.Range($"D{i - 1}:D{i}").Merge();

你不应该成对合并你的单元格。识别具有相同值的单元格区域的第一个和最后一个单元格,并将整个区域合并到一个.Merge()语句中。

另请注意,当您合并一系列单元格时,只有左上角的单元格保持其值。合并范围中所有其他单元格的值都将被清除。这与 Excel 所做的一致。

你的.Value.ToString()平等比较有点天真。而是检查cell1.Value is double d1 && cell2.Value is double d2 && d1.Equals(d2)


推荐阅读