Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用SSIS删除excel文件的顶行_Sql_Excel_Ssis - Fatal编程技术网

Sql 使用SSIS删除excel文件的顶行

Sql 使用SSIS删除excel文件的顶行,sql,excel,ssis,Sql,Excel,Ssis,我有一个excel文件,它有一个标题行,这是我要删除的行。thsi文件中的标题行是A1到W1合并为一个的单元格。这在我尝试读取文件时会导致问题,因为我需要列名。正确的列名存在于文件的第二行中,这就是为什么我要删除第一行 为了实现这一点,我认为我可以在SSIS中使用“Excel源”项,因为它支持SQL选项来编写查询。我想做的是这样的: SELECT * from ExcelFile WHERE Row > 1 我的文件只有A列到W列中的数据 我不知道我可以在查询中使用什么语法来实现这一点。

我有一个excel文件,它有一个标题行,这是我要删除的行。thsi文件中的标题行是A1到W1合并为一个的单元格。这在我尝试读取文件时会导致问题,因为我需要列名。正确的列名存在于文件的第二行中,这就是为什么我要删除第一行

为了实现这一点,我认为我可以在SSIS中使用“Excel源”项,因为它支持SQL选项来编写查询。我想做的是这样的:

SELECT * from ExcelFile WHERE Row > 1
我的文件只有A列到W列中的数据


我不知道我可以在查询中使用什么语法来实现这一点。Excel源项中的查询生成器允许我对列执行许多操作,但我看不到对行执行任何操作的选项。在线搜索和使用帮助并没有让我有任何进展

您不需要使用语法。 转到控制流。。 拉入数据流任务。 添加excel文件源…添加连接管理器 使用excel表格。 打开连接管理器,然后选中显示的框。
第一行中的列名。就这样,添加您的目的地。

这些解决方案都不起作用,因为Excel驱动程序会被合并的第一行弄糊涂。您将无法使用任何驱动程序功能(如跳过第一行)来执行此操作。您需要运行一些脚本来打开Excel文件并手动删除该行

此站点上有一些基本的示例脚本:

下面的代码是根据snsingh在该站点编写的代码改编而成的

您显然希望使用连接管理器属性,而不是硬编码路径

需要在SSIS服务器上安装Excel才能使其工作-这是使用Excel自动化的唯一方法

Dim filename As String
Dim appExcel As Object
Dim newBook As Object
Dim oSheet1 As Object

appExcel = CreateObject("Excel.Application")
filename = "C:\test.xls"
appExcel.DisplayAlerts = False

newBook = appExcel.Workbooks.Open(filename)
oSheet1 = newBook.worksheets("Sheet1")
oSheet1.Range("A1").Entirerow.Delete()


newBook.SaveAs(filename, FileFormat:=56)
appExcel.Workbooks.Close()
appExcel.Quit()

看看这里:这可能有用,但如果我使用它,我希望通过编程获得工作表的名称(只有1个)和数据列。如果源文件发生更改,我不想更改代码。你有什么建议可以这样做,并按照你的建议使用吗?我在回答中更多地考虑了#2。使用条件拆分检查标题内容,只要标题内容保持不变。但是,下面的答案也有一个很好的解决方案,因为第一行总是标题。您能告诉我如何使平面文件源连接到excel文件吗?平面文件源用于文本文件,无法读取excel文件,除非有一个我不知道的技巧。我正在试验这个和那个选项,它似乎告诉连接管理器是否要查找标题。如果我取消选中该框,列名将不会显示。看起来是这样的——如果我不勾选这个框,我就回到原点了。如果我打开文件并手动删除标题行,然后保存并关闭,当我取消选中该框时,我会得到上传图片中的内容。如果我选中该复选框,我会得到想要的结果,但我必须手动修改该文件,这正是我试图避免的。您可以将Excel数据源的OpenRowset属性(属性窗口,自定义属性部分中的OpenRowset)设置为与Sheet1$a2:m类似的值,其中a是包含数据的第一列,m是数据的最后一列,2是数据前有标题的行。数据应该从下一行开始。所以您可以设置它,记住是否要检查第一行中的列名。