2012-10-24 95 views
2

我使用dsofile.dll組件編寫了一小段代碼,在將文件上傳到Web服務器(設置將文件鏈接到數據庫記錄的GUID)後修改文檔屬性。 我接過分量和說明資訊從這裏:http://support.microsoft.com/kb/224351爲什麼dsofile.dll仍然需要Office安裝?

至於我通情達理它不使用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作爲服務器上的一絕是不是我所期待的待辦事項:)

  • 有誰知道Office安裝的dsofile.dll需要沒有填充安裝工作的組成部分是什麼?
  • 換句話說:我可以複製一堆文件並手動將它們「註冊」在服務器上嗎?
  • 還是我誤解了一些東西,這是我的代碼?!

回答

2

Strange thing the error was only for dotx, xlsx, ff, but not for doc, xls

這是由設計。 dsofile樣本僅允許訪問使用OLE結構化存儲容器格式的文件。 OLE通常是一項死亡技術,Office是仍然支持它的最後一款微軟產品之一。但是自2007年版以來,這種支持一直在迅速消失。對於.dotx和.xlsx文件格式也是如此,這些是遵循OpenXML specification的壓縮XML文件。你不能用dsofile訪問它們。

你需要去購物尋求更好的解決方案,有很多。

+1

感謝您的澄清。但我仍然想知道,爲什麼它在服務器上安裝Office之後工作(dsofile中使用office組件的某些密碼?!)。關於其他解決方案:我需要一個解決方案,讓我在2003年,2007年,2010年Office文檔中添加屬性。 – YvesR

+1

嗨Hans Passant,MS有沒有其他的DSOFILE?謝謝 – subZero

-1

一旦我安裝Office 2007兼容包,它將在辦公室工作2016

相關問題