C# 使用C在脚本任务SSI中获取excel工作表#

C# 使用C在脚本任务SSI中获取excel工作表#,c#,excel,ssis,script-task,C#,Excel,Ssis,Script Task,我是C#的新手。但我正在编写一个SSIS C#脚本,它必须处理文件列表并重命名每个文件的表。 我有一个excel文件列表,可以是.xls或.xlsx格式。我正在SSIS脚本任务中编写一个c#脚本,以循环遍历文件名和工作表名,并希望使用一些硬编码值重命名工作表名,例如:文件夹 文件1.xls:第1页,第2页,第3页 ,file2.xls:第1页,第2页 ,file3.xls:sheet1,sheet2,sheet3,sheet4 因此,每次如果一个名为sheet1的图纸名称可用,则应将其重命名为A

我是C#的新手。但我正在编写一个SSIS C#脚本,它必须处理文件列表并重命名每个文件的表。 我有一个excel文件列表,可以是.xls或.xlsx格式。我正在SSIS脚本任务中编写一个c#脚本,以循环遍历文件名和工作表名,并希望使用一些硬编码值重命名工作表名,例如:文件夹 文件1.xls:第1页,第2页,第3页 ,file2.xls:第1页,第2页 ,file3.xls:sheet1,sheet2,sheet3,sheet4

因此,每次如果一个名为sheet1的图纸名称可用,则应将其重命名为ABC,sheet2可用,则应为DEF,如果其中一个文件缺少sheet3,则应将其忽略。我已经写了一段代码,在那里我被困在获取工作表名称。请帮助我修复代码或提出更好的建议,如果你有任何

添加了这些名称空间

using System.IO;
using System.Data.OleDb;
using System.Data.SqlClient;

Added this in Main method

public void Main()
        {
            // TODO: Add your code here
            String FolderPath = Dts.Variables["User::SourceFolderPath"].Value.ToString();
            String fileFullPath = "";
            var directory = new DirectoryInfo(FolderPath);
            FileInfo[] files = directory.GetFiles();
            foreach (FileInfo file in files)
            {
                fileFullPath = FolderPath + "\\" + file.Name;

                //Create Excel Connection
                string ConStr;
                string HDR;
                HDR = "YES";
                ConStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileFullPath + ";Extended Properties=\"Excel 12.0;HDR=" + HDR + ";IMEX=0\"";
                string sheetname;
                sheetname = "";
                    
    



        #region ScriptResults declaration
                /// <summary>
                /// This enum provides a convenient shorthand within the scope of this class for setting the
                /// result of the script.
                /// 
                /// This code was generated automatically.
                /// </summary>
        enum ScriptResults
        {
            Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
            Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
        };
        #endregion

    }
使用System.IO;
使用System.Data.OleDb;
使用System.Data.SqlClient;
在Main方法中添加了这个
公共图书馆
{
//TODO:在此处添加代码
字符串FolderPath=Dts.Variables[“User::SourceFolderPath”].Value.ToString();
字符串fileFullPath=“”;
var directory=newdirectoryinfo(FolderPath);
FileInfo[]files=目录.GetFiles();
foreach(文件中的文件信息文件)
{
fileFullPath=FolderPath+“\\”+file.Name;
//创建Excel连接
字符串构造;
字符串HDR;
HDR=“是”;
ConStr=“Provider=Microsoft.ACE.OLEDB.12.0;数据源=“+fileFullPath+”“扩展属性=\”Excel 12.0;HDR=“+HDR+”“IMEX=0\”;
字符串名称;
sheetname=“”;
#区域脚本结果声明
/// 
///这个枚举在这个类的范围内提供了一个方便的速记来设置
///脚本的结果。
/// 
///此代码是自动生成的。
/// 
枚举脚本结果
{
Success=Microsoft.SqlServer.Dts.Runtime.dtsesecresult.Success,
Failure=Microsoft.SqlServer.Dts.Runtime.dtsesecresult.Failure
};
#端区
}
事先非常感谢。 顺致敬意,
Raju

您可以在SQL server上安装东西吗?因为以您建议的方式与Excel文件交互需要Excel Interop的主Interop程序集,它可以从可再发行的软件包中安装。OLEDB无法管理类似的工作表。您好@romeozor,我添加了microsoft.office.inte的参考rop.excel在脚本任务中现在处理excel。另外,我想通知您,大约有10个不同的excel工作簿,每个都有4-5张工作表。这很好,但是SQL Server需要通过上述可再发行包安装该引用,否则任务将无法运行。您能确认您能够并允许安装,否则您需要找到不同的解决方案。嗨@romeozor,不,我不允许安装。您有什么不同的建议吗?