我最近继承了一些旧的Mac机器,并被告知要在格式化它们之前查找任何重要内容。
这些计算机上安装的东西之一是Office:MAC 2011,每次我打开其中一个文档时,我都会担心另一个文档不在最近打开的列表中。
我想以某种方式保存最近文件的列表,以免丢失最近打开的文档。
是否可以某种方式导出此列表,以便我可以查看列表而不破坏列表?
我最近继承了一些旧的Mac机器,并被告知要在格式化它们之前查找任何重要内容。
这些计算机上安装的东西之一是Office:MAC 2011,每次我打开其中一个文档时,我都会担心另一个文档不在最近打开的列表中。
我想以某种方式保存最近文件的列表,以免丢失最近打开的文档。
是否可以某种方式导出此列表,以便我可以查看列表而不破坏列表?
Answers:
您可以这样做,但是很复杂。
所有Microsoft Office产品的最新文档都存储在每个用户库的首选项文件(plist)中:
~/Library/Preferences/com.microsoft.office.plist
该文件为标准plist格式,可以使用Xcode内置的plist查看器进行查看。如果打开它,它将看起来像这样:
每个应用程序的最新项目列表存储在密钥中File MRU
。上面的示例适用于Word,它与MSWD
代码相对应。每个文档在此plist项下都包含一个编号项。
如您所见,不幸的是,这些键的值是二进制编码的,而不是纯文本,因此您需要将Value字符串粘贴到Hex编辑器中才能查看文件名和路径。(我使用HexFiend。)
底线:将com.microsoft.office.plist
文件复制到安全位置。使用一些肘形润滑脂,您可以从文档中拉出所有最新文件。
如果要保留要打开的文档的运行清单,请将此宏添加到Normal.dot中
Sub AutoOpen()
Dim ff As Long
Dim logpath As String
logpath = MacScript("return (path to desktop) as string") & "autoopen_log.txt"
ff = FreeFile
Open logpath For Append As #ff
Print #ff, ActiveDocument.FullName
Close #ff
End Sub
它将把在Word中打开的每个文件的路径记录到桌面上指定的文本文件中。您只需重新打开现有的最近文件,即可将它们添加到日志中。
我最终在Swift中实现了它,甚至没有使用它(因为在Office 15中更改了格式),但是如果还有其他人需要它:
import Foundation
func getMRUList(forApp: String) -> [String]? {
guard let defaults = NSUserDefaults.standardUserDefaults().persistentDomainForName("com.microsoft.office") else {
NSLog("Unable to find Office defaults")
return nil
}
guard let mruList = defaults["14\\File MRU\\" + forApp ] as? [NSDictionary] else {
NSLog("Unable to find recent documents for Office application \(forApp)")
return nil
}
return mruList.flatMap { (mruItem: NSDictionary) in
guard let mruFileAliasData = mruItem["File Alias"] as? NSData else {
NSLog("Unable to extract file alias from MRU item \(mruItem)")
return nil
}
do {
let mruFileBookmarkData = CFURLCreateBookmarkDataFromAliasRecord(nil, mruFileAliasData).takeRetainedValue()
let mruFileURL = try NSURL.init(byResolvingBookmarkData: mruFileBookmarkData, options: NSURLBookmarkResolutionOptions(), relativeToURL: nil, bookmarkDataIsStale: nil)
return mruFileURL.path
} catch let error as NSError {
NSLog("Unable to resolve file alias for MRU item \(mruFileAliasData): \(error.localizedDescription)")
return nil
}
}
}
if let mruList = getMRUList("MSWD") {
print(NSString.init(data: try! NSJSONSerialization.dataWithJSONObject(mruList, options: NSJSONWritingOptions()), encoding: NSUTF8StringEncoding)!)
}
您可以根据需要替换MSWD
为另一个Office 14应用程序的创建者(例如PPT3
,PowerPoint,XCEL
Excel)。