我需要为各级管理人员创建每周 PowerPoint 演示文稿,以便他们了解我部门跟踪的几类行动项目的状态。在正常运营期间,大多数这些行动项目都是通过几个 Excel 电子表格进行跟踪的。每个行动项目类别都有一个单独的电子表格。
(是的,我知道我们应该使用不同的应用程序,并将这类内容存储在数据库中,而不是电子表格中。这是在工作中,但是当我们被困在 Excel 中时,我仍然需要一个临时解决方案。)
用于跟踪行动项目的电子表格非常详细,但演示需要简短,因此我们通常会省略演示中的一些细节。以下是跟踪电子表格中常见的一些示例字段。粗体项目是我们想在演示中显示的唯一字段。
- ID
- 标题
- 描述
- 地位
- 进度记录
- 现任责任方
- 受影响的客户
- 开始日期
- 到期日
- 项目里程碑和里程碑日期
- 参考文献
目前,创建演示文稿的过程需要手动浏览 Excel 电子表格并将数据复制/粘贴到 PowerPoint 幻灯片上创建的表格中。但是,如果我们能够在一定程度上自动化这个过程,那就更好了。此外,除了让这些幻灯片在每周的演示中保持最新之外,我还需要一种方法来每月保存静态快照以供存档。
我需要一种将电子表格链接到演示文稿幻灯片的方法。理想情况下,解决方案应该能够:
- 仅从每张表中提取所需的列。
- 仅从每张表中提取未完成的行动项目。
- 自动或按需刷新源表中的数据,只需极少的用户操作。
- (即:按需刷新每张表只需点击几下 - 或者,更优选的是,整个演示文稿只需点击几下 - 而不需要大量重复的复制/粘贴/等。)
- 在需要时自动添加/删除幻灯片,以适应数据集的大小。
- 允许根据需要保存演示文稿的静态副本。
- 与 Office 2010 和 Office 2013 兼容。
有没有办法将我的电子表格链接到演示文稿,以满足所有这些需求?
答案1
如果你被允许下载并安装标准(免费)的 Microsoft 产品“Power Query”,您可以。有关 Power Query 的使用的更多信息,请参阅这里。它适用于 Office 2010 及以上版本。它为您提供了大量工具来选择和合并来自不同来源的数据。
对于您的情况,请执行以下操作:
- 创建一个新的 Excel 工作簿。
- 使用 Power Query,将第一个操作列表加载到 Excel 表。
- 使用“附加”将其他操作列表附加到结果表中。最后,您应该会得到所有操作列表的(动态链接)组合列表。
- 使用 Power Query,您可以删除和重新排列列、对数据进行排序并在列上设置过滤器。我建议您在 Power Query 中进行选择、排序和过滤,因为如果您在 Excel 中的最终表中执行此操作,则每次更新表时都需要重新应用所有这些过滤器。
- 保存工作簿并关闭 Excel。
- 启动 Powerpoint,在功能区上的“插入”选项卡上选择“对象”,并选择“从文件创建”,然后选择带有组合操作列表的新创建的 Excel 工作簿。
如果您需要更新数据,请打开 Powerpoint 演示文稿并打开 Excel 对象,然后单击“刷新”按钮,您的数据就会更新。只需单击几下即可更新全部行动清单(很酷,对吧?!)
此解决方案适用于Office 2010和2013。
最后,您有关于跨多张表并保存静态副本的要求。对此没有现成的答案,但我希望您考虑这样做:
- 保留 Powerpoint 的“主”版本,并引用其中的 Excel 文件(提示:将此文件设为只读)。
- 每周,只需按照上述步骤单击几下即可更新数据。
- 复制 Excel 表格(即使表格太大,无法容纳一张表格)并粘贴就像一张图片(粘贴 - 图片或粘贴 - 选择性粘贴... - Microsoft Office 图形对象)。
- 现在,您可以复制带有图片的整个 PowerPoint 幻灯片,然后使用裁剪工具(选择图片并在功能区选项卡上选择图片 - 格式 - 裁剪)在每张纸上选择正确的项目。
- 您可以通过选择图片并转到功能区:图片 - 压缩图片并选择适当的设置来减小 PowerPoint 演示文稿的大小。
- 最后,可以从本周的演示文稿版本中删除包含原始 Excel 数据的工作表。
它并不是真正自动化的,但它会在演示文稿中保留数据的不可编辑版本,并满足您的所有要求。这种方法的优点是所有工作都可以从 Powerpoint 演示文稿本身完成。
答案2
您的请求有几个步骤,我无法详细回答所有步骤,但我可以帮您解决一些问题。不过,这仍然主要是概念问题。我是一个 VBA 迷,所以我会建议这样做。如果您可以访问 PowerPoint 2003,那会容易得多,因为他们从 2007 年开始删除了宏记录器。如果您无法做到这一点,那么将需要进行一些尝试/错误/谷歌搜索来完成它。值得庆幸的是,许多结构都从 Excel 中继承下来,但不是独特的项目。
背景)我在目前的工作中做了类似的事情。我有大量的数据,如果记录符合某些条件,我会提取记录的片段,并创建包含这些详细信息的 PowerPoint 幻灯片。就我的目的而言,每条记录都有自己的幻灯片,但似乎你想要一张带有表格的幻灯片来显示大量记录。
概念)VBA 循环遍历每个数据表,检查每条记录以查看是否需要,从该记录中提取某些信息,并将其添加到 PowerPoint 中的表格对象中。
1) 仅从每张工作表中提取所需的列
如果您的数据在表格中,则最容易在 VBA 代码中维护,但没有表格也可以管理。您必须明确编码要提取哪些单元格,因此只需编码您需要的单元格即可。
2) 仅从每张工作表中拉取未完成的操作项
将检查写入拉取状态的代码中,如果它不等于“已关闭”或您使用的任何术语,则继续将其添加到幻灯片中。否则,跳过它并转到下一条记录。我的需求非常复杂,我制作了几个辅助列来确定是否应包含记录,VBA 只需检查这一点。
3) 自动或按需刷新源工作表中的数据,只需最少的用户操作即可。PowerPoint
中的 VBA 可以打开 Excel 并调用该文件中的宏,以便您可以在幻灯片上创建一个按钮来运行 Excel 中的更新宏。
4) 根据需要自动添加/删除幻灯片,以适应数据集的大小
。我会先删除旧幻灯片,然后根据需要再添加。您可以在代码中执行一些操作,检查表格对象的大小与幻灯片的大小,一旦幻灯片变得太大,就添加幻灯片并创建一个新的表格对象来开始工作。
5) 与 Office 2010 和 Office 2013 兼容
我无法保证任何事情,但 VBA 中的大多数东西都是向后兼容的。我曾见过旧宏因为某些引用被删除或其他原因而中断,但这种情况只发生过一次,而且这是一个混乱的项目。
6) 手动保存演示文稿的静态副本
由于每个副本都是静态副本,独立于原始 Excel 表,因此只需单击“文件”>“另存为”即可
7) 自动保存静态副本
我不知道您是否想自动保存 Excel 或 PowerPoint,但这对两者都适用。我使用自己编写的标准模块来备份我正在开发的文件,这样我就可以随时参考以前的版本。我的模块被编写为在打开文件时创建备份。它每天只运行一次或每秒运行一次,具体取决于我如何称呼它。您可以通过更改文件名中的日期格式将其修改为每月最多运行一次。
Option Explicit
Function BackupThisFile(Optional AddTimestamp As Boolean = False)
'Declarations
Dim fPath As String
Dim fName As String
Dim fExt As String
Dim iExt As Integer
Const backupFolder As String = "Backups"
'Get file path
fPath = ThisWorkbook.path
If Right(fPath, 1) <> Application.PathSeparator Then fPath = fPath & Application.PathSeparator
'Add the backup folder name
fPath = fPath & backupFolder
If Right(fPath, 1) <> Application.PathSeparator Then fPath = fPath & Application.PathSeparator
'Create the backup directory if it doesn't already exist
On Error Resume Next
MkDir fPath
On Error GoTo 0
'Get file name
fName = ThisWorkbook.Name 'Get file name with extension
iExt = InStrRev(fName, ".") 'Find the . separating name from extension
fExt = Right(fName, Len(fName) - iExt + 1) 'Saves the extension
fName = Left(fName, iExt - 1) 'Clips the extension
'Compile path, file name, date stamp, and extension into one variable
fPath = fPath & fName & " " & Format(Date, "yyyy-mm-dd")
'Add timestamp if required
If AddTimestamp Then fPath = fPath & " " & Format(Now, "hhmmss")
'Add the file extension
fPath = fPath & fExt
'Save a copy if it doesn't already exist
Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.fileExists(fPath) Then ThisWorkbook.SaveCopyAs fPath
End Function