2017-08-16 88 views
2

我有一个SSIS数据导入包,它使用源Excel电子表格,然后将数据导入到SQL Server数据库表中。由于Excel文件的工作表名称每天都在更改,因此我无法自动执行此过程。所以,我必须在每天运行导入之前手动更改工作表名称。作为一个警告,永远不会有任何其他工作表。SSIS Excel导入 - 工作表变量或通配符?

我可以为工作表名称创建一个变量吗? 我可以使用通配符而不是工作表名称吗? 在启动导入作业之前,创建Excel宏还是更改工作表名称会更好吗?

回答

0

如果您使用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线查找表的例子在那里你可以更改名称,或者报到另一个进程

+0

我已经使用了类似的C#,但是我需要在它们上用下划线过滤掉额外的表格。 – KeithL

0

我用后续的脚本任务(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变量。