在阅读android中的excel文件时发生
我正在尝试读取一个excel文件。 该文件保存在我的工作空间名为RoCom_DB
的文件夹中,文件名为RoCom.xlsx
。
我正在尝试使用以下代码读取该文件:
public String readComplexExcelFile(Context context){ try{ // Creating Input Stream File file = new File(Environment.getExternalStorageDirectory() + "/Android/data/" + getApplicationContext().getPackageName() + "/RoCom_DB/", "RoCom.xlsx"); FileInputStream myInput = new FileInputStream(file); // Create a POIFSFileSystem object POIFSFileSystem myFileSystem = new POIFSFileSystem(myInput); // Create a workbook using the File System HSSFWorkbook myWorkBook = new HSSFWorkbook(myFileSystem); // Get the first sheet from workbook HSSFSheet mySheet = myWorkBook.getSheetAt(0); /** We now need something to iterate through the cells.**/ Iterator<Row> rowIter = mySheet.rowIterator(); while(rowIter.hasNext()){ HSSFRow myRow = (HSSFRow) rowIter.next(); Iterator<Cell> cellIter = myRow.cellIterator(); while(cellIter.hasNext()){ HSSFCell myCell = (HSSFCell) cellIter.next(); Log.d("", "Cell Value: " + myCell.toString()); Toast.makeText(context, "cell Value: " + myCell.toString(), Toast.LENGTH_SHORT).show(); } } }catch (Exception e){ e.printStackTrace(); } return ""; }
问题是每次我尝试读取文件,我得到一个File not found exception
。 我已经使用了这个必需的poi-3.7.jar
,并将这段代码保留在我的manifest.xml
:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
我不想使用assets
目录中的excel,因为它只支持excel高达1 MB,我的文件有可能增加大小。
有谁能告诉我我做错了什么? 任何帮助是极大的赞赏 。 谢谢 。
我得到这个以相当奇怪的方式工作。 。
1>首先,我摆脱了POI.jar
,而是使用jxl.jar
。 然后再次我的Excel工作簿是在xslx
的格式,因为它是在MS Excel的2007年,所以我把它转换为xls
即Excel(97-2003)格式。
2>然后我使用下面的命令把我的excel推到了SD卡上:
-
a>先
run
cmd
(对于windows)b>导航到您的
adb.exe
所在的adb.exe
(它将在android – > sdk – >平台工具中)c>然后将您的xls复制到保存adb.exe的文件夹中。
d>现在运行adb shell。 将打开一个unix shell。 转到:cd / mnt并使用:
chmod 777 /sdcard
更改SD卡的权限e>现在使用:
exit
命令返回到批处理提示符并键入:adb push file.xls /mnt/sdcard/
f>然后进入
/mnt/sdcard/
使用cd
,使用以下chmod 777 file.xls
更改文件权限:chmod 777 file.xls
3>现在所有重要的事情都完成了,我写了下面这段代码来解决这个问题:
public String readComplexExcelFile(Context context, String userInput){ String requiredContents = ""; try{ File inputWorkbook = new File(Environment.getExternalStorageDirectory()+"/myFile.xls"); Workbook w; // Create a workbook using the File System w = Workbook.getWorkbook(inputWorkbook); // Get the first sheet from workbook Sheet sheet = w.getSheet(0); /** We now need something to iterate through the cells.**/ for (int j = 0; j < sheet.getColumns(); j++) { for (int i = 0; i < sheet.getRows(); i++) { Cell cell = sheet.getCell(j, i); if(cell.getContents().equalsIgnoreCase(userInput)){ Cell cellCorrespond = sheet.getCell(j+1, i); requiredContents = cellCorrespond.getContents(); break; } } } }catch (Exception e){ e.printStackTrace(); } return requiredContents; }
希望这会帮助那些在经历同样的过程的时候没有太多运气的人。 干杯!
public File(String dirPath,String name)在path和名称之间放置一个path分隔符,所以你应该删除'RoCom_DB'后的最后一个'/'。
你也可以存储这个值
Environment.getExternalStorageDirectory() + "/Android/data/" + getApplicationContext().getPackageName() + "/RoCom_DB"
在一个string,并显示它,以确保它是正确的形成。