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

如何在C#中合理读取Excel行数据并拼接为完整日期格式

解决方案

提供两种可直接落地的实现方式,按需选择即可:

C# 实现(基于EPPlus库)

优先推荐用EPPlus处理Excel,无需依赖本地安装Office,步骤如下:

  • 先安装EPPlus NuGet包,注意非商业场景可免费使用5.x及以下版本
  • 读取逻辑示例代码如下:
using OfficeOpenXml;
using System;
using System.IO;

class ExcelDateReader
{
    static void Main()
    {
        // 请替换为你的Excel文件路径
        var filePath = @"C:\你的文件路径\test.xlsx";
        ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
        
        using (var package = new ExcelPackage(new FileInfo(filePath)))
        {
            var worksheet = package.Workbook.Worksheets[0]; // 取第一个工作表
            int rowCount = worksheet.Dimension.End.Row;
            
            for (int row = 1; row <= rowCount; row++)
            {
                // 读取R列(第18列)的年月信息,示例格式为"2018.01",可根据实际格式调整
                string yearMonth = worksheet.Cells[row, 18].Text?.Trim();
                if (string.IsNullOrEmpty(yearMonth)) continue;
                
                // 拆分年和月
                var ymParts = yearMonth.Split('.');
                if (ymParts.Length != 2) continue;
                string year = ymParts[0];
                string month = ymParts[1];
                
                // 读取C列(第3列)的日信息
                string day = worksheet.Cells[row, 3].Text?.Trim();
                if (string.IsNullOrEmpty(day)) continue;
                
                // 拼接成要求的日期格式
                string fullDate = $"{day.PadLeft(2, '0')}.{month.PadLeft(2, '0')}.{year}";
                // 可直接输出或者写入其他单元格,示例写入D列对应行
                worksheet.Cells[row, 4].Value = fullDate;
            }
            // 保存修改后的文件
            package.SaveAs(new FileInfo(@"C:\你的文件路径\output.xlsx"));
        }
    }
}
  • 如果需要处理多列,可扩展列遍历逻辑,批量拼接对应列的日信息和R列年月即可。

Excel VBA 脚本方案

如果需要直接在Excel内处理,用下面的脚本即可:

  1. 打开目标Excel文件,按Alt+F11调出VBA编辑器
  2. 右键点击当前工作簿,选择「插入」-「模块」
  3. 粘贴如下代码:
Sub 拼接完整日期()
    Dim lastRow As Long
    Dim i As Long
    Dim yearMonth As Variant
    Dim dayStr As String
    Dim fullDate As String
    
    lastRow = Cells(Rows.Count, "R").End(xlUp).Row ' 取R列最后有数据的行号
    
    For i = 1 To lastRow
        yearMonth = Split(Cells(i, "R").Text, ".") ' 拆分R列的年月,分隔符可根据实际修改
        If UBound(yearMonth) = 1 Then
            dayStr = Cells(i, "C").Text ' 读取C列的日
            If dayStr <> "" Then
                ' 拼接为dd.mm.yyyy格式
                fullDate = Format(dayStr, "00") & "." & Format(yearMonth(1), "00") & "." & yearMonth(0)
                ' 可修改为你需要写入的列,示例写入D列
                Cells(i, "D").Value = fullDate
                ' 如果需要转置为规整表格,可在这部分扩展写入逻辑
            End If
        End If
    Next i
End Sub
  1. 按F5运行脚本即可完成批量处理。

注:如果你的年月列分隔符不是.,可把代码里的Split分隔符替换为实际的分隔符即可。

内容的提问来源于stack exchange,提问作者Plarent Haxhidauti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:57:00