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

问题描述 投票:0回答:1

我需要一份报告,作为选择参数/过滤器的一部分,用户还选择要上传的 Excel 文件。然后,Excel 中的数据将用作查询的一部分。

我的问题是,这可能吗?如何设置选择参数来选择文件? 预先感谢。

我搜索并研究了各种选项,但没有找到解决方案

excel reporting-services
1个回答
0
投票

警告: 为了安全起见,这个答案有很多你应该避免的事情,这样做的风险由你自己承担!

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

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'

这将返回“Sheet1”的内容

如果您需要对结果进行更多处理,那么您需要创建一个临时表来插入数据,然后您可以对临时表执行您喜欢的操作。

类似这样的事情

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
© www.soinside.com 2019 - 2024. All rights reserved.