我有以下要求,
早上9点运行的SQL Server 2008预定作业。此作业应发送包含工作簿(工作簿1)中的数据的电子表格和下一个工作簿(工作簿2)中附带的图表。数据必须具有SQL表中的值。图表必须反映工作簿中的值1。此表应邮寄给n个用户。 n个用户甚至不知道sql server,也不知道服务器的用户名和密码。他们必须只有两个工作簿的电子表格。
我决定做以下
1)创建一个将数据格式化为表格的存储过程2)调用SSIS,将数据复制到excel的workbook1中3)在同一个excel的工作簿2中创建图形
第1点和第2点,我已经完成了。
在活动1和2之后,我将在excel中有类似下面的内容
Workbook1:
Date | Column A | Column B | Column C |
10-7-14 | 0983883 | 09433344 | 4443333 |
11-7-14 | 0986444 | 06875544 | 4689073 |
我无法进行活动3.活动3必须接受上表中的值并在workbook2中创建图表
我知道可以使用SSRS完成,但我想了解其他方法,因为我们只有SSIS和SSRS完全超出范围。由于某些原因,SSRS仅限于在我们的系统中使用。
我尝试了各种方法来做到这一点。 (在SSIS的Excel模板的工作簿2中创建了一个动态图形,让传递给工作簿1的值渲染图形,但它不能令人遗憾地工作。)。我无法使用我提供给SSIS的空Excel模板创建动态图表。
Excel是这里的问题,它不允许任何预定义的图形。它总是期望一个值来创建图形。
我也可以选择VBA宏选项,(比如创建一个按钮,让用户点击按钮生成图形),但我不确定它是否可行?
Excel专家请帮忙!
我可能听起来像一个业余爱好者,但请原谅我,因为我是SSIS的新手,没有一个同事知道如何做到这一点,我无法得到任何与我所做的研究,这有点但令人沮丧。
答案 0 :(得分:0)
我做了类似的工作但是使用excel作为SSAS的前端但是sql server的概念类似。
听起来你会发现excel中的数据透视表很有用。这是因为excels根据数据透视表的结果动态呈现图表 请注意,数据透视表允许过滤,这意味着用户可以过滤掉他们不需要的部分数据。或者,如果用户想要改变图表的外观,例如按月销售而非按季度销售,这对他们来说非常容易。所以基本上结果的演示文稿是在excel中动态完成的。
要根据外部数据创建一个,请执行以下操作: 数据 - >来自其他来源 虽然您可能希望将结果集限制为用于报告的小型只读表,但excel可以查询sql server。 请注意,数据源信息保存在文件中,excel可以使用硬编码的用户名和密码或窗口的域登录。理想情况下,您希望使用域登录而不是通用用户名和密码
因此解决方案变得更像以下内容:
唯一的缺点是用户只能看到当前数据集的副本。
答案 1 :(得分:0)
由于我不了解您的工作簿结构的细节,您可能需要调整以下vba代码(因为子名称建议将其放在工作簿的Open事件中):
Private Sub Workbook_Open()
Dim wb As Workbook
Dim ws As Worksheet
Dim ws2 As Worksheet
Dim LastRow As Long
Dim LastColumn As Long
Dim LastColumnLetter As String
Set wb = ThisWorkbook
Set ws = wb.Worksheets("Sheet1")
Set ws2 = wb.Worksheets("Sheet2")
Application.ScreenUpdating = False
LastRow = ws.Cells(Rows.Count, "A").End(xlUp).Row
LastColumn = ws.Cells(2, Columns.Count).End(xlToLeft).Column
LastColumnLetter = Chr(LastColumn + 64)
ws2.Activate
ws2.ChartObjects("Chart 1").Activate
ActiveChart.SetSourceData Source:=ws.Range("A1:" & LastColumnLetter & LastRow)
ws2.Range("A1").Select
Application.ScreenUpdating = True
End Sub
此代码在打开工作簿并首先尝试查找数据表占用的范围时执行,然后更新图表的数据源。我假设你的数据在Sheet1中并从单元格A1开始,而你的图表(图1)在Sheet2中。