تعلم كيفية قراءة ملفات Excel إصدار XLS & XLSX بإستخدام المكتبة Apache POI

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

تعلم كيفية قراءة ملفات Excel إصدار XLS & XLSX بإستخدام المكتبة Apache POI

مُساهمة من طرف أحمد مناع في الجمعة نوفمبر 29, 2013 9:55 am

بسم الله الرحمن الرحيم 
أهلا وسهلا بكم إخوانى الكرام ....منذ فترة كنت قد كتبت مقال عن كيفية قراءة و كتابة مصنفات Excel بأستخدام المكتبة JExcel وأخبرنا بإن تلك المكتبة تمكنك فقط من قراءة مصنفات الاكسل  الاصدار 95, 97, 2000, 2003 و التى عادة تكون بإمتداد XLS ...درس اليوم هو عن كيفية قراءة ملفات الاكسل إصدار XLS بالاضافة الى إصدار XLSX و التى تبدأ من الاصدرا 2007 فما فوق وذلك من خلال المكتبة Apache POI library و ذلك من خلال الخطوات البيسطة التالية :

1_ قم بتحميل المكتبة Apache POI library v3.8 أو أى إصدار أعلى من هنـــــــــــــــــــــــــــا

2_قم بفك الضغط ثم قم بنسخ الملف poi-3.10-beta2-20130904 الى مجلد مشروعك classpath

3_ كتابة الشفرات البرمجية

أولا : قراءة ملفات XLS بإستخدام Apache POI وهى ملفات الاكسل إصدار Office 97 -2003

_نفترض أن لدينا المصنف اكسل بإسم Read_Excel_Example.xls و يحتوى على ورقة عمل بإسم SHEET1 ويحتوى على بعض البيانات كما فى الشكل التالى :


_ فى البداية نقوم بإستيراد مكتبات العمل التالية :
الرمز:
import java.io.FileInputStream;
import java.io.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.ss.usermodel.*;
import java.util.Iterator;
_ فى الدالة الرئيسية للتطبيق نقوم بإنشاء مثيل جديد من FileInputStream و إسناد أسم و مسار مصنف الاكسل المراد القراءة منه الى الكائن الجديد على النحو التالى :
الرمز:
 FileInputStream input_document = new FileInputStream(new File("C:\\Read_Excel_Example.xls"));
_ نقوم إنشاء مثيل جديد من HSSFWorkbook _وهو الكائن الذى سيقوم بقراءة مصنف الاكسل_ ثم إسناد إلية مصنف الاكسل المراد قرائه على النحجو التالى :
الرمز:
 HSSFWorkbook my_xls_workbook = new HSSFWorkbook(input_document);
_نقوم بالاعلان عن الكائن HSSFSheet و الذى سيقوم بقرائة ورقة العمل sheet وذلك على النحو التالى :
الرمز:
  HSSFSheet my_worksheet = my_xls_workbook.getSheetAt(0);
_نقوم بالحصول على قيم الصفوف و الاععمدة فى ورقة العمل الحالية من خلال حلقتان تكرريتان على النحو التالى :

الرمز:
  Iterator<Row> rowIterator = my_worksheet.iterator();
                while(rowIterator.hasNext()) {
                        Row row = rowIterator.next();      
                        Iterator<Cell> cellIterator = row.cellIterator();
                                while(cellIterator.hasNext()) {
                                        Cell cell = cellIterator.next();
                                        switch(cell.getCellType()) {
                                        case Cell.CELL_TYPE_NUMERIC:
                                                System.out.print(cell.getNumericCellValue() + "\t\t");
                                                break;
                                        case Cell.CELL_TYPE_STRING:
                                                System.out.print(cell.getStringCellValue() + "\t\t");
                                                break;
                                        }
                                }
                System.out.println("");
                }
                input_document.close();
ويمكنك ملاحظة على الكود أعلاه ما يلى :


