2016-12-13 197 views
13

當我用Excel的「文件檢查器」在一個特定的.xls文件來檢查「隱藏屬性或個人信息」,它說:獲取「工作簿絕對路徑」

下列文件資料中發現:
工作簿*絕對路徑

我怎樣才能獲得該文件的工作簿的絕對路徑?如果需要以編程方式完成,我可以使用Java(例如Apache POI)或VBA。

我知道文件當前保存的位置,但是我想提取的是存儲在我擁有的文件中的工作簿的絕對路徑。這樣我就可以知道作者保存的位置。

這裏是發生了什麼事到文件:

  1. 有人撰寫了它,將其保存在某個絕對的文件路徑不認得我
  2. 它們上傳到一個網站
  3. 我下載它從網站

Excel中表示該文件包含從第1步,我這條路之後,有不對的地方我在步驟3中保存它,因爲我知道,絕對路徑。

+1

或許''CELL(「filename」)'適合你? – CallumDA

+0

@CallumDA這將返回當前的電子表格位置和工作簿名稱。 –

+0

那有什麼區別?我不確定你在找什麼。不是'= Cell(「filename」)'返回類似'C:\ Users \ Myself \ blah \ [VariousData.xlsx] SummarySheet'的東西嗎?什麼是你正在尋找的「abosulte路徑」? – BruceWayne

回答

10

我可以通過簡單地創建一個空的Excel文件複製該警告消息,添加一個公式,並將其保存爲BIFF8(.xls)。文件檢查員然後會警告有關絕對路徑。 ...但在我的情況下,文件內沒有文件名。

驗證這一點的一個簡單方法是在十六進制編輯器中打開該文件並搜索一個衆所周知的保存位置(即存儲虛擬/測試文件的位置) - 將其存儲爲ASCII或16位字符串,即每個奇數字節是一個字符。

如果你想使用的POI的開發工具,你可以使用以下命令:

要列出所有的Excel記錄:
java -cp poi-3.16-beta1.jar org.apache.poi.hssf.dev.BiffViewer file.xls

要列出文件和摘要屬性:
java -cp poi-3.16-beta1.jar org.apache.poi.hpsf.extractor.HPSFPropertiesExtractor file.xls

要列出除常見嫌犯SummaryInformationDocumentSummaryInformationWorkbook之外的任何嵌入對象:
java -cp poi-3.16-beta1.jar org.apache.poi.poifs.dev.POIFSLister file.xls

因此,運行工具並記錄輸出後,可以通過Excel文檔檢查器刪除屬性並再次執行這些工具。輸出可能會有所不同,你可能會發現罪魁禍首。

+0

我試着在文件我有一個十六進制編輯器,發現這個問題前沒有發現任何東西。我想也許Excel使用了一些深奧的編碼。我已經運行了你列出的命令,這些命令都可以工作,但都沒有產生完整的路徑。所以可能它首先被Excel錯誤地報告。 –

8

假設它是一個.xlsx文件,而不是老式的.xls文件,你可以

  1. 重命名工作簿作爲.zip文件
  2. 看那.zip文件中的xl\workbook.xml「文件」

你會發現上次從Excel保存的絕對路徑。

這就是爲什麼與其他人共享與工作相關的電子表格並不是一個好主意,除非您先清除此類信息。


我不知道如何在二進制格式文件中找到它。

+0

「這就是爲什麼與其他人分享與工作相關的電子表格不是好主意,除非你首先清除這類信息」 - 如何確保這些信息。在共享工作表時,不在嗎? – BruceWayne

+1

@BruceWayne--通過使用文檔檢查器,這與OP所做的相同。在Excel 2010中可以從文件/信息/檢查問題找到。其他版本的實現方式稍有不同。 – YowE3K

+0

啊!對不起 - 不知道那是怎麼回事......我認爲它只是*檢查問題,而不是幫助你刪除這些信息。謝謝! – BruceWayne