【发布时间】:2019-08-21 10:25:40
【问题描述】:
我必须通过 SSIS 导入具有可变工作表名称的 ExcelSheets。 Sheetname 由 scripttask 确定并通过 User::Variable 传递给 ExcelSource。问题是数据/标题总是从第 11 行开始。
如何将“$A10:AB50”(必需的数据选择)之类的内容传递给 User::Variable 中传递的工作表名称?
我已经尝试将所需的数据选择字符串(例如“$A10:AB50”)传递给 OpenRowsetVariable、ExcelConnectionManager、ConnectionString...,但没有成功。我还尝试通过条件拆分跳过/拆分前 10 行,但找不到任何解决方法。
使用第二个 ConnectionManager 从定义的文件中获取数据并通过 sql-query(例如“select f1,f2... from [sheetname$a1:ab50]”)进行数据访问的测试确实非常有效。
这是 scripttask 确定工作表名称的方式:
ConStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FILEPATH + ";Extended Properties=\"Excel 12.0;HDR=" + HDR + ";IMEX=0\"";
OleDbConnection cnn = new OleDbConnection(ConStr);
cnn.Open();
DataTable dtSheet = cnn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
string sheetname = "";
foreach (DataRow drSheet in dtSheet.Rows)
{
// sheetname only
if (drSheet["TABLE_NAME"].ToString().Contains("$") && !drSheet["TABLE_NAME"].ToString().Contains("Print_Area"))
{
sheetname = drSheet["TABLE_NAME"].ToString();
// return sheetname
//MessageBox.Show(sheetname);
Dts.Variables["User::rSheetName"].Value = sheetname;
【问题讨论】:
标签: excel import ssis visual-studio-2017