使用ssis从文件夹中查找最新的excel文件

时间:2014-09-17 10:28:47

标签: sql-server ssis

我在一个文件夹中有一组excel文件。 excel文件名就像

ABC 2014-09-13.xlsx
ABC 2014-09-14.xlsx
ABC 2014-09-15.xlsx

我需要从最新的excel文件中获取数据并使用ssis包将其加载到表中。

2 个答案:

答案 0 :(得分:0)

这可能不是最短的答案,但会对你有帮助。

步骤:

  1. 创建For-each loop,以获取所有excel sheets。将所有Excel工作表名称插入table
  2. 创建变量。在Excel日期中将其值分配为MAX()
  3. 添加第二个Fore-each loop。就像第一个循环一样,选择所有excel表1 1,将每个文件名与Variable值进行比较。加载与之匹配的excel。

答案 1 :(得分:0)

由于这是一个重复的问题,无论如何我会回答一些更改或其他信息。

  1. 您应该已创建要导入的Excel表格,并将连接管理器添加到包中。
  2. 创建2个变量 MainDir ,其中存在Excel文件, ExcelFile 以保存上一个文件的全名。
  3. 脚本任务添加到包中。打开它,然后在“脚本”标签中添加ReadOnlyVariables = User::MainDirReadWriteVariables = User::ExcelFile
  4. 按编辑脚本...按钮,然后在新窗口中粘贴此代码:
  5. 进入Main

     string fileMask = "*.xlsx";
     string mostRecentFile = string.Empty;
     string rootFolder = string.Empty;
    
     rootFolder = Dts.Variables["User::MainDir"].Value.ToString();     
     System.IO.DirectoryInfo directoryInfo = new System.IO.DirectoryInfo(rootFolder);     
     System.IO.FileInfo mostRecent = null;
    
     System.IO.FileInfo[] legacyArray = directoryInfo.GetFiles(fileMask, System.IO.SearchOption.TopDirectoryOnly);    
     Array.Sort(legacyArray, (f2, f1) => f2.Name.CompareTo(f1.Name));
    
     mostRecent = legacyArray[legacyArray.Length - 1];
    
     if (mostRecent != null)
     {
          mostRecentFile = mostRecent.FullName;
     }
    
     Dts.Variables["User::ExcelFile"].Value = mostRecentFile;
     Dts.TaskResult = (int)ScriptResults.Success;`
    
    1. 创建 Excel连接管理器,然后在编辑模式下选择Excel文件路径到某些Excel Excel版本,如果需要,请保留第一行已选中列名。
    2. Excel连接管理器的属性中查找表达式,并使用值@[User::ExcelFile]添加属性 ExcelFilePath
    3. 放入数据流任务,连接脚本任务。
    4. 将Excel源添加到数据流任务中。打开编辑器。选择之前创建的Excel Connection ManagerData access mode更改为SQL命令并添加此行(确保excel文件表名称为Sheet1):SELECT * FROM [Sheet1$]。还要检查是否在“列”选项卡中选择了所有必需的列。
    5. 最后一个组件是 OLE DB目标,您必须与Excel Source组件连接。添加连接管理器,选择要插入的表的表和映射。
    6. 这就是你需要做的就是插入excel ......