2016-11-24 100 views
0

我正在爲我的大學項目工作。我搜查了很多,但不知道爲什麼excel沒有閱讀。我在Android Studio中添加了this jar文件。遵循this教程。其實我很困惑。但是,我已經添加了一些日誌和敬酒,如你所見。他們什麼也沒有顯示。我調試過它,實際上在調試的情況下,它什麼也沒有顯示。你能否建議我一個讀取和寫入Excel或任何代碼片段的好方法?如何從Android中的特定存儲中讀取Excel文件?

的代碼如下:

if (!isExternalStorageAvailable() || isExternalStorageReadOnly()) 
    { 
     Log.w("FileUtils", "Storage not available or read only"); 
     return; 
    } 

    try{ 
     // Creating Input Stream 
     sharedPreferences = MyApplication.preferences; 
     final int projectID = sharedPreferences.getInt("count", 0); 
     int taskID = 0; 
     final String count = sharedPreferences.getString("project", projectFile); 
     File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/" 
       + mainFolder + "/" + count,"/task.xls"); 
     Log.e("full file",file.toString()); 
     FileInputStream myInput = new FileInputStream(file); 
     Log.e("full file",myInput.toString()); 
     // Create a POIFSFileSystem object 
     POIFSFileSystem myFileSystem = new POIFSFileSystem(myInput); 
     Log.e("full file",myFileSystem.toString()); 
     // Create a workbook using the File System 
     HSSFWorkbook myWorkBook = new HSSFWorkbook(myFileSystem); 
     Log.e("full file",myWorkBook.toString()); 

//  Workbook wb = WorkbookUtil.create(new File("MyExcel.xls")); 

     // Get the first sheet from workbook 
     HSSFSheet mySheet = myWorkBook.getSheetAt(0); 
     Log.e("full file",mySheet.toString()); 
     /** We now need something to iterate through the cells.**/ 
     Iterator<Row> rowIter = mySheet.rowIterator(); 

     HSSFRow nameRow = mySheet.getRow(1); 
     String name = nameRow.getCell(0).toString(); 
     projectname.setText(name); 
     Log.e("full file",name.toString()); 


     while(rowIter.hasNext()){ 
      HSSFRow myRow = (HSSFRow) rowIter.next(); 
      Iterator<Cell> cellIter = myRow.cellIterator(); 
      while(cellIter.hasNext()){ 
       HSSFCell myCell = (HSSFCell) cellIter.next(); 
       Log.w("FileUtils", "Cell Value: " + myCell.toString()); 
       Toast.makeText(context, "cell Value: " + myCell.toString(), Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }catch (Exception e){e.printStackTrace(); } 

    return; 

日誌停止此行後工作:

FileInputStream myInput = new FileInputStream(file); 

日誌文件是:

11-24 12:02:46.993 9177-9196/? E/linker: "/system/bin/app_process32": ignoring 2-entry DT_PREINIT_ARRAY in shared library! 
11-24 12:02:48.055 9177-9267/? E/fb4a(:<default>):0lk: E1124 12:02:48.000000 -1703212752 xplat/liger/src/proxygen/facebook/httpclient/java/src/cpp/HTTPClient.cpp:590] failed to get socket address from :53 
11-24 12:02:48.062 9177-9267/? E/fb: failed to get socket address from :53 
11-24 12:02:50.857 8986-8986/razon.language E/razon.language.Home$6: selected file /storage/emulated/0/Language/Project3/task.xls 
11-24 12:02:50.857 8986-8986/razon.language E/moved: Moved To /Language/Project3/ 
11-24 12:02:50.862 8986-8986/razon.language E/full file: /storage/emulated/0/Language/Project3/task.xls 
11-24 12:02:50.862 8986-8986/razon.language E/full file: [email protected] 
+1

您是否添加了讀取存儲權限?您還需要爲此添加運行時權限,以便從棉花糖中工作 – Redman

+0

是的,我確實。我在應用程序啓動時獲得了運行時權限。 –

+0

你遇到的問題/錯誤是什麼? –

回答

0

我寫在此基礎你的最後一個堆棧跟蹤是,

org.apache.poi.poifs.filesystem.OfficeXmlFileException:提供的 數據似乎位於Office 2007+ XML中。您正在調用處理OLE2 Office文檔的POI部分 。你需要調用POI的 不同的部分來處理此數據(例如XSSF而不是HSSF)

隨着跟蹤消息表明,你想讀出的數據從具有從支持的格式文件Office 2007及更高版本。 POI具有名爲XSSF(see the very basic in first paragraph)的此組件,可用於處理此類文檔。

因此,從技術上講,您需要將您的HSSFWorkbook, HSSFSheet, HSSFRow, HSSFCell等替換爲XSSFWorkbook, XSSFSheet, XSSFRow, XSSFCell等。至於下面,

POIFSFileSystem myFileSystem = new POIFSFileSystem(myInput); 

POIFSFileSystem(或者類似地,NPOIFSFileSystem)只以.xls文檔中使用。 .xlsx文檔的等效文件是OPCPackageexample)。它直接構建出一個文件,因此,你的代碼應該看起來像這樣。

OPCPackage pkg = OPCPackage.open(file); 

希望它有幫助。

+0

你可以使用[WorkbookFactory](http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/WorkbookFactory.html ),它會爲你照顧它! – Gagravarr

相關問題