SSIS Excel导入 - 工作表变量或通配符?
问题描述:
我有一个SSIS数据导入包,它使用源Excel电子表格,然后将数据导入到SQL Server数据库表中。由于Excel文件的工作表名称每天都在更改,因此我无法自动执行此过程。所以,我必须在每天运行导入之前手动更改工作表名称。作为一个警告,永远不会有任何其他工作表。SSIS Excel导入 - 工作表变量或通配符?
我可以为工作表名称创建一个变量吗? 我可以使用通配符而不是工作表名称吗? 在启动导入作业之前,创建Excel宏还是更改工作表名称会更好吗?
答
如果您使用SSIS导入工作表,您可以使用脚本任务来查找工作表的名称,然后更改名称或其他任何您需要执行的操作,以使其适合导入的其余部分。下面是我发现here
Dim excel As New Microsoft.Office.Interop. Excel.ApplicationClass
Dim wBook As Microsoft.Office.Interop. Excel.Workbook
Dim wSheet As Microsoft.Office.Interop. Excel.Worksheet
wBook = excel.Workbooks.Open
wSheet = wBook.ActiveSheet()
For Each wSheet In wBook.Sheets
MsgBox(wSheet.Name)
Next
在MSGBOX线查找表的例子在那里你可以更改名称,或者报到另一个进程
答
我用后续的脚本任务(C#):
System.Data.OleDb.OleDbConnection objConn;
DataTable dt;
string connStr = ""; //Use the same connection string that you have in your package
objConn = new System.Data.OleDb.OleDbConnection(ConnStr);
objConn.Open();
dt = objConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbShemaGuid.Tables,null);
objConn.Close();
foreach(DataRow r in dt.Rows)
{
//for some reason there is always a duplicate sheet with underscore.
string t = r["TABLE_NAME"].ToString();
//Note if more than one sheet exist this will only capture the last one
if(t.Substring(t.Length-1)!="_")
{
Dts.Variables["YourVariable"].Value = t;
}
}
然后在SSIS中,我添加了另一个变量来构建我的SQL。
新的变量 “从选择* [” + “您的变量” + “]”
最后设置你的数据源到Excel源是SQL变量。
我已经使用了类似的C#,但是我需要在它们上用下划线过滤掉额外的表格。 – KeithL