الرمز:
Iterator<Row> rowIterator = my_worksheet.iterator();
                while(rowIterator.hasNext()) {
                        Row row = rowIterator.next();      
  
تكرار لقراءة كل صفوف ورقة العمل الحالية

_أما الشفرة
الرمز:
 Iterator<Cell> cellIterator = row.cellIterator();
                                while(cellIterator.hasNext()) {
                                        Cell cell = cellIterator.next()
تكرار أخر لقراءة كل أعمدة ورقة العمل الحالية

_ ثم أستخدمنا جملة switch للحصول عن نوع بيانات الخلية بحيث يتم طباعة الخلايا التى تحتوى على بيانات رقمية التى تحتوى على بيانات نصية كلا على حده

و الشفرة الكاملة لقراءة مصنف أكسل إصدار Office 97 -2003  بإستخدام المكتبة Apache POI على النحو التالى :

الرمز:



import java.io.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.ss.usermodel.*;
import java.util.Iterator;
public class readxls {  
        public static void main(String[] args) throws Exception{
                FileInputStream input_document = new FileInputStream(new File("C:\\Read_Excel_Example.xls"));
                HSSFWorkbook my_xls_workbook = new HSSFWorkbook(input_document);
                HSSFSheet my_worksheet = my_xls_workbook.getSheetAt(0);
                Iterator<Row> rowIterator = my_worksheet.iterator();
                while(rowIterator.hasNext()) {
                        Row row = rowIterator.next();      
                        Iterator<Cell> cellIterator = row.cellIterator();
                                while(cellIterator.hasNext()) {
                                        Cell cell = cellIterator.next();
                                        switch(cell.getCellType()) {
                                        case Cell.CELL_TYPE_NUMERIC:
                                                System.out.print(cell.getNumericCellValue() + "\t\t");
                                                break;
                                        case Cell.CELL_TYPE_STRING:
                                                System.out.print(cell.getStringCellValue() + "\t\t");
                                                break;
                                        }
                                }
                System.out.println("");
                }
                input_document.close();
        }
}
و النتيجة  كما فى الصورة التالية :

Student ID Subject Score
101.0 English 67.0
101.0 Science 87.0
102.0 English 69.0
102.0 Science 75.0
103.0 English 37.0
103.0 Maths 90.0
لنا متابعة فى الجزء الثانى من الدرس

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم

إن فقدت مكان بذورك التي بذرتها يوما ما سيخبرك المطر أين زرعتها ..لذا إبذر الخير فوق أي أرض وتحت أي سماء ومع أي أحد.. فأنت لا تعلم أين تجده ومتى تجده؟! إزرع جميلا ولو في غير موضعه .... فلا يضيع جميلا أينما زرعا .. فما أجمل العطاء... فقد تجد جزاءه في الدنيا أو يكون لك ذخرا في الآخرة

أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 810
النقاط : 1479
التقيم : 69
الدولة : مصر
الجنس : ذكر

http://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: تعلم كيفية قراءة ملفات Excel إصدار XLS & XLSX بإستخدام المكتبة Apache POI

مُساهمة من طرف أحمد مناع في الجمعة نوفمبر 29, 2013 12:06 pm

بسم الله الرحمن الرحيم
ثانيا : قراءة ملفات  XLSX بإستخدام  Apache POI وهى ملفات الاكسل إصدار 2007

ملفات XLSX تختلف في الشكل بالمقارنة مع ملفات XLS، وبالتالي تحتاج إلى استخدام أو استيراد بعض المكتبات الجديدة من المكتبة Apache POI لقراءة بيانات تلك الملفات .وبالتالى سنقوم بإستيراد المكتبات الجديدة على النحو التالى :

الرمز:
import java.io.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.ss.usermodel.*;
import java.util.Iterator;
و يمكنك ملاحظة أننا قمنا بإستيراد المكتبات الجديدة للازمة لقراءة ملفات XLSX وهى :
الرمز:
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFSheet;
و بالتالى فإن الشفرة الكاملة ستكون على النحو التالى :

الرمز:

import java.io.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.ss.usermodel.*;
import java.util.Iterator;

public class readxlsx {  
        public static void main(String[] args) throws Exception{
                FileInputStream input_document = new FileInputStream(new File("C:\\Read_Excel_Example.xlsx"));
                XSSFWorkbook my_xlsx_workbook = new XSSFWorkbook(input_document);  
                XSSFSheet my_worksheet = my_xlsx_workbook.getSheetAt(0);
                Iterator<Row> rowIterator = my_worksheet.iterator();
                while(rowIterator.hasNext()) {
                        Row row = rowIterator.next();    
                        Iterator<Cell> cellIterator = row.cellIterator();
                                while(cellIterator.hasNext()) {
                                        Cell cell = cellIterator.next();
                                        switch(cell.getCellType()) {
                                        case Cell.CELL_TYPE_NUMERIC:
                                                System.out.print(cell.getNumericCellValue() + "\t\t"); //print numeric value
                                                break;
                                        case Cell.CELL_TYPE_STRING:
                                                System.out.print(cell.getStringCellValue() + "\t\t"); //print string value
                                                break;
                                        }
                                }
                System.out.println("");
                }
                input_document.close();
        }
}
وهو نفس الكود تقريبا الذى تم أستخدامه فى الجزء الاول من الدرس

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم

إن فقدت مكان بذورك التي بذرتها يوما ما سيخبرك المطر أين زرعتها ..لذا إبذر الخير فوق أي أرض وتحت أي سماء ومع أي أحد.. فأنت لا تعلم أين تجده ومتى تجده؟! إزرع جميلا ولو في غير موضعه .... فلا يضيع جميلا أينما زرعا .. فما أجمل العطاء... فقد تجد جزاءه في الدنيا أو يكون لك ذخرا في الآخرة

أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 810
النقاط : 1479
التقيم : 69
الدولة : مصر
الجنس : ذكر

http://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: تعلم كيفية قراءة ملفات Excel إصدار XLS & XLSX بإستخدام المكتبة Apache POI

مُساهمة من طرف زهراء في الأربعاء نوفمبر 12, 2014 5:04 pm

مقال فى منهى الروعة و الابداع فى الطرح بارك الله فيك

زهراء
........
........

تاريخ التسجيل : 18/02/2011
المساهمات : 262
النقاط : 372
التقيم : 24
الدولة : مصر
الجنس : انثى

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى