項目中,開發人員使用java開發上傳文件功能,用戶的文件類型就那麼固定幾種,word,excel,pdf。須要上傳完以後,在上傳列表上,顯示此文件的具體頁數,也就是打印預覽的時候,能夠看到的打印頁數,由於這個上傳的文件會走審批流程,最終經過打印程序,直接刷卡打印出來。其餘的都不是問題,就是頁數讀不許確。poi,不用提了,word只能讀摘要,而word的摘要根本不許, openoffice,能夠,可是不夠精確,由於openoffice是使用本身打開word,或者excel而後得到的是本身的頁數,會與微軟的office的樣式有細微的差別,大多數狀況下,差別不明顯,可是畢竟是可能不許確。由於咱們的服務必定是部署在windows機器上的,因此仍是用微軟本身的方式最正確,嘗試jacom,其餘都沒問題,可是讀excel頁數的時候,循環sheet頁把我難住了,楞是沒弄明白使用jacom如何循環。最後沒招,仍是使用了vbs腳本,代碼又簡單,又幹淨。java直接調用vbs獲取結果就能夠了。 下面把vbs基本分享給你們,有的朋友可能會說,網上一搜處處都是,此言差矣,網上還真沒有幾個那麼完整和準備的方法。若是網上一搜就能夠搜到的內容,我通常不會再寫出來的了。 最起碼word,excel讀準確頁數的方法於我這同樣的仍是滿少的,excel都差很少,直接調用宏,word的方法用的人就不多了,word的方法有不少,大可能是讀Selection的Information,這種方法,大可能是準確的,可是會有極少數不許確的狀況出現。好了,仍是直接看代碼吧:java
- Private Sub getWordPages()
- Dim pages
- Set oWord= CreateObject("Word.Application")
- Set oWd = oWord.Documents.Open(wscript.arguments(0))
- pages = oWd.ComputeStatistics(2)
- oWd.close
- oWord.quit
- Set oWd = Nothing
- Set oWord = Nothing
- WScript.Echo pages
- End Sub
- Private Sub getExcelPages()
- Dim Pages
- Set oExcel= CreateObject("Excel.Application")
- Set oWb = oExcel.Workbooks.Open(wscript.arguments(0))
- For Each sht In oWb.Worksheets
- sht.Activate()
- Pages = Pages + oExcel.ExecuteExcel4Macro("GET.DOCUMENT(50)")
- Next
- oWb.close
- oExcel.quit
- Set oWb = Nothing
- Set oExcel = Nothing
- WScript.Echo Pages
- End Sub