الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

قراءة ملفات Excel في الحافا

بدأه herch في 24 يونيو 2010 · 25 رد · 4,638 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم،

يمكن قراءة ملفات Excel باستعمال مكتبة Apache POI.

مكتبة POI خاصة بملفات Microsoft بصفة عامة، لكن سأتطرق لملفات Excel فقط.

هذه المكتبة تُمكننا من قراءة وكتابة ملفات من Excel 97 إلى Excel 2007.

تحميل المكتبة

الموقع الخاص ب Apache POI هو http://poi.apache.org . ولنحميل المكتبة، يمكن الذهاب إلى صفحة التحميل http://poi.apache.org/download.html وتحميل النسخة 3.6، وهي النسخة المستقرة الحالية.

محتوى الأرشيف

post-181903-094846600 1277410055_thumb.p

قراءة الملف Excel

أولا ننشئ كائنا FileInputStream يحتوي على الملف Excel

FileInputStream input = new FileInputStream("test.xls");

ثم ننشئ كائنا من صنف WorkBook، وهو يمثل مستندا Excel بالنسبة للمكتبة POI، ونمرر له الكائن FileInputStream الذي أنشأنا.

Workbook workBook = WorkbookFactory.create(input);

ثم نسترجع ال sheet الذي نريده. الأول يحمل الرقم 0

Sheet sheet = workBook.getSheetAt(0);

الآن، نريد استرجاع السطر الثاتي مثلا

Row row = sheet.getRow(1);

بعد أن استرجعنا السطر، سنقوم بقراءة الخلايا الموجودة فيه.

من أجل ذلك، إما أن نسترجع خلية محددة، مثلا الخلية الأولى:

Cell cell = row.getCell(0)

أو نسترجع Iterator يمكننا من المرور على كل خلايا السطر

