我使用 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
奇怪的是,错误仅针对 dotx
、xlsx
、ff,但不适用于 doc
、xls
,ff。
在我安装了 Office 2010 的所有可用更新并重试之后。 然后它按照我想要的方式工作,并保留我在所有文件上使用上传页面设置的属性。
因此,在服务器上必须安装 Office 2010 并不是我所期望的:)
- 有人知道 dsofile.dll 需要 Office 安装的哪些组件才能在没有完整安装的情况下工作吗?
- 换句话说:我可以复制一堆文件并手动在服务器上“注册”它们吗?
- 或者我是否误解了某些内容,而这是我的代码?!
最佳答案
Strange thing the error was only for dotx, xlsx, ff, but not for doc, xls
这是设计使然。 dsofile 示例仅允许访问使用 OLE 结构化存储容器格式的文件。一般来说,OLE 是一种已死的技术,Office 是最后仍然支持它的 Microsoft 产品之一。但自 2007 年版以来,这种支持很快就消失了。 .dotx 和 .xlsx 文件格式也不再适用,这些是遵循 OpenXML specification 的压缩 XML 文件。 。您无法使用 dsofile 访问它们。
您需要购买更好的解决方案,有很多。
关于c# - 为什么dsofile.dll还需要Office安装?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13051543/