强制Excel使用SQL查询运行宏

时间:2018-10-11 18:52:57

标签: sql-server excel ssis xlsm

我需要运行包含宏的Excel文件(.xls或.xlsm),它会减小其他excel文件的大小并将其另存为同一文件夹中的其他文件。当我从文件夹手动打开文件时,它可以正常工作,并立即运行并创建缩小的文件。

但是要求是从SQL查询中打开Excel并运行它。我正在尝试通过我的SQL查询中的这两种方法来做到这一点。

fake_im_arr[center[0] - radius:center[0] + (radius + 1),
            center[1] - radius:center[1] + (radius + 1)]

array([[0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1],
       [0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1],
       [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1],
       [0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1],
       [1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1],
       [1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0],
       [0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1],
       [1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0],
       [0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0],
       [1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0]])

mask[center[0] - radius:center[0] + (radius + 1),
     center[1] - radius:center[1] + (radius + 1)].astype('int')

array([[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0],
       [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
       [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
       [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
       [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
       [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
       [0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]])

np.where(mask, fake_im_arr, 0)[center[0] - radius:center[0] + (radius + 1),
                               center[1] - radius:center[1] + (radius + 1)]

array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0],
       [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0],
       [0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0],
       [1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1],
       [0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0],
       [0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0],
       [0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0],
       [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0],
       [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]])

dtsx软件包具有相同的逻辑来打开Excel并运行它,但是这些代码都不起作用。

1 个答案:

答案 0 :(得分:0)

使用xp_cmdshell时,启动的过程在SQL Server服务登录名的安全上下文中运行。该帐户可能未启用桌面交互功能,或者可能缺少Excel在启动时运行宏所需的其他权限。

有关xp_cmdshell的更多信息,请参见this xp_cmdshell article on the SQL Server Security Blog,其中包括不建议使用的建议:“通常来说,您必须避免使用xp_cmdshell,并且,如果可能,应该删除对其的任何依赖。” < / p>