You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用ClosedXML.Excel按条件复制Excel模板中的现有表格

用ClosedXML.Excel按年月条件从模板生成新表格的实现方案

前置准备

先通过NuGet安装ClosedXML包:

Install-Package ClosedXML

或使用.NET CLI:

dotnet add package ClosedXML

实现步骤与代码示例

以下是基于模板按年月分组生成新表格的完整逻辑,你可以根据自己的模板结构调整细节:

using ClosedXML.Excel;
using System;
using System.Linq;

class ExcelProcessor
{
    static void Main(string[] args)
    {
        // 加载本地模板文件
        var templateFilePath = @"D:\你的模板文件.xlsx";
        using var workbook = new XLWorkbook(templateFilePath);

        // 获取存储原始数据的工作表(替换成你模板里的数据源表名)
        var sourceSheet = workbook.Worksheet("原始数据");
        // 跳过表头行,获取所有数据行(假设表头在第1行)
        var dataRows = sourceSheet.RangeUsed().Skip(1).Rows();

        // 按年份+月份对数据分组(假设日期在A列,根据实际列调整)
        var groupedByMonth = dataRows.GroupBy(row => new
        {
            Year = row.Cell("A").GetValue<DateTime>().Year,
            Month = row.Cell("A").GetValue<DateTime>().Month
        });

        // 遍历每个分组,生成对应年月的工作表
        foreach (var group in groupedByMonth)
        {
            var newSheetName = $"{group.Key.Year}年{group.Key.Month}月";
            
            // 若已存在同名表则删除,避免冲突
            if (workbook.TryGetWorksheet(newSheetName, out var existingSheet))
            {
                workbook.Worksheets.Delete(existingSheet);
            }

            // 复制模板格式表(替换成你模板里的格式表名)
            var templateSheet = workbook.Worksheet("模板格式");
            var newSheet = workbook.Worksheets.Add(newSheetName);
            templateSheet.CopyTo(newSheet);

            // 将当前分组的数据填充到新表(假设从第2行开始填充数据)
            int targetRow = 2;
            foreach (var sourceRow in group)
            {
                // 按列复制数据,根据你的模板列顺序调整索引
                newSheet.Cell(targetRow, 1).Value = sourceRow.Cell(1).Value; // 日期列
                newSheet.Cell(targetRow, 2).Value = sourceRow.Cell(2).Value; // 数据列1
                newSheet.Cell(targetRow, 3).Value = sourceRow.Cell(3).Value; // 数据列2
                // 更多数据列依次添加...
                targetRow++;
            }
        }

        // 保存处理后的文件
        var outputFilePath = @"D:\按年月拆分结果.xlsx";
        workbook.SaveAs(outputFilePath);
    }
}

关键细节调整提示

  • 工作表与列匹配:替换代码中的工作表名称(如"原始数据"、"模板格式")和列索引,确保和你的模板结构一致。
  • 日期列处理:如果源数据的日期是文本格式,需先转换为DateTime类型,比如DateTime.Parse(row.Cell("A").GetValue<string>())。
  • 格式复制:CopyTo方法会完整复制模板的样式、列宽、公式等,若只需部分格式,可以单独复制特定单元格区域的样式。
  • 异常处理:可根据需求添加文件读取/写入的异常捕获逻辑,避免程序崩溃。

内容的提问来源于stack exchange,提问作者Trường Lã

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 00:25:54