آموزش ساخت اکسل در برنامه نویسی اندروید
سلام دوستان امیدوارم حالتان خوب باشد در این سری از آموزش برنامه نویسی اندروید به آموزش ساخت اکسل در برنامه نویسی اندروید می پردازیم به طور معمول نمی توان فایل اکسل (Excel) ساخت پس مثل همیشه باید از کتاب خانه استفاده کنیم همانطور که گفتیم اندروید Api خاصی برای ساخت اکسل (Excel) ندارد پس لازمه که در اینجا برای ساخت اکسل (Excel) از کتاب خانه استفاده کنیم در ادامه با ما همراه باشید تا آموزش ساخت اکسل در اندروید را بیاموزید.
ویژگی های این کتاب خانه
- امکان تعریف رنگ
- امکان تعریف اندازه هر cell
- دسترسی به row و column (سطر و ستون)
ابتدا باید فایل jar رو که در ادامه برای شما قرار میدهیم دانلود کنید و در پوشه libs قرار دهید.
لینک دانلود کتاب خانه
برای اینکه کتاب خانه را اضافه کنید می توانید از لینک زیر استفاده کنید.
آموزش افزودن کتاب خانه در برنامه نویسی اندروید
بعد از اینکه کتاب خانه را اضافه کردید با استفاده از کد زیر می توانیم یک اکسل ایجاد کنیم.
ابتدا باید دسترسی ساخت فایل در SD را به AndroidManifest.xml اضافه کنیم.
1 | <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> |
بعد از اینکه دسترسی را اضافه کردید باید دسترسی هنگام اجرا (RunTime Permission) را اضافه کنید پس کد زیر را در زیر متودهای خود قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | private void checkRunTimePermission() { String[] permissionArrays = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { requestPermissions(permissionArrays, 1); } else { } } public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case 1: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { } else { checkRunTimePermission(); } return; } } } |
سپس متود checkRunTimePermission را در ابتدای Activity اجرا کنید.
1 | checkRunTimePermission(); |
متودهای زیر را نیز به پروژه خود اضافه کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | public static boolean isExternalStorageReadOnly() { String extStorageState = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(extStorageState)) { return true; } return false; } public static boolean isExternalStorageAvailable() { String extStorageState = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(extStorageState)) { return true; } return false; } private boolean saveExcelFile(Context context, String fileName) { if (!isExternalStorageAvailable() || isExternalStorageReadOnly()) { return false; } boolean success = false; Workbook wb = new HSSFWorkbook(); Cell c = null; CellStyle cs = wb.createCellStyle(); cs.setFillForegroundColor(HSSFColor.LIME.index); cs.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); Sheet sheet1 = null; sheet1 = wb.createSheet("Export"); Row row = sheet1.createRow(0); c = row.createCell(0); c.setCellValue("نام کاربر"); c.setCellStyle(cs); c = row.createCell(1); c.setCellValue("نام کاربر دوم"); c.setCellStyle(cs); c = row.createCell(2); c.setCellValue("نام کاربر سوم"); c.setCellStyle(cs); c = row.createCell(3); c.setCellValue("نام کاربر سوم"); c.setCellStyle(cs); c = row.createCell(4); c.setCellValue("نام کاربر چهارم"); c.setCellStyle(cs); c = row.createCell(5); c.setCellValue("نام کاربر پنجم"); c.setCellStyle(cs); sheet1.setColumnWidth(0, (15 * 500)); sheet1.setColumnWidth(1, (15 * 500)); sheet1.setColumnWidth(2, (15 * 500)); File root = new File(Environment.getExternalStorageDirectory(), ""); if (!root.exists()) { root.setReadable(true); root.setWritable(true); root.mkdirs(); } File file = new File(root, fileName); FileOutputStream os = null; try { os = new FileOutputStream(file); wb.write(os); success = true; } catch (IOException e) { } catch (Exception e) { } finally { try { if (null != os) os.close(); } catch (Exception ex) { } } return success; } |
دو تا متو داریم در ابتدا به نام های isExternalStorageReadOnly و isExternalStorageAvailable که بررسی می کند حافظه خارجی قابل دسترسی و هیمنطور ReadOnly نباشد. سپس یه منود به نام saveExcelFile داریم که عمل ساخت اکسل در آن انجام می شود و بعد از اینکه بررسی ها انجام شد یک Workbook ساخته می شود کار به این شکل است که بعد از اینکه یک WorkBook ساختیم یک cell میسازیم تا داده ها را در آن قرار دهیم در بالا با یک سلول تمامی مقادیر را پر خواهیم کرد. امکان ساخت sheet نیز وجود دارد تا sheet نسازید که کاری نمیشه کرد پس ابتدا یک sheet ساخته می شود و مثلا ما یک اسم براش قرار دادیم بعد از آن در sheet که ساختیم یک ردیف ایجاد کردیم و با استفاده از createCell سلول های ساختیم و مقادیری با یک استایل خاص به آن اضافه کردیم. برای اینکه اندازه هر سطر و ستون را تغییر دهدید می نونید از setColumnWidth استفاده کنید و در نهایت با استفاده از FileOutputStream یک فایل ساختیم و آن را در حافظه ذخیره کردیم.
بعد از اینکه کد بالا را قرار دادید باید متود saveExcelFile را صدا بزنید ورودی های آن یک context و دومی نام فایل مثل زیر می توانید از آن استفاده کنید.
1 | saveExcelFile(MyContext,"excel.xls") |
این آموزش هم به پایان رسید.
موفق و پیروز باشید.
سلام خدمت شما مهندس گرامی
با تشکر از آموزش خوبتون
من میخوام یه ردیف دیگه به فایل اکسل اضافه کنم به خاطر همین کد بالا رو به این صورت تغییر میدم
Row row = sheet1.createRow(rowCount);
rowCount رو هم به صورت پارامتر ورودی دریافت میکنه و با هر بار اجرای متد saveExcelFile یک ردیف با پارامترهای ورودی با شماره ردیف rowCount ایجاد میشود
تا اینجای کار درسته و ایرادی هم نداره منتها مسئله اینه که ردیف های قبلی رو پاک میکنه و فقط ردیفی رو که تو آخرین اجرای متد ایجاد کرده باقی میمونه
چیکار باید بکنم که این اتفاق نیافته
لطفا راهنماییم کنید
در ضمن من دستور os.close(); رو هم کامنت کردم اما اتفاق خاصی نیافتاد