2015-10-17 55 views
0

我試圖使用C#作爲MVC Web應用程序的一部分訪問'Last Saved By'文件屬性。我可以從文件的最後修改日期到所有者獲得幾乎所有其他屬性,並且我甚至使用Shell32來獲取真正晦澀難懂的屬性。以編程方式檢索'Last Saved By'文件屬性

但是,當我檢索每個需要報告的文件的審計屬性時,我無法找到「Last Saved By」屬性的方法。我需要從這些數據獲取這些數據的文件都是Excel。

+3

那場Excel文件,而不是文件系統屬性的一部分。您可能需要使用Excel來讀取值。 – DavidG

+1

歡迎來到[so]。你確切的需求是什麼?你想知道Excel對象模型中的值存儲在哪裏?或者你有問題以編程方式從C#訪問Excel?請點擊[編輯]並縮小您的問題至特定問題,目前它太寬泛。 – miroxlav

+0

謝謝DavidG。我開始認爲帽子可能就是這種情況。我試圖不使用COM,因爲我們需要將其添加到我們的新Web服務器 – Wheels

回答

4

可以使用WindowsAPICodePack.Shell庫讀取'Last Saved By'屬性。此屬性是特定於應用程序的,因此它不存在於某些文件中(例如,它可用於.xls而不是.csv)。 'Last Saved By'文件屬性名爲'LastAuthor'。

我用的NuGet獲得軟件包和下面的代碼來訪問屬性:

 string lastSavedBy = null; 
     using (var so = ShellObject.FromParsingName(file)) 
     { 
      var lastAuthorProperty =  so.Properties.GetProperty(SystemProperties.System.Document.LastAuthor); 
      if (lastAuthorProperty != null) 
      { 
       var lastAuthor = lastAuthorProperty.ValueAsObject; 
       if (lastAuthor != null) 
       { 
        lastSavedBy = lastAuthor.ToString(); 
       } 
      } 
     } 
+0

不適用於.docx。 – Jonah

1

可以在

Workbook.BuiltinDocumentProperties(7) 

訪問屬性也許從C#訪問時就會有指數6。請參閱MSDN documentation

快速驗證:在Excel VBA編輯器(ALT + F11)的立即窗口(Ctrl + G),你可以鍵入
? ThisWorkbook.BuiltinDocumentProperties(7)並按下回車鍵來顯示屬性。這是Excel的一部分。

還有一部分是如何從C#調用Excel的,但我不打算介紹這個,你可以從這裏找到數百個答案和例子。

也許更有效的可以只是添加引用Microsoft.Office.Tools.Excel Namespace和直接工作,沒有Excel。

+0

感謝您的回答。如果我不能使用更通用的解決方案,我會使用這個答案。 – Wheels

+0

@Wheels - 如果您添加的答案對您更有幫助,請隨時將其標記爲接受的答案,而不是我的答案。 – miroxlav