使用 SSIS 加载最新的 Excel 文件:脚本任务调试

Posted

技术标签:

【中文标题】使用 SSIS 加载最新的 Excel 文件:脚本任务调试【英文标题】:Loading Most Recent Excel File with SSIS: Script Task Debugging 【发布时间】:2020-10-15 22:38:54 【问题描述】:

我尝试在文件夹中获取“上次修改”的 excel 文件并将其加载到 SSIS 中。我找到了一个 C# 代码来获取文件夹路径中最新 Excel 工作表的名称,并将其复制到脚本任务中。代码是:


using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.IO;



namespace ST_2e01f076aa4f46d692cf4b47f5587da9.csproj

    [System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
    public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
    

        #region VSTA generated code
        enum ScriptResults
        
            Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
            Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
        ;
        #endregion

        public void Main()
        

            // TODO: Add your code here
            var directory = new DirectoryInfo(Dts.Variables["User::VarFolderPath"].Value.ToString());

            FileInfo[] files = directory.GetFiles();
            DateTime lastModified = DateTime.MinValue;

            foreach (FileInfo file in files)
            
                if (file.LastWriteTime > lastModified)
                
                    lastModified = file.LastWriteTime;
                    Dts.Variables["User::VarFileName"].Value = file.ToString();
                
            

            MessageBox.Show(Dts.Variables["User::VarFileName"].Value.ToString());


            Dts.TaskResult = (int)ScriptResults.Success;
        
    

但是,当我运行脚本任务对其进行测试时,我收到以下错误:

我在代码中使用了错误显示的项目名称,但仍然无法正常工作。您能否帮我解决它,因为我是 SSIS 和 C# 的新手。谢谢

【问题讨论】:

【参考方案1】:

这是使用 Linq 的答案。

首先添加这些命名空间

using System.Collections.Generic; //This gets you list
using System.Linq; //This allows you linq functions

//Here is your code
System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(@"D:\Temp");
List<System.IO.FileInfo>    fi = di.EnumerateFiles().ToList();
Dts.Variables["VarFileName"].Value = fi.Where(i=>i.Extension.ToLower()==".xls")
                .OrderByDescending(i => i.LastWriteTime)
                .Select(i => i.FullName).FirstOrDefault();

【讨论】:

以上是关于使用 SSIS 加载最新的 Excel 文件:脚本任务调试的主要内容,如果未能解决你的问题,请参考以下文章

SSIS 加载 Excel 文件

使用 SSIS 脚本任务刷新 Excel

如何遍历 Excel 文件并使用 SSIS 包将它们加载到数据库中?

使用 SSIS 将动态 Excel 表格加载到 SQL 中

将数据从平面文件加载到 Sql Server 表,并使用 SSIS 导出到 excel

无法使用 SSIS 快速加载选项从 Excel 源加载 Netezza 中的数据