在将文件上传到web服务器后,我使用dsofile.dll组件编写了一小部分代码来修改文档属性(设置guid将文件链接到数据库记录)。我从这里获取了组件和介绍:http://support.microsoft.com/kb/224351
据我所知,它不使用Office来修改属性。我实现了它,并在我的32位和64位机器上进行了测试(webserver在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并不是我期望的那样:)
发布于 2012-10-25 08:58:47
奇怪的是,错误只适用于dotx,xlsx,ff,而不是doc,xls。
这是故意的。dsofile示例只允许访问使用OLE结构化存储容器格式的文件。总的来说,OLE是一种死气沉沉的技术,Office是微软最后一个仍然支持它的产品之一。但自2007年版以来,这种支持正在迅速消失。.dotx和.xlsx文件格式也没有了,这些都是紧跟OpenXML规范的压缩OpenXML规范文件。你不能用dsofile访问它们。
你需要去购物寻找一个更好的解决方案,有很多。
https://stackoverflow.com/questions/13051543
复制相似问题