Iterator<Cell> iterator = row.cellIterator();
while (iterator.hasNext()) {
	Cell cell = iterator.next();
...

لقراءة محتوى الخلية، يجب أولا أن نتعرف على نوع هذا المحتوى، ثم ننادي على الطريقة المناسبة. فمثلا الطريقة getBooleanCellValue خاصة بال boolean، و getNumericCellValue خاصة بالأعداد ...

Iterator<Cell> iterator = row.cellIterator();
while (iterator.hasNext()) {
	Cell cell = iterator.next();
	//////////////
	int cellType = cell.getCellType();
	switch (cellType) {
		case Cell.CELL_TYPE_BOOLEAN:
			System.out.println(cell.getBooleanCellValue());
			break;
		case Cell.CELL_TYPE_FORMULA:
			System.out.println(cell.getCellFormula());
			break;
		case Cell.CELL_TYPE_NUMERIC:
			System.out.println(cell.getNumericCellValue());
			break;
		case Cell.CELL_TYPE_STRING:
			System.out.println(cell.getStringCellValue());
			break;
		case Cell.CELL_TYPE_BLANK:
			System.out.println("BLANK");
			break;
	}
}

الكود

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Iterator;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

public class Main {

	public static void main(String[] args) {
		FileInputStream input = null;
		Workbook workBook;
		try {
			input = new FileInputStream("test.xls");
			workBook = WorkbookFactory.create(input);
			Sheet sheet = workBook.getSheetAt(0);
			Row row = sheet.getRow(1);
			Iterator<Cell> iterator = row.cellIterator();
			while (iterator.hasNext()) {
				Cell cell = iterator.next();
				int cellType = cell.getCellType();
				switch (cellType) {
					case Cell.CELL_TYPE_BOOLEAN:
						System.out.println(cell.getBooleanCellValue());
						break;
					case Cell.CELL_TYPE_FORMULA:
						System.out.println(cell.getCellFormula());
						break;
					case Cell.CELL_TYPE_NUMERIC:
						System.out.println(cell.getNumericCellValue());
						break;
					case Cell.CELL_TYPE_STRING:
						System.out.println(cell.getStringCellValue());
						break;
					case Cell.CELL_TYPE_BLANK:
						System.out.println("BLANK");
						break;
				}
			}
		} catch (FileNotFoundException ex) {
			ex.printStackTrace();
		} catch (IOException ex) {
			ex.printStackTrace();
		} catch (InvalidFormatException ex) {
			ex.printStackTrace();
		} finally {
			try {
				input.close();
			} catch (IOException ex) {
				ex.printStackTrace();
			}
		}
	}
}

عند تجميع هذا المثال البسيط، سنحتاج فقط للملفين poi-3.6-20091214.jar و poi-ooxml-3.6-20091214.jar

javac -cp .:poi-3.6/poi-3.6-20091214.jar:poi-3.6/poi-ooxml-3.6-20091214.jar Main.java

لكن بالنسبة للملفات xslx، أي Excel 2007، فسنحتاج أيضا إلى الملفات الموجودة في المجلد ooxml-lib والمجلد lib

المشروع Netbeans مرفق

للمزيد : http://poi.apache.or...uick-guide.html

ReadExcel.zip

المرفقات
Capture-poi-bin-3.6.png

تم تعديل هذه المشاركة بواسطة علاء الصالحي في 20 أغسطس 2010 في 02:52 — السبب: إصلاح الأخطاء الإملائية في العنوان

10
#2

مميز دائما يا عصام,,,

1
#3

+1

جميل جدا اخى عصام

جاااااارى التجربه

وان شاء الله يكوون شىء جميل

تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 25 يونيو 2010 في 05:07

Software Developer
Mahmoudkelany.com


 

#4

أفكر في قتل الأخ عصام منذ زمن

لأني لا أفكر أن أضع موضوعاً عن شيء ما إلا وتطوع لوضع واحد أحسن من الذي أفكر به بمراحل unsure.gif

والله في بالي أن أضع موضوعاً عن Excel في POI

لأني من فترة قمت بعمل برنامج لإحدى الأخوات يقوم بتحويل ملف Excel إلى Access

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

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#5

جميل جدا..

يمكن القرائة من الأكسل عن طريق تسجيل اسمها في ODBC كما يتم عند الوصول لأكسس، مثال:

// program to extract data from excel file 

import java.sql.Connection ; 
import java.sql.Statement  ; 
import java.sql.ResultSet  ; 
import java.sql.ResultSetMetaData ; 
import java.sql.DriverManager ; 
import java.sql.SQLException ; 

public class ExtractExcelData { 

    public static void main (String[] args) { 
        try { 
            Class.forName(DRIVER); 
            connection = DriverManager.getConnection(URL,userName,password); 
        } 
        catch (ClassNotFoundException cnfe) { 
            System.err.println("unable to load excel  driver"); 
            return  ; 
        } 
        catch (SQLException se) { 
            System.err.println("cannot connect to excel file"); 
            return  ; 
        } 

        try { 
            statement = connection.createStatement(); 
            String select = "SELECT * FROM [Sheet1$]"; 
            resultSet = statement.executeQuery(select); 
            metaData = resultSet.getMetaData(); 

            int count = metaData.getColumnCount(); 
            while ( resultSet.next() ) { 

                String col1 =  resultSet.getString(1) ;  
                String col2 =  resultSet.getString(2) ;  
                String col3 =  resultSet.getString(3) ;  

                System.out.println( col1 ) ; 
                System.out.println( col2 ) ; 
                System.out.println( col3 ) ; 

                System.out.println(); 
            } 
        } 
        catch (SQLException se) { 
            System.err.println("cannot execute query"); 
            return ; 
        } 

        try { 
            statement.close(); 
            resultSet.close(); 
        } 
        catch (SQLException se ) { 
            System.err.println("unable to close excel file"); 
            return  ; 
        } 
    } 

    private static final String userName = "" ; 
    private static final String password = "" ; 
    private static final String URL = "jdbc:odbc:testexcel" ; 
    private static final String DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver" ; 

    private static Connection connection ; 
    private static Statement statement ; 
    private static ResultSet resultSet ; 
    private static ResultSetMetaData metaData ; 
}

10/10 أخي عصام ومنور المنتدى ..

بالتوفيق ..

2

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#6

تمام شغل مميز جداً جاري التجربة

--

Mina Fouad

Computer & Systems Engineering Dpt.

Faculty of Engineering

Alexandria University

#7

جزاك الله الجنة اخى عصام

00020309t.gif

1958_1963.gif
#8

جزاكم الله خيرا مره اخرى

لكن عندى سوال

ملفات Exel فقط

ولا باقى الملفات ؟

word , power point , ...

باقى مجموعه الـ office يعنى

Software Developer
Mahmoudkelany.com


 

#9

تستخدم لقرائة أي ملف يتبع للفورمات OLE2 وهم Word, PowerPoint, Excel ..

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#10
Wajdy Essam كتب:

تستخدم لقرائة أي ملف يتبع للفورمات OLE2 وهم Word, PowerPoint, Excel ..

تمام

جزاكم الله خيرااا

Software Developer
Mahmoudkelany.com


 

#11

علاء, انا عندي ليك موضوع كويس

إعمل موضوع لإستيراد بيانات ل Excel sheet .

بجد هيكون موضوع كويس جدا

(و هيوفر عليا الكود اللي أنا محتاجه في أحد مشاريعيtongue.gif )

#12

مموضوع مميز

ونود من المشرفين تثبيته

وَعَبْدٌ قَدْ يَنامُ عَلَى حَرِيرٍ ××× وَذُو نَسَبٍ مَفَارِشُهُ التُّرَابُ

#13

طيب قولي يا هويدي ايه المطلوب بالضبط وأنا أكيد هساعدك

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#14

بصراحه أنا معايا مشروع عامله ب JPA و SWT و ناقص فيه شويه شغل في ال SWT و ال POI و مكسل أكمل فيه أخر 128 حاجه.

فياريت لو تكملهولي تكون مشكور أخر 1024 حاجه, خخخخخخخخخخخخخ :D

#15

هههههههههههههههه

لا بجد يا بني خليني أساعدك لأني عملت اشوية شغل حلويين على جافا و excel

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#16
علاء الصالحي كتب:

أفكر في قتل الأخ عصام منذ زمن

خذ راحتك، لا تدري كم ستريحني laugh.gif

Wajdy Essam كتب:

تستخدم لقرائة أي ملف يتبع للفورمات OLE2 وهم Word, PowerPoint, Excel ..

بالنسبة ل Excel، فإن POI يمكنها أيضا قراءة ال OpenXML format، وهو ال format المستعمل في Excel 2007 في الملفات xlsx. هذا الأمر غير موجود بالنسبة للفئات الخاصة بالتعامل مع ال Word مثلا

تم تعديل هذه المشاركة بواسطة herch في 25 يونيو 2010 في 22:03

#17

ما أنتا عارف أنك لن تهون علي

يا رجل نحن لم نطق بعدك الفترة التي غبتها عنا

ما بالك لو كنا نعلم أنك لن تعود بالمرة

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#18

موضوع كويس جدا

فيه كمان مكتبه اسمها

JEXCEl

برضه علشان الجافا تتعامل مع

EXCEl

JEXCEL

JEXCEL download

#19

السلام عليكم ورحمة الله وبركاته

جزاك الله خيرا herch

وجزاكم الله خيرا على هذا الشرح الجميل

كما يمكن استبدال ال url التالي


String url = "jdbc:odbc:Driver={Microsoft Excel Driver (*.xls)};Dbq=f:\\xlsfile.xls"

بال url المذكور في مثال wajdy essam بحيث يمكن تحديد موقع الملف

جزاك الله خيرا wajdy essam فقد استفدت من هذا المثال كثيرا .

300_130.gif

#20

تحياتي الموضوع ممتاز ويا ريتني شفته من زمان لانه عانيت الامرين لبين ما كتبت برنامج يقرأ ويخزن بالاكسل شكرا اخي الكريم

إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً         فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ


 


 


رسم المخططات البيانية بواسطة الجافا


 


كتاب تحليل وتصميم نظم المعلومات


#21

hالموضوع جيد

لماذا لم يتم تثبيت الموضوع :excl: :excl: :excl:

اذا كان لي شئ من الحق أن أسأل

تم تعديل هذه المشاركة بواسطة pro.fahd في 24 أبريل 2011 في 05:11

albert_einstein.jpg

Untitled-AE.jpg
#22

السلام عليكم

أتمنى تقبلي اخ بينكم

الموضوع قديم لكن حبيت استفسر اذا حد عنده معلومه

انا حاب اعمل صفحة ويب محليه يعني مش عالنت ..على جهازي بس تقرا ملف الاكسل بشكل مباشر..بقصد لما يكون الاثنين مفتوحيين اي تغيير في صفحة الاكسل ينعكس بشكل مباشر من غير كوماند بتن او عملية رفرش عالويب بيج

نفرض معنا صفحة اكسل فيها الخانه a1 بتساوي 3,,,, ومعنا صفحة ويب محليه تقرا الصفحه....لو غيرنا 3 الى 4 المطلوب تتغير القيمه في صفحة الويب مباشره من غير رفرش الى 4

هل هذي الطريقه في الموضوع بتعمل الشئ هذا...وبرايكم هل في طريقه افضل واقوى واسرع

الشرط من غير رفرش لصفحة الويب ولا كوماند بتن

الفكره قراءة الويب بيج لملف اكسل بشكل مباشر مش العكس يعني مش قراءة الاكسل لويب بيج.

أتمنى اي مساعده او فكره؟

#23

اولا عملية الريفريش يقبى هتستخدم الـAJAX

لتحميل البيانات مره اخرى بدون عملية تحديث للصفحه

ثانيا موضوع انك تحس بكل حركه تتعمل فى الـEXcel اعتقد هذا صعب

لكن مممكن تكون هناك طريقه لذلك

اترك الامر للاخ عصام صاحب الموضوع

Software Developer
Mahmoudkelany.com


 

#24
Mahmoud Kelany كتب:

ثانيا موضوع انك تحس بكل حركه تتعمل فى الـEXcel اعتقد هذا صعب

لكن مممكن تكون هناك طريقه لذلك

ممكن حفظ md5 hash للملف ، وكل ثانية مثلاً يقارن قيمة الhash المحفوظة بالجديدة التي حسبها فاذا كان هناك تغيير فمعناه أن الملف تغير ، واعتبر ان القيمة الجديدة هي القيمة الحالية واستمر في المقارنه.

بالتوفيق،

1

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#25
Wajdy Essam كتب:

ممكن حفظ md5 hash للملف ، وكل ثانية مثلاً يقارن قيمة الhash المحفوظة بالجديدة التي حسبها فاذا كان هناك تغيير فمعناه أن الملف تغير ، واعتبر ان القيمة الجديدة هي القيمة الحالية واستمر في المقارنه.

بالتوفيق،

ما انا مش رضيت اذكر طريقه التحديث كل ثانيه دا هيكون مكلف

بس اذا كان ضرورى خلاص

Software Developer
Mahmoudkelany.com


 

مواضيع مشابهة