为什么dsofile.dll仍然需要Office安装?

时间:2012-10-24 14:40:49

标签: c# vsto office-interop

我使用dsofile.dll组件编写了一小段代码,在将文件上传到Web服务器后修改文档属性(设置guid以将文件链接到数据库记录)。 我从这里获取了组件和说明:http://support.microsoft.com/kb/224351

据我所知,它不使用Office来修改属性。 我实现了它并在我的32位和64位机器上测试它(网络服务器在32位模式下运行)并且一切正常。当时我很开心。 但是在将它部署到生命机器后,它没有将属性保留在我的值上,但也不会抛出任何错误!

这是一些代码,看看我做了什么:

public void SetProperty(string filename, string property, string value)
{
  m_oDocument.Open(filename);

  var oProp = m_oDocument.CustomProperties;
  try
  {
    oProp.Add(property, value);
  } catch(Exception)
  {
    foreach (CustomProperty cProp in oProp.Cast<CustomProperty>().Where(cProp => cProp.Name == property))
    {
      cProp.set_Value(value);
    }
  }
  if ( Debug)
  {
    m_spy.Spy("filename: " + filename);
    m_spy.Spy("filename modified: " + m_oDocument.IsDirty);
  }

  if ( m_oDocument.IsDirty ) m_oDocument.Save();
  m_oDocument.Close();

  if ( Debug ) m_spy.Spy(GetProperty(filename, property));

}

所以我开始实施调试代码,整天在网上阅读文章。 我最终在服务器上安装了Office 2010 32位。

然后我收到一个新错误:

The document is not an OLE file, and does not support extended document properties

奇怪的是,该错误仅适用于dotxxlsx,ff,但不适用于docxls,ff。

安装Office 2010的所有可用更新并重试后。 然后它按照我的意愿工作,并保留我在所有文件上设置的属性。

因此,在服务器上安装Office 2010不是我所期望的:)

  • 有没有人知道dsofile.dll在没有填充安装的情况下需要使用哪些Office安装组件?
  • 换句话说:我可以复制一堆文件并手动在服务器上“注册”它们吗?
  • 或者我误解了什么,这是我的代码?!

1 个答案:

答案 0 :(得分:2)

  

奇怪的是,错误仅适用于dotx,xlsx,ff,但不适用于doc,xls

这是设计的。 dsofile示例仅允许访问使用OLE结构化存储容器格式的文件。 OLE通常是一种死技术,Office是最后仍然支持它的微软产品之一。但自2007年版以来,这种支持一直在迅速消失。对于.dotx和.xlsx文件格式也是如此,这些格式是遵循OpenXML specification的压缩XML文件。您无法使用dsofile访问它们。

你需要购买更好的解决方案,有很多。