آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

خواندن excel نسخه XLS و XLSX

Criss  5 سال پیش  5 سال پیش
+3 0

گاهی ممکنه نیاز باشه بخشی از اطلاع از طریق اکسل وارد برنامه بشه این اکسل ممکنه نسخه Excel 97-2003 Workbook یا همون XLS باشه یا نسخه XLSX که فکر میکنم 2007 به بعد هست ! هرچند که گرفتن خروجی CSV از اکسل ساده ترین راه برای پرازش کردن اون هست اما وقتی کاربر قراره این کارو انجام بده بهتره از نظر تجربه کاربری این مورد رو مدیریت کرده باشم .

خوندن نسخه های xls خیلی ساده است ، اما xlsx مستندات پر دردسری داشت

برای خوندن از روی XLS کافیه لایبری زیر رو استفاده کنید :

 compile 'net.sourceforge.jexcelapi:jxl:2.6.12'

منابع :https://mvnrepository.com/artifact/net.sourceforge.jexcelapi/jxl 

https://www.mkyong.com/java/jexcel-api-reading-and-writing-excel-file-in-java/

و نمونه کد بصورت زیر میشه :

 private void jexcelapi(final String path) {
Workbook workbook = null;
try {

workbook = Workbook.getWorkbook(new File(path));

Sheet sheet = workbook.getSheet(0);
Log.i("LOG", "getRows: " + sheet.getRows());

} catch (IOException e) {
e.printStackTrace();
} catch (BiffException e) {
e.printStackTrace();
} finally {

if (workbook != null) {
workbook.close();
}

}
}

اما برای XLSX لایبری های زیر رو دانلود کنید :

 https://github.com/andruhon/AndroidReadXLSX/tree/master/example/app/libs

نسخه ساپورت اون از اندروید 4 API 19 هست :

 https://github.com/andruhon/AndroidReadXLSX/blob/master/example/app/build.gradle

منبع : http://blog.kondratev.pro/2014/09/reading-xlsx-on-android-3.html و https://github.com/andruhon/AndroidReadXLSX/tree/antbuild

برای اینکه پروژتون موقع بیلد پروژه و لایبری ها به مشکل نخوره لازمه این موارد رو هم رعایت کنید :

compile 'com.android.support:multidex:1.0.1'

و در defaultConfig مقدار multiDexEnabled true رو ست کنید

 multiDexEnabled true

من تست کردم اونطوری که توی گرادل example گفته شده نیازی به خطوط زیر نیست :

 packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
}

 در نهایت تست پروژه رو میتونید بصورت زیر انجام بدید :

 
private void excelTest() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
String type = "*/*";
// type = "application/vnd.ms-excel";
// type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
intent.setType(type);
intent.addCategory(Intent.CATEGORY_OPENABLE);

try {
startActivityForResult(Intent.createChooser(intent, "Select txt file"), 200);
} catch (android.content.ActivityNotFoundException ex) {
// Potentially direct the user to the Market with a Dialog
Toast.makeText(G.context, "Please install a File Manager.", Toast.LENGTH_SHORT).show();
}
}

public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
Uri uri = data.getData();
String path = uri.getPath();
G.toast(path.contains(".xls") ? path : "NOT");
// jexcelapi(path);
if (path.contains(".xlsx")) {
apacheExcel(path);
} else {
jexcelapi(path);
}
}
}

private void apacheExcel(final String path) {
try {
XSSFWorkbook workbook = new XSSFWorkbook(path);
XSSFSheet sheet = workbook.getSheetAt(0);
Log.i("LOG", "getPhysicalNumberOfRows: " + sheet.getPhysicalNumberOfRows());
} catch (IOException e) {
e.printStackTrace();
}
}

private void jexcelapi(final String path) {
Workbook workbook = null;
try {

workbook = Workbook.getWorkbook(new File(path));

Sheet sheet = workbook.getSheet(0);
Log.i("LOG", "getRows: " + sheet.getRows());

} catch (IOException e) {
e.printStackTrace();
} catch (BiffException e) {
e.printStackTrace();
} finally {

if (workbook != null) {
workbook.close();
}

}
}

توی تصویر بالا هر دو نسخه XLS , XLSX دیتای مشابه دارند که نتیجه خروجی لاگ رو در صورت انتخاب هر کدوم بصورت زیر میشه :

I/LOG(14652): getRows: 33
I/LOG(16821): getPhysicalNumberOfRows: 33

لینک مفید :

http://poi.apache.org/
https://www.rgagnon.com/javadetails/java-0516.html
https://mvnrepository.com/artifact/org.apache.poi/poi
http://blog.kondratev.pro/2015/08/reading-xlsx-on-android-4-and-hopefully.html
0 0
ای بنازم. بازگشت استادی از استادان انجمن رو به همه ی بچهای اینجا تبریک میگم :) (5 سال پیش)
0 0
یاخداا اینا دیگه چیه!!! :| (5 سال پیش)
+1 0
برای مشکل خوندن مقدار String از روی سلولی که مقدار NUMERIC داره مثل کد ملی ممکنه به مشکل بخورید که مشکل به این طریق حل میشه : لینک سایر لینک های مفید : لینک + لینک (5 سال پیش)
 برای این سوال پاسخی وجود ندارد.

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .