2011-12-03 29 views
0

我有錯誤行:錯誤時調用write()

workbook.write(); 

當我嘗試調試,我看到按摩:「源未找到。」

如何解決?

private void exportExcel() throws IOException, WriteException{ 

    File file = new File(Environment.getExternalStorageDirectory() + "/backup.xls"); 

    WritableWorkbook workbook = Workbook.createWorkbook(file); 
    workbook.createSheet("worksheet", 0); 

    workbook.write(); 
    workbook.close(); 
    } 

在此先感謝


WTF我上面的代碼開始工作!

當我開始時,我使用default jexcelapi。之後我開始使用alternative jexcelapi,但它也不起作用。

當我嘗試一下你的代碼時,幾乎沒有什麼變化 - 它能工作!您的代碼:

private void exportExcel() throws WriteException, IOException{ 

    File sdCard = Environment.getExternalStorageDirectory(); 
    File dir = new File(sdCard + "/myFolder"); 

    //make them in case they're not there 
    dir.mkdirs(); 

    //create a standard java.io.File object for the Workbook to use 
    File wbfile = new File(dir, "backup.xls"); 

    WritableWorkbook workbook = null; 

    try{ 
     workbook = Workbook.createWorkbook(wbfile); 
     workbook.createSheet("worksheet", 0); 

     workbook.write(); 
     workbook.close(); 
    } catch (IOException ex) { 
     Log.e("Workbook Test", "Could not create " + wbfile.getPath(), ex); 
    } 
} 

但是,當我嘗試我的代碼上面,它也工作。

也許Eclipse不立即使用庫更新?

非常感謝!

P.S.對不起,我的英語不好。

+0

有什麼錯誤? –

+0

我不能說錯誤是什麼,但我知道這是IOException。 – Elvis

+0

@TedHopp謝謝你的回答!我在SD卡的根文件夾中創建「myFolder」並更改代碼,但仍然存在錯誤。像我這樣的麻煩:http://anddev.org/general-f3/jexcel-api-ouput-to-sdcard-t16212.html我可以使用CSV! – Elvis

回答

0

您的代碼不檢查外部存儲目錄是否實際可用。您需要撥打getExternalStorageState並檢查返回值與Environment中定義的各種MEDIA_*值。如果該目錄不可用,那可能會導致該問題。

問題也可能是您正在嘗試寫入外部存儲目錄的根目錄。從the docs

應用程序不應該直接使用此頂級目錄,以避免污染用戶的根名稱空間。應用程序專用的任何文件都應放置在由Context.getExternalFilesDir返回的目錄中,如果應用程序已卸載,系統將負責刪除這些文件。

編輯

試試這個代碼:

File sdCard = Environment.getExternalStorageDirectory(); 
File dir = new File(sdCard + "/myFolder"); 

//make them in case they're not there 
dir.mkdirs(); 

//create a standard java.io.File object for the Workbook to use 
File wbfile = new File(dir, "backup.xls"); 

try{ 
    WritableWorkbook workbook = Workbook.createWorkbook(wbfile); 
    workbook.createSheet("worksheet", 0); 

    workbook.write(); 
    workbook.close(); 
} catch (IOException ex) { 
    Log.e("Workbook Test", "Could not create " + wbfile.getPath(), ex); 
} 
return wb; 

這應該告訴你更多關於這是怎麼回事。

EDIT 2

多一點研究,我發現了另一個可能的問題:JExcelApi的使用了大量的資源,當它正在創建一個文件。一種解決方案是使用臨時文件。添加以下代碼:

WorkbookSettings wbSettings = new WorkbookSettings(); 
wbSettings.setUseTemporaryFileDuringWrite(true); 

try塊內,改變創建工作簿中的行:

WritableWorkbook workbook = Workbook.createWorkbook(wbfile, wbSettings);