SSRS用户选择Excel文件进行数据上传

6mw9ycah  于 2023-11-20  发布在  其他
关注(0)|答案(1)|浏览(182)

我有一个报告的要求,其中作为选择参数/过滤器的一部分,用户还选择要上传的Excel文件。然后将Excel中的数据用作查询的一部分。
我的问题是,这是可能的,你如何设置选择参数来选择文件?提前感谢。
我搜索和调查了各种选择,但没有找到解决方案

bxpogfeg

bxpogfeg1#

**提示:**这个答案有很多事情,你应该避免安全,这样做在你自己的风险!

要获取文件列表,您可以使用xp_xmlshell执行命令,您需要在服务器上允许此操作,因为默认情况下它是关闭的。除此之外,您可以执行像这样简单的操作。

DECLARE @filespec varchar(1000) = '\\myServer\MyFolder\UploadsToSQL\MyFiles\*.xlsx'
DECLARE @cmd varchar(1000) = 'dir ' + @filespec + ' /b'

exec xp_cmdshell @cmd

字符串
如果你使用它作为数据集查询,它将返回一个匹配文件的列表,你可以使用它来填充你的参数下拉列表。
选择其中一个文件后,假设参数名为@file,则可以执行以下操作来读取数据
注意:我已经设置了一个登录(AceDriverLogin)与所有所需的访问,以便这一工作。

DECLARE @file varchar(1000) = '\\myServer\MyFolder\UploadsToSQL\MyFiles\MyTestFile.xlsx'

DECLARE @XLSelect varchar(2000)
SET @XLSelect =
        'SELECT * 
         FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',''Excel 12.0;Database=' + @file + ';HDR=YES'',''SELECT * FROM [Sheet1$]'') '

        exec (@XLSelect) as login = 'AceDriverLogin'


这将返回“Sheet 1”的内容
如果你需要对结果做更多的工作,那么你需要创建一个临时表来插入数据,然后你可以对临时表做你喜欢的事情。
这样的事情

DECLARE @file varchar(1000) = '\\myServer\MyFolder\UploadsToSQL\MyFiles\MyTestFile.xlsx'

CREATE TABLE #xlData ([FirstColumn] varchar(100), [SecondColumn] varchar(100), [ThirdColumn] varchar(100))

DECLARE @XLSelect varchar(2000)
SET @XLSelect =
        'INSERT INTO #xlData ([FirstColumn], [SecondColumn], [ThirdColumn]) ' +
        'SELECT [FirstColumn], [SecondColumn], [ThirdColumn]
         FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',''Excel 12.0;Database=' + @file + ';HDR=YES'',''SELECT * FROM [Sheet1$]'') '

        exec (@XLSelect) as login = 'AceDriverLogin'

SELECT * FROM #xlData

相关问题