首页 文章

使用SSIS导入空白Excel列

提问于
浏览
1

我正在创建一个SSIS包来将Excel文件(具有不同的布局)导入到具有150列的SQL Server表中 .

SSIS包有一个Foreach循环容器,其中有一个数据流任务,它有一个Excel源组件和一个OLE DB目标组件 .

将为每个Excel文件运行数据流任务,因此Excel源组件需要适用于每个文件 .

我已经设置了包含长度为255的150个Unicode字符串列的Excel Source组件,并且我将ValidateExternalMetadata设置为False,但是我收到错误:在测试时,无法在数据源中找到“列”F143“打包带有142列数据的Excel文件 .

我的问题是:如何让程序包忽略此错误并导入存在的列,还是有其他方法来处理上述情况?

4 回答

  • 0

    打开Excel Source任务的编辑器 . 在左侧窗格中,选择“错误输出” . 在列窗格下方是一行“将此值设置为选定的单元格:”,旁边有一个下拉列表 . 从下拉列表中选择“忽略失败” . 现在转到列窗格并选择“错误”列下的所有150行,然后单击下拉框旁边的“应用” . 这应该将所有Excel列设置为“忽略错误” . 点击“Ok”然后你应该好好去 .

  • 0

    在Excel源中,选择源类型为 SQL command 并使用以下命令(假设工作表名称为 Sheet1

    Select * from [Sheet1$A1:ET]
    

    ET 是index = 150的列,因此对于此查询,您强制 Excel Source 读取150列,即使它们包含一些空列 .


    有关使用动态标头导入Excel的其他信息,请按照以下答案操作:

  • 0

    尝试在Excel源代码中使用以下sql命令

    SELECT * FROM [Sheet1$A1:B]
    

    用第150列代替B代替 .

  • 0

    我希望这对于所有可能的Excel文件布局都足够了,而不是使用任意多列的SQL Server表,我重新设计了表格以包含 xlRowxlColumnxlValue 列 .

    然后我使用脚本组件作为我的数据流的源,使用以下C#代码:

    Excel.Application xlApp = new Excel.Application();
            xlApp.Visible = false;
            xlApp.DisplayAlerts = false;
            Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(filename, Password: "'");
            Excel.Worksheet xlWorkSheet = xlWorkBook.Worksheets[1] as Microsoft.Office.Interop.Excel.Worksheet;
    
            Excel.Range UsedRange = xlWorkSheet.UsedRange;
    
    
            foreach (Excel.Range c in UsedRange)
            {
                string val = Convert.ToString(c.Value2);
                if (val != "" && val != null)
                {
                    Output0Buffer.AddRow();
                    Output0Buffer.Row = c.Row;
                    Output0Buffer.Column = c.Column;
                    Output0Buffer.Value = val;
                }
            }
    

    这将循环遍历第一个工作表中的每个非空单元格,并将单元格的行,列和值输出到 Output0 ,然后将其插入到SQL表中 .

相关问题