如何使用epPlus在excel中检查并合并下一个值是否相同的两行

普拉山粉刺

我正在 EPPlus 库的帮助下动态创建 Excel,我有一个 excel,其数据如下所示:

Name     EmpCode   Department      attendance
Prashant  111      CSE         70% for Sep
Prashant  111      CSE         90% for Oct
XYZ       112      HR          50% for Sep
XYZ       112      HR          90% for Oct

我想要的是:如果当前的 EmpCode 等于下一行的值,则合并这两列,这样预期的输出将是

在此处输入图片说明

我非常确定每个 empCode 只会重复两次。

我尝试过的代码:

for (var rowNum = 1; rowNum <= ws.Dimension.End.Row; rowNum++)
 {
   var row = ws.Cells[string.Format("{0}:{0}", rowNum)];
 }
面食

此代码仅在 empcode 重复两次时才有效,但您说您非常确定它只会重复两次,所以应该没问题,只是不太可扩展。

获得电子表格中的数据后,您必须遍历数据集中的所有行。在循环开始时设置当前行的范围,在循环结束时设置前一行的范围。如果设置了先前的范围,则评估每行的列以确定是否应该将单元格合并在一起。

using (var p = new OfficeOpenXml.ExcelPackage(new FileInfo(@"c:\FooFolder\Foo.xlsx")))
{
    ExcelWorkbook wb = p.Workbook;
    ExcelWorksheet ws = wb.Worksheets[1];

    //create variable for previous range that will persist through each loop
    ExcelRange previousRange = null;

    //set position of first column to merge
    int mergecellBegin = 1;

    //set position of last column to merge
    int mergeCellEnd = 3;

    //create variable to check the cells of your rows
    bool areCellsEqual;

    //iterate through each row in the dataset

    for (var rowNum = 2; rowNum <= ws.Dimension.End.Row; rowNum++)
    {
        ExcelRange currentRange = ws.Cells[rowNum, 1, rowNum, mergeCellEnd];

        //will skip if we haven't set previous range yet
        if (previousRange != null)
        {
            //reset your check variable
            areCellsEqual = true;
            //check if all cells in the ranges are qual to eachother
            for (int i = 1; i <= mergeCellEnd; i++)
            {
                //if the cells from the ranges are not equal then set check variable to false and break the loop
                if (!currentRange[rowNum, i].Value.Equals(previousRange[rowNum - 1, i].Value))
                {
                    areCellsEqual = false;
                    break;
                }
            }

            //if all cells from the two ranges match, merge them together.
            if (areCellsEqual)
            {
                //merge each cell in the ranges
                for (int i = 1; i <= mergeCellEnd; i++)
                {
                    ExcelRange mergeRange = ws.Cells[rowNum - 1, i, rowNum, i];
                    mergeRange.Merge = true;
                }
            }
        }

        //sets the previous range to the current range to be used in next iteration
        previousRange = currentRange;
    }

    p.Save();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何检查数组中是否存在某个值并获取下一个值?

如何检查一个值是否重复,如果重复需要删除Datatable中的两行

如果一列中有一个相同的值,如何合并两行并更改列名

如何检查单元格值是否大于 X,从这两个值中获取差异并添加到 Excel 中的下一个单元格?

将最后两行复制/粘贴到下一个空行中,并清除某些单元格(包含合并的单元格)

如何检查循环中的“下一个”字段是否相同?

检查pandas DataFrame中的两行是否具有相同的一组值,无论列顺序如何

当两行的长度不同时如何从下一个可用行写入数据

如果当前值与下一个值相同,如何行跨度

检查foreach循环中下一个对象中是否存在值

在Java中检查下一个输入是否同时是>和<时,如何检查下一个输入是否为整数?

Python 检查数组/向量中的一个值是否大于下一个值

检查列表的下一个元素是否与前一个相同

如何使用WebDriverWait()访问Selenium Python中具有相同类名称的下一个元素的值

当一行的值大于下一行时如何合并两行

如何在iOS中检查是否已导航到下一个UIViewController?

如何使用r中“下一个”组的第一个值?

如何在一个循环中合并表中的两行

DISTINCT语句如何合并一个表中的两行

检查pandas数据框中的下一个索引列值和相同值的连续长度

如何使用公式从Excel中的自定义列表中获取下一个值

在熊猫中合并两行(一个带有值,另一个NaN)

当值由斜杠分隔时,如何在 Excel 中拆分一个值并将其分成两行?

如何读取同一行中的下一个值?

如何检查数组中的值与其下一个数组是否包含在同一数组中

在一个SQL查询中合并两个表中的两列,并合并COUNT和SUM值

检查下一个值是否等于python循环中的当前值?

在PostgreSQL中,如何为一个不同的值取两行?

SQL-查找值相同或下一个最大值的所有行