2009-07-30 10 views
5

के साथ संरक्षित पासवर्ड एक्सेल फ़ाइल (.xls) को कैसे पढ़ सकते हैं मैंने अभी पीओआई सीखा है और एचएसएसएफ को एक्सेल फ़ाइल (.xls) पढ़ने और बनाने के लिए बहुत आसान है। हालांकि, पासवर्ड के साथ एक्सेल संरक्षित पढ़ने के लिए मुझे कुछ समस्या मिली। इंटरनेट पर इस समाधान को खोजने में मुझे एक घंटा लगा।हम पीओआई एपीआई

कृपया आप इस समस्या को हल करने में मेरी मदद कर सकते हैं। यदि आप मुझे कोड स्निपेट दे सकते हैं तो मुझे बहुत खुशी है।

धन्यवाद। इसका मतलब है कि अगर आप पूरे कार्यपुस्तिका (और नहीं बस एक शीट) की रक्षा की है, तो यह इसे पढ़ने के लिए सक्षम हो जाएगा -

+0

के रूप में सामग्री को पढ़ सकते हैं क्या आपको इस समस्या का समाधान नहीं मिला या नहीं मिला? यदि आपने किया, तो इसे यहां रखना अच्छा लगेगा। –

उत्तर

0

POI एन्क्रिप्टेड कार्यपुस्तिका पढ़ने में सक्षम नहीं होगा। अन्यथा, यह काम करना चाहिए।

0

रवि सही है। ऐसा लगता है कि आप पासवर्ड सुरक्षित पढ़ सकते हैं, लेकिन पीओआई के साथ एन्क्रिप्टेड फाइलें नहीं। http://osdir.com/ml/user-poi.apache.org/2010-05/msg00118.html देखें। निम्न कोड फ़ाइल

POIFSLister lister = new POIFSLister(); 
lister.viewFile(spreadsheetPath, true); 

के निशान बाहर प्रिंट आप एक निर्गम एन्क्रिप्शन उल्लेख तो आप POI के साथ फ़ाइल नहीं खोल सकता मिलता है।

6

http://poi.apache.org/encryption.html देखें - आप Apache POI के हाल के एक पर्याप्त प्रतिलिपि उपयोग कर रहे हैं (जैसे 3.8) तो एन्क्रिप्टेड .xls फ़ाइलें (HSSF) और .xlsx फ़ाइलों (XSSF) decrypted किया जा सकता है (यह साबित आप पासवर्ड नहीं है!)

जैसे ही आप नहीं है, हालांकि एन्क्रिप्टेड एक्सेल फाइल को बाहर लिख सकते हैं, केवल संयुक्त राष्ट्र-एन्क्रिप्टेड लोगों

2

यहां एक संपूर्ण उदाहरण कोड है कि एक संरक्षित उत्कृष्टता फ़ाइल में लिखा है, एक पासवर्ड का उपयोग decrypts और बाहर लिखते हैं असुरक्षित फ़ाइल उत्कृष्टता प्राप्त है

public static void readProtectedBinFile() { 
    try { 

     InputStream inp = new FileInputStream("c:\\tmp\\protectedFile.xls"); 
     org.apache.poi.hssf.record.crypto.Biff8EncryptionKey.setCurrentUserPassword("abracadabra"); 

     Workbook wb; 
     wb = WorkbookFactory.create(inp); 

     // Write the output to a file 
     FileOutputStream fileOut; 
     fileOut = new FileOutputStream("c:\\tmp\\unprotectedworkbook.xlsx"); 
     wb.write(fileOut); 
     fileOut.close(); 
    } catch (InvalidFormatException e) { 
     e.printStackTrace(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 
1

पूर्ण उदाहरण कोड के रूप में .xls और .xlsx (पासवर्ड सुरक्षित या पासवर्ड सुरक्षित के साथ) की जांच के साथ एक्सेल फ़ाइल पढ़ने के लिए कोड है।

private Workbook createWorkbookByCheckExtension() throws IOException, InvalidFormatException { 
       Workbook workbook = null; 
       String filePath = "C:\\temp\\TestProtectedFile.xls"; 
       String fileName = "TestProtectedFile.xls"; 
       String fileExtensionName = fileName.substring(fileName.indexOf(".")); 
       if (fileExtensionName.equals(".xls")) {       
        try { 
         FileInputStream fileInputStream = new FileInputStream(new File(filePath)); 
         workbook = new HSSFWorkbook(fileInputStream);        
        } catch (EncryptedDocumentException e) { 
         // Checking of .xls file with password protected. 
         FileInputStream fileInputStream = new FileInputStream(new File(filePath)); 
         Biff8EncryptionKey.setCurrentUserPassword("password"); 
         workbook = new HSSFWorkbook(fileInputStream); 
        }       
       } else if (fileExtensionName.equals(".xlsx")){ 
        // Checking of .xlsx file with password protected. 
        String isWorkbookLock = ""; 
        InputStream is = null; 
        is = new FileInputStream(new File(filePath)); 
        if (!is.markSupported()) { 
         is = new PushbackInputStream(is, 8); 
        } 

        if (POIFSFileSystem.hasPOIFSHeader(is)) { 
         POIFSFileSystem fs = new POIFSFileSystem(is); 
         EncryptionInfo info = new EncryptionInfo(fs); 
         Decryptor d = Decryptor.getInstance(info); 
         try { 
          d.verifyPassword("password"); 
          is = d.getDataStream(fs); 
          workbook = new XSSFWorkbook(OPCPackage.open(is)); 
          isWorkbookLock = "true"; 
         } catch (GeneralSecurityException e) { 
          e.printStackTrace(); 
         }    
        }   
        if (isWorkbookLock != "true") { 
         FileInputStream fileInputStream = new FileInputStream(new File(filePath)); 
         workbook = new XSSFWorkbook(fileInputStream); 
        } 
       } 
       return workbook; 
      } 
+0

क्यों न केवल [WorkbookFactory] (http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/WorkbookFactory.html) का उपयोग करें, जो आपके लिए यह सब कुछ करता है? – Gagravarr

+0

आपके सुझाव के लिए धन्यवाद। हमारी परियोजना ने Poi-3.8-20120326.jar, poi-ooxml-3.8-20120326.jar और poi-ooxml-schemas-3.8-20120326.jar का उपयोग किया। ऐसा लगता है कि "वर्कबुक wb = WorkbookFactory.create (फ़ाइल, स्ट्रिंग);" का समर्थन नहीं किया जा सकता है। यह केवल एक पैरामीटर के लिए, दो पैरामीटर के साथ बनाने() विधि काम नहीं करता है। – Nyeint

+0

चूंकि उन फाइलनामों की तारीखें आश्चर्यजनक रूप से दिखाती हैं, उन जार 3.5 वर्ष की हैं! यदि आप किसी नए संस्करण में अपग्रेड करते हैं, तो आपको उल्लिखित विधि मिल जाएगी :) – Gagravarr

2

जब आपने अपना प्रश्न लिखा, अपाचे पीओआई के साथ ऐसा करना आसान नहीं था। तब से, समर्थन एक लंबा रास्ता

इन दिनों

, आप एक पासवर्ड से सुरक्षित Excel फ़ाइल को खोलने के लिए, चाहे .xls या .xlsx, जिसके लिए आप पासवर्ड पता है, तुम सब करने की जरूरत है WorkbookFactory.create(File,Password) का उपयोग किया जाता है चाहते हैं, उदाहरण के लिए पर आ गया है

File input = new File("password-protected.xlsx"); 
String password = "nice and secure"; 
Workbook wb = WorkbookFactory.create(input, password); 

यह फ़ाइल के प्रकार की पहचान करेगा, इसे दिए गए पासवर्ड से डिक्रिप्ट करेगा, और इसे आपके लिए खोल देगा। फिर आप सामान्य

संबंधित मुद्दे