【问题标题】:Creating an MS Office document-like file format to expose document properties创建类似于 MS Office 文档的文件格式以公开文档属性
【发布时间】:2010-01-03 20:21:07
【问题描述】:

我们应用程序的“文档”是单个二进制文件。

我们的客户询问我们是否可以将类似于 MS Office 的文档属性添加到我们的文档文件中,以便用户更轻松地管理它们。更易于管理是指 Windows 资源管理器能够在工具提示中显示常用文档属性。

我的研究似乎表明我们应该考虑将 OLE 结构化存储作为我们数据文件的基础。我已经看到这种技术也被描述为 MS 结构化存储、OLE 2 复合文档格式和 Windows 文件元数据。

我对使用 OLE 结构化存储的担忧是,Office 2007 或 2010 似乎不再使用这种文件格式,而且 OLE 结构化存储需要注册 DSOFILE.DLL ActiveX 组件,而我们的许多客户将无法做到这一点使用,因为他们在锁定的工作站上运行我们的软件,用户没有安装软件的管理员权限。 (我们的应用软件是纯 XCOPY 部署)。

希望听到关于我们的选择的想法。

谢谢你, 马尔科姆

【问题讨论】:

    标签: python file winapi file-properties


    【解决方案1】:

    我很确定您的最佳答案是使用 OLE 复合文档。

    微软可能已经停止使用这个,但那是因为他们已经转为 XML 文件格式。除非您愿意将当前的文件格式转换为 XML,否则我认为新的标签标准不会对您感兴趣。

    您可以让您的应用程序保存两个文件,一个仅用于标记的 XML 文件和一个用于二进制数据的文件,但这只会让您的用户感到痛苦。 OLE 复合文档格式的全部意义在于允许将多个“文件”绑定到一个文件中。

    此外,如果现代 Windows 不支持直接内置的 OLE 复合文档,我会感到非常惊讶。我很确定早在十多年前的 Microsoft Word 6.0 中,文档就保存在此 OLE 中复合文档格式。为什么 Windows XP 或更新版本需要额外的 .DLL 文件才能解析出标签?

    使用 OLE 复合文档格式的最大好处是用户标签将随文件一起出现,无论如何:如果用户将文件写入文件服务器,如果用户将文件放入电子邮件中,如果用户将文件刻录到 CD 上,无论如何。 (我写的第一个答案,我删除了,很糟糕;即使它起作用了,它也会把用户标签放在文件之外,我越想,我就越不高兴。)

    所以,我建议您尝试创建一个 OLE 复合文档,然后在标准安装的 Windows XP 中的 Windows 资源管理器中查看该文件。看看您是否可以在不需要下载和安装 ActiveX .DLL 的情况下看到这些标签。我很确定它会起作用。 (但我真的不再做 Windows 了,所以我不能方便地为你测试这个。)

    编辑:好的,我刚刚做了一个测试。我在工作,我在这里有一台 Windows 电脑。我使用Word 2007 制作了一个文档,并将文档保存为Word 97 格式。我在 Windows 资源管理器中查看了文档属性;作者姓名在标签中可见。我在“cmets”中添加了文本,然后在 Word 2007 中打开了该文件。然后我可以查看 cmets(单击左上角的“office”图标圆圈,选择“Prepare”,选择“Properties”)。

    所以,我的理论有一些证据支持它:我不需要安装任何特殊软件,我的 Windows 资源管理器只是使用带有标签的 OLE 复合文档格式 Word 文件。 (可能是 Microsoft Office 安装了一些特殊的 .DLL 以使用 Windows 资源管理器中的标签;我确实在那台计算机上安装了 Microsoft Office 2007。但您的客户可能也有 Microsoft Office,所以即使是这样,我仍然认为这是最好的解决方案。)

    我建议你谷歌搜索“OLE 复合文档格式”,看看如何编写这种格式。我在这里找到了如何阅读标签的示例:http://support.microsoft.com/kb/186898

    【讨论】:

    • Steve:您提到了基于 XML 文件格式的“标签新标准”。如果这将允许 Windows 自动提取某些元素的内容并将它们显示在工具提示中,我们可以将我们的文件转换为 XML 格式。这可能吗(我用谷歌搜索了这种方法但没有成功)。或者您是否建议我们编写自己的 shell 扩展来从我们的文件中获取额外的元数据以显示工具提示?感谢您的帮助!
    • 我的意思是,Microsoft Office 现在使用基于 XML 的文件格式,而不是使用 OLE 复合文档格式。如果您想像新的 Microsoft Office 做标签一样做标签,您需要复制他们正在做的事情。但我不建议这样做。我认为 OLE 复合文档正是您所需要的。它使您可以将多个文件绑定在一起作为一个文件,因此您可以将当前的二进制格式放在一个内部文件中,并将特殊标签作为另一个文件放在复合文档中。这就是我建议您研究的内容。
    • 我相信微软可能为 Windows Explorer 编写了一个 shell 扩展,这个新的 shell 扩展告诉 Windows Explorer 如何理解和更新 XML Microsoft Office 文件中的标签。因此,如果您尝试使用 XML 文件格式,您可能还需要安装 shell 扩展。另一方面,OLE 复合文档格式已经有十多年的历史了,我敢打赌,Windows 资源管理器至少从 Windows XP(甚至可能是旧版本的 Windows)开始就支持内置的文件标签。
    • 我测试了我的理论,它们似乎奏效了。请参阅我在答案中添加的“编辑:”部分。
    【解决方案2】:

    在 Windows 2000 或更高版本上,除了使用 OLE 复合文档,您还可以store the summery information in the NTFS file metadata 以便 Windows Explorer 或 Windows 桌面搜索等应用程序可以使用属性页、工具提示、列和搜索中的属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多