从不同的 Excel 工作表自动导入 SQL 表

Posted

技术标签:

【中文标题】从不同的 Excel 工作表自动导入 SQL 表【英文标题】:Auto Importing into TSQL Table from different Excel sheets 【发布时间】:2016-11-23 21:59:46 【问题描述】:

我正在尝试从 12 个不同的文件中自动导入数据,每个文件有 6-10 张纸。是否有一个过程可以通过“选定的工作表”仅从每个文件中自动提取数据并加载到单个文件(或 SQL 表)中。

例子:

File A with Columns "Name" Column "Amount". 
File A has total of 4 sheets (2 sheets named "ABC Trend", "DEF Trend")
File B - 6 sheets (2 sheets named "XXX Trend", "DEF Trend")

输出:

import into Table C (or File C - One Sheet) with 'Trend' data

"Name", "Amount", "FromFile", "FromSheet"
Jo,      56.3 ,      A ,     ABC Trend
Mary,    16.3 ,      A ,     ABC Trend
Dave,    26.3 ,      A ,     ABC Trend
Jim,     26.3 ,      A ,     DEF Trend
Mary,    16.3 ,      A ,     DEF Trend
Dave,    26.3 ,      A ,     DEF Trend
Shu,     16.3 ,      B ,     XXX Trend
Marie,   16.3 ,      B ,     XXX Trend
Tom,     26.3 ,      B ,     XXX Trend
Jack,    26.3 ,      B ,     DEF Trend
Ma,      16.3 ,      B ,     DEF Trend
Doe,     26.3 ,      B ,     DEF Trend

*Ideal would be to load into a SQL table

任何帮助将不胜感激。

【问题讨论】:

如果您安装了 sql server,您还将拥有“导入和导出数据向导”,可通过开始菜单访问。这就是我会使用的。 “导入和导出”一次可以处理一个文件,而且它不允许我选择数据行 - 我的标题在第 5 行,数据从第 6 行开始到第 48 行 - 其余所有内容第 48 行下是备份数据或公式。我怎样才能只选择第 5-48 行和 5 作为我的标题?...谢谢 应该有一个“要跳过的标题行”选项。导入/导出数据向导只是制作 ssis 包的快捷方式,所以如果您使用 Juans 方法,您还会发现这是数据源上的一个选项。 【参考方案1】:

选项 1:SSIS

如果您尝试每天/每周/每月运行一个重复的过程,我建议使用集成服务 SSIS

这是一个很好的教程: https://www.simple-talk.com/sql/ssis/moving-data-from-excel-to-sql-server-10-steps-to-follow/

您可以使用 SQL 代理运行此作业。

选项 2:OLEDB 连接

第一步:下载《2007 Office System 驱动程序:数据连接组件》 " 如果没有安装https://www.microsoft.com/en-us/download/details.aspx?id=23734

第 2 步:启用即席分布式查询

       EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO

EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO


   EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 1
GO

EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParameters' , 1
GO

第 3 步:运行查询

SELECT  exl.name
INTO #myExcelData
FROM OPENROWSET ('Microsoft.Ace.OLEDB.12.0'
,'Excel 12.0; Database=C:\Projects\***\A.xlsx; Extended Properties=''EXCEL 12.0;HDR=NO;IMEX=1'
,'SELECT * FROM [Sheet1$]') AS exl

选项 3:向导 如果这是一次性过程,您可以使用向导

【讨论】:

谢谢 Juan .. 但这不允许我选择数据行 - 我的标题在第 5 行,数据从第 6 行开始到第 48 行 - 第 48 行下的其余所有内容都是备份数据或公式.我怎样才能只选择第 5-48 行和 5 作为我的标题?...谢谢【参考方案2】:

试试 Juan 的建议,但要这样做:

SELECT * FROM [SheetName$A1:B2]

这对你有用吗?

【讨论】:

以上是关于从不同的 Excel 工作表自动导入 SQL 表的主要内容,如果未能解决你的问题,请参考以下文章

C# winform中如何通过新建EXCEL工作簿把SQL SERVER数据库中多张表导入EXCEL不同的sheet当中啊

自动将数据从 CSV 导入到 excel/计算表

如何将 Excel 数据从不同的工作表导出到 SQL-SERVER 数据库?

从 SQL Server DB 更新单独工作表中的数据后自动刷新 Excel 2007 数据透视表

从 Excel 工作表生成 SQL 脚本

如何使用 C# 将多个 Excel 工作表导入 SQL 表?