Visio .vsdx 格式解压缩和 zip 损坏

Visio .vsdx format unzip and zip corrupts

我试图在不使用 Windows Visio 应用程序的情况下修改 Visio 文件(打开 XML 格式)。我的第一个实验只是使用 7zip 解压缩使用 Visio 创建的已知良好的 .vsdx 文件。这一切都很好;我可以查看包裹的内容。在不做任何修改的情况下,我使用 7zip 重新压缩内容并重命名为 .vsdx,但是当我尝试使用 Visio 打开生成的新文件时,它抱怨文件已损坏。有没有办法手动将内容重新压缩到 Visio 接受的有效 Visio 文件中?我怀疑可能会对文件的有效性进行某种检查,但找不到可能是什么。感谢您的任何输入。

我会使用某种形式的 OpenXML 库来使用某种“认可的魔法”获取文件的内容。

了解到您可能不想通过编程来做任何您正在做的事情,所以我寻找了某种免费的编辑器。

我为 Visual Studio 找到了这个免费 plug-in:

https://marketplace.visualstudio.com/items?itemName=bsivanov.OpenXMLPackageEditorforVisualStudio

它也适用于免费的“Microsoft Visual Studio Community 2019”。我刚刚打开开发环境(又名:应用程序)并将 Visio .vsdx 文件拖到应用程序中。它使用 tree-like 编辑器打开。我能够深入挖掘,直到找到 visio > pages > page1.xml“leaf”。在那里,我能够更改形状上的一些文本,然后保存“包”。

无论此工具做什么,它都能正确保存文件,而且我能够在 Visio 中打开更改后的 .vsdx 文件。我在编辑器中更改的文本确实在 Visio 内部更改了!

我想我以前用过这个:

“欢迎使用 Open XML Office SDK 2.5” https://docs.microsoft.com/en-us/office/open-xml/open-xml-sdk https://github.com/OfficeDev/Open-XML-SDK

要在没有 Visio 应用程序的情况下编辑 Visio 文件,您仍然需要在一定程度上了解 Visio 的工作原理。

一个简单的例子:

我在其中一个 page.xml 文件中相当轻松地更改了形状上的文本。那很简单。然后我想添加那个形状的副本。复制并粘贴现有形状的整个 xml 块非常简单,然后更改 PinX 和 PinY 属性以将形状移动到页面上的不同位置。

但除非您在页面中为其指定唯一 ID,否则您将看不到该形状。我测试了删除 ID 属性(以查看 Visio 是否会在打开时找出它并自动分配一个),但它没有用。如果 ID 与另一个形状相同,则打开文件时将忽略该形状。将 ID 更改为未使用的内容后,我确实看到了形状的新副本。

如果您创建分组形状或具有高级行为的形状(SmartShapes、ShapeSheet 公式等),那么这可能会变得复杂。由于公式需要通过 ID 引用其他形状,因此您需要管理 ID!对于简单的框和线等,通过 OpenXML 生成这些东西可能效果很好(而且速度很快)。祝你好运!