在使用NPOI操作Excel时,可以通过以下步骤对多列的重复行进行合并:

  1. 首先,使用NPOI读取Excel文件,获取工作表和数据行。

  2. 创建一个字典或哈希表,用于存储每一行的数据。

  3. 遍历数据行,将每一行的指定列的数据作为键,将整行数据作为值存储到字典中。

  4. 创建一个新的工作表,并将字典中的数据写入新的工作表。

  5. 使用NPOI将新的工作表保存为Excel文件。

下面是一个示例代码,演示了如何使用NPOI对多列的重复行进行合并:

using System;
using System.Collections.Generic;
using System.IO;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;

public class Program
{
    public static void Main(string[] args)
    {
        // 读取Excel文件
        string filePath = "input.xls";
        using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
        {
            // 创建工作簿
            IWorkbook workbook = new HSSFWorkbook(fs);
            // 获取第一个工作表
            ISheet sheet = workbook.GetSheetAt(0);
            // 创建字典
            Dictionary<string, IRow> rowsDict = new Dictionary<string, IRow>();
            
            // 遍历数据行
            for (int i = 1; i <= sheet.LastRowNum; i++)
            {
                IRow row = sheet.GetRow(i);
                // 获取指定列的数据
                string key = row.GetCell(0).ToString() + row.GetCell(1).ToString();
                
                // 如果字典中已存在该数据,则合并行
                if (rowsDict.ContainsKey(key))
                {
                    IRow existingRow = rowsDict[key];
                    // 合并单元格
                    existingRow.GetCell(2).CellStyle = row.GetCell(2).CellStyle;
                    existingRow.GetCell(3).CellStyle = row.GetCell(3).CellStyle;
                    // 设置合并后的单元格值
                    existingRow.GetCell(2).SetCellValue(existingRow.GetCell(2).ToString() + ", " + row.GetCell(2).ToString());
                    existingRow.GetCell(3).SetCellValue(existingRow.GetCell(3).ToString() + ", " + row.GetCell(3).ToString());
                }
                else
                {
                    // 将行数据存储到字典中
                    rowsDict[key] = row;
                }
            }
            
            // 创建新的工作表
            ISheet newSheet = workbook.CreateSheet("Merged Rows");
            int rowIndex = 0;
            
            // 将字典中的数据写入新的工作表
            foreach (var kvp in rowsDict)
            {
                IRow newRow = newSheet.CreateRow(rowIndex++);
                IRow row = kvp.Value;
                
                // 复制每一列的数据
                for (int i = 0; i < row.LastCellNum; i++)
                {
                    ICell cell = newRow.CreateCell(i);
                    cell.CellStyle = row.GetCell(i).CellStyle;
                    cell.SetCellValue(row.GetCell(i).ToString());
                }
            }
            
            // 保存新的Excel文件
            string newFilePath = "output.xls";
            using (FileStream newFs = new FileStream(newFilePath, FileMode.Create, FileAccess.Write))
            {
                workbook.Write(newFs);
            }
            
            Console.WriteLine("Rows merged successfully!");
        }
    }
}

上述代码中,假设Excel文件中的数据从第二行开始,且要对第一列和第二列的重复行进行合并。合并后的结果将存储在新的工作表中,并保存为output.xls文件。根据实际情况,你需要调整代码中的列索引和文件路径

C#NPOI 对多列的重复行进行合并

原文地址: https://www.cveoy.top/t/topic/iqmp 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录