SSIS 系列 - SSIS 电子表格 处理 正则表达式 LINQ
配套视频:
链接:https://pan.baidu.com/s/1WOEvesIUK2Hi4KB_-YJUKA
提取码:pdbq
场景
用户在共享路径存放一个每月销售情况的电子表格,需要系统导入表中. 文件名 "月销售_201902.xlsx"
设计
电子表格->直接写到到staging表, 再通过到ODS 表. 当成数据库两张表,一个张直接插入,一张表可能需要处理.
具体包步聚
|
1.日志开始 2.清空staging表 2.获得文件 (文件路径赋值给一个变量, 3.归档文件 4.加载文件至数据库Stg表 5.通过T-SQL从stg->ods 6.日志结束 |
1.LINQ 的用法
假设,文件夹是 D:\tmp\excel\Sales, 如何获得最新的一个电子表格
var ExcelFolder= Dts.Variables["v_Folder"].Value.ToString(); var ExcelRgex = Dts.Variables["v_FileRegex"].Value.ToString(); var FolderInfo = new DirectoryInfo(ExcelFolder); var fileinfo = FolderInfo.GetFiles().Where(e => Regex.IsMatch(e.Name, ExcelRgex) && e.Extension.ToLower() == ".xlsx").OrderByDescending(e => e.FullName).FirstOrDefault(); if (fileinfo != null) { Dts.Variables["v_FilePath"].Value = fileinfo.FullName; }
其中
var fileinfo = FolderInfo.GetFiles().Where(e => Regex.IsMatch(e.Name, ExcelRgex) && e.Extension.ToLower() == ".xlsx").OrderByDescending(e => e.FullName).FirstOrDefault();
就是获得指定目录 根据linq 表达式,找到可以 正则表式 含"月销售",并且扩展名是.xlsx" 按名字顺序降序排,取第一个
其实 转成T-SQL类似于
select top 1 * from 目录的所有文件 a
where a.Name like '%月销售%' and lower(e.extendion)='.xlsx'
order by e.fullname desc
2.Excel 路径需要设置成一个变量,因为每一次可能文件名不一样.
源码