Microsoft 365 导致 PowerPoint 文件大小迅速增大
问题
最直接的症状是 PowerPoint 演示文稿的文件大小异常大,甚至可能比预期大好几倍。在一些情况下,该问题可能会导致文件打开、编辑和/或保存速度极慢,甚至可能根本无法打开。
在以下情况下可能会出现该问题:
- 文件保存在(或曾经保存在)SharePoint 位置
- 文件通过(或曾经通过)以下方式加密,例如
- Azure Information Protection
- Microsoft Information Protection
- Microsoft Purview Information Protection
- 访问限制
- 幻灯片或幻灯片上的内容包含标记或 CustomerData 对象(think-cell 和其他许多加载项使用 Microsoft 规定的“标记”对象)
将受影响的幻灯片或对象复制到其他演示文稿可能会将问题引入其他文件,即使这些文件不符合上述标准也是如此。
解决方案
Microsoft 已针对该问题发布修复程序,目前在 Microsoft 365 的最新公开更新中提供。月度企业通道和半年企业通道下提供的旧版本暂时仍可能受到影响。
受影响和已修复版本列表如下:
版本 |
最先受影响的内部版本 |
提供修复版本: |
---|---|---|
2208 |
15601.20578 |
** |
2301 |
16026.20002 |
** |
2302 |
* |
16130.20714 |
2303 |
* |
** |
2304 |
* |
** |
2305 |
* |
** |
2306 |
* |
16529.20182 |
2307 |
* |
16626.20000 |
* - 初始版本中存在的问题
** - 预期不提供修复程序
注意:虽然 Microsoft 的修复程序可以防止出现问题,但不会修复已经受影响的文件。但是,可以使用几个选项来清理受影响的文件,结合 Microsoft 的修复程序,应该可以解决问题:
PowerPoint 内置的文档检查器可用于从受影响的文件中删除 customXML 数据。如果使用该工具,请确保只使用自定义 XML 数据选项。删除其他内容类型可能会产生意想不到的后果,包括从文档中删除 think-cell 功能。
如果正在使用的是 think-cell 12,清理 工具可用于更便捷地访问同样的功能。
如果使用的是未打补丁的 PowerPoint 版本,使用这两种方式中的任意一种删除 customXML 数据不会阻止它再次累积,但至少可以暂时重置该问题。
如果您的文件损坏严重,无法使用 PowerPoint 可靠地打开,因此无法使用文档检查器或 think-cell 的清理工具,或者如果受影响文档的数量需要自动化解决方案,请联系我们的支持团队。我们或可提供帮助。
分析
我们的开发人员对此问题进行了详细分析。在满足上述条件的情况下,打开存储在 SharePoint 上并经过加密的文件可能会导致 PowerPoint 以其代码调用此函数:
PPT::FileIO::CustomerDataXmlReader::DeSerializeCustomerDataFromEncryptedStorage
此函数是从所列的 PowerPoint 版本开始新添加的。SharePoint 上存储的文件包含某些用于 SharePoint 文件管理的 customXML 数据文件。调用码函数时,对于包含标记或 CustomerData 的所有幻灯片或对象,整个文档中包含的所有 customXML 文件都会被复制。继续使用受影响的文件可能会导致在正常编辑操作过程中也不断累积这些垃圾数据。
此问题会在不使用 think-cell 的情况下重现。如需了解详细的再现步骤,请点击:
不使用 think-cell 的情况下重现:
- 在 think-cell 处于不活动状态或被暂时删除的情况下,打开一个不含占位符文本框的新空白 PowerPoint 演示文稿
- 插入一个 PowerPoint 矩形,例如,通过插入 > 图例 > 形状
- 打开 VBA 窗口(按 Alt+F11)
-
在即时窗口(如果没有该窗口,可以按 Ctrl+G 激活)中输入以下内容,然后按 Enter:
ActivePresentation.Slides(1).Shapes(1).Tags.Add "Test", "Tag"
- 关闭 VBA 窗口
- 在 PowerPoint 中,通过 Ctrl+D 选择并复制矩形 30 次,因此总共存在 31 个矩形(复制处理的形状更少,但文件大小会相应变化)
-
将演示文稿保存到 SharePoint 位置
完全同步到 SharePoint 后,文档大小应约为 54 KB。
- 现在,转到 PowerPoint 功能区的文件选项卡,选择信息 → 保护演示文稿 → 限制访问 → 已受限制的访问:
- 在出现的“权限”对话框中,选中限制对此演示文稿的权限框并单击确定:
- 保存文档(例如,按 Ctrl+S),然后完全关闭文档
- 再次打开文档
- 再次转到文件 → 信息 → 保护演示文稿 → 限制访问,删除访问权限限制,这一次选择不受限制的访问
-
再次保存文档,然后关闭文档。
文档大小仍应为 54 KB,但已增大到约 195 KB。
-
重新打开文档,重复第 8 到 13 步
文档大小仍应为 54 KB,但已增大到约 5 MB。
检查文件结构(例如,复制 .pptx 文件并将副本的文件扩展名更改为 .zip,然后解压存档)可以看到,customXml 子文件夹中包含的 item*.xml 和 itemProps*.xml 文件的数量将从同步到 SharePoint 后的每种文件类型 3 个变为第一次重复后的每种文件类型 96 个,以及第二次重复后的每种文件类型 2979 个。
还有其他步骤和工作流程也可能导致 customXML 数据重复,但这是最直接的示范,效果也最明显。
think-cell 为何会受到影响
think-cell 不使用 customXML 数据,但会在通过 think-cell 创建的每种形状或对象中使用标记。因此,使用 think-cell 创建的幻灯片可能包含大量标记形状,从而导致 customXML 数据的复制速度极快。