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

طريقة لقراءة ملف الإكسل ب php

بدأه bilal2005 في 10 مارس 2014 · 7 رد · 1,597 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم 

 

لا أعرف إن كان العنوان مناسب أم لا لكن لم أعرف أن أشرح المشكلة من العنوان 

 

لدي ملف إكسل ريد قراءة البينات منه إلى قاعدة البينات هذا لا مشكلة كتبت الكود المناسب لها 

لكن المشكلة التي أريد  فكرة لحلها هي التالي

 

الكود الذي كتبته يقرأ البينات من ملف ذا فرومة محددة يعني البينات تبدأ من A5 وأسماء الجداول ثابثة 

 

ما أريده أن يقرأ البينات كيف ما كان شكل الملف سواء يدبأ من A5 أو َA10 أو B4 وكيف ما كانت أسماء الجداول ويخزنها في قاعدة البينات 

 

هل توجد فكرة ؟

#2

أخى العزيز

 

يوجد كلاس جاهزة يمكنك أستخدامها لقراءة وكتابة وإنشاء ملفات الاكسل

مثال بسيط على طريقة أستخدامها

/** PHPExcel */
include 'PHPExcel.php';

/** PHPExcel_Writer_Excel2007 */
include 'PHPExcel/Writer/Excel2007.php';

// Create new PHPExcel object
echo date('H:i:s') . " Create new PHPExcel object\n";
$objPHPExcel = new PHPExcel();

// Set properties
echo date('H:i:s') . " Set properties\n";
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw");
$objPHPExcel->getProperties()->setLastModifiedBy("Maarten Balliauw");
$objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Test Document");
$objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Test Document");
$objPHPExcel->getProperties()->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.");


// Add some data
echo date('H:i:s') . " Add some data\n";
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Hello');
$objPHPExcel->getActiveSheet()->SetCellValue('B2', 'world!');
$objPHPExcel->getActiveSheet()->SetCellValue('C1', 'Hello');
$objPHPExcel->getActiveSheet()->SetCellValue('D2', 'world!');

// Rename sheet
echo date('H:i:s') . " Rename sheet\n";
$objPHPExcel->getActiveSheet()->setTitle('Simple');

		
// Save Excel 2007 file
echo date('H:i:s') . " Write to Excel2007 format\n";
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter->save(str_replace('.php', '.xlsx', __FILE__));

// Echo done
echo date('H:i:s') . " Done writing file.\r\n";

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

تم تعديل هذه المشاركة بواسطة مستر برمجة في 11 مارس 2014 في 00:32

||||||||||||||||||||||||||||||||||||


||||||||||||||||||||||||||||||||||||


egypt_coa.gif


||||||||||||||||||||||||||||||||||||


||||||||||||||||||||||||||||||||||||

#3
اقتباس

 

أخي العزيز

يبدوا أنك لم تفهم المشكلة فالمشكلة ليست في قراءة من ملف الأكسل 

 

المشكلة أن هناك بينات أريد إرسالها إلى قاعدة البينات 

 

شكل الملف يتغير ليس له شكل ثابث 

فكيف ستقرأ ملف متغير الشكل وترسله إلى قاعدة البينات 

 

 

أظف أن الكلاس الذي أتيت به هو للكتابة وليس للقراءة 

تم تعديل هذه المشاركة بواسطة bilal2005 في 11 مارس 2014 في 03:45

#4

أخى العزيز

 

للاسف لم أفهم مقصد سؤالك جيدا نظرا لوجود أخطاء إملائية كثيرة, لذلك أنا قمت بالرد عليك حسب ما فهمت وأيضا حسب عنوان الموضوع الذى كتبتة .

 

اقتباس

أظف أن الكلاس الذي أتيت به هو للكتابة وليس للقراءة

 

هذا أقتباس من الموقع الخاص بالكلاس يؤكد أن الكلاس (قراءة, وكتابة)

  • PHPExcel - Read, Write and Create Excel documents in PHP - Spreadsheet engine
  • which allow you to write to and read from different spreadsheet file formats

||||||||||||||||||||||||||||||||||||


||||||||||||||||||||||||||||||||||||


egypt_coa.gif


||||||||||||||||||||||||||||||||||||


||||||||||||||||||||||||||||||||||||

#5

نتفرض أن عندنا ملف إكسل على هذا الشكل 

 

http://www.mr-sms.net/sms1/ex1.gif

 

كما ترى البينات تبدأ من A1 نفس الملف تم تغيره فعض أن نبدأ القراءة من A1 تم تغيره إلى A7 مثلا 

 

لدينا في قاعدة البينات حقل بإسم

الإسم وحقل بأسم المعرف 

 

عندما نقرأ من ملف أكسل نبدأ القراءة من A1 ونرسله إلى قاعدة البينات في حلق تدور على كل الحقول .

 

الأن لو لو كان الملف يبدأ من A7 فإن قاعدة البينات ستم ملأها بالفراغ لأن A1 فارغ 

 

وصلت الفكرة ؟؟؟

تم تعديل هذه المشاركة بواسطة bilal2005 في 11 مارس 2014 في 11:15

#6

أخى العزيز

 

لنفرض أن البيانات يتم سحبها من الملف وتخزينها بشكل مؤقت فى مصفوفة, ثم نقوم بعمل حلقة لكى يتم طباعتها فى الصفحة .

 

أولا المصفوفة التى تخزن البيانات بشكل مؤقت تكون بهذا الشكل, وكما سنرى أن المصفوفة تحتوى على عناصر فارغة, أى لا تحتوى على بيانات

$array = array("ahmed", "hassan", "", "Nasser", "Khaled", "", "nader");

الكود التالى هو عبارة عن حلقة لكى يتم طباعة البيانات المخزنة فى المصفوفة فى الصفحة .

$array = array("ahmed", "hassan", "", "Nasser", "Khaled", "", "nader");
foreach($array as $value) {
    echo $value."<br/>";
}

النتيجة ستكون بهذا الشكل

 

empty_fields.jpg

 

 

كما راينا فى الصورة السابقة, يوجد فراغات بين الاسماء, وهذا بسبب أن المصفوفة تحتوى على عناصر فارغة, أى لا تحتوى على أى محتوى.

إذن الحل هو بسيط جدا, نقوم بإضافة شرط if يقوم بالتأكد من وجود بيانات مخزنة فى عنصر المصفوفة قبل طباعتة, وسوف يكون الكود بعد التعديل بهذا الشكل.

$array = array("ahmed", "hassan", "", "Nasser", "Khaled", "", "nader");
foreach($array as $value) {
    if ($value != "") {
        echo $value."<br/>";
    }
}

فى الكود السابق قمنا فقط بإضافة شرط, إذا كان عنصر المصفوفة لا يحتوى على محتوى لا تطبعة, أى يتم إهمالة, والنتيجة بعد تنفيذ الكود السابق تكون النتيجة كالاتى

 

good.jpg

 

 

طبعا كل الكلام السابق, يعتبر كمثال صغير لتقريب الفكرة ليس أكثر, حتى تفهمها ثم تطبقها على مثالك أنت .

$array = array("ahmed", "hassan", "", "Nasser", "Khaled", "", "nader");
foreach($array as $value) {
    if ($value != "") {
        mysql_query("INSERT INTO table('filed') VALUES('value')");
    }
}

أتمنى أنى أكون فهمت ما تقصدة وجاوبت على سؤالك .

||||||||||||||||||||||||||||||||||||


||||||||||||||||||||||||||||||||||||


egypt_coa.gif


||||||||||||||||||||||||||||||||||||


||||||||||||||||||||||||||||||||||||

#7
اقتباس

 

 

أخي رجاء حاول أن تقرأ ما كتبته وتفهم ما أريد لا أريد كود للقراءة من ملف إكسل فهذا عندي وبكل سهولة يمكن أخده من موقع المكتبة  PHPExcel

 

سأحاول للمرة الثالثة لعل الفكرة تصل 

 

ملف الإكسل ليس له شكل خاص يعني كل مرة يكون بشكل هناك قاعدة بينات نفرض أن ملف الإكسل في المرة الأولى كان على الشكل التالي 

 

الإسم   الرقم 

 

ويبدأ الملفمن A2

 

ففي قاعدة البينات يتم إنشاء جدول فيه الحقول الإسم والرقم .

 

أنت عملت الفروم لمعالجة هذ الملف .

طيب  الآن رفعت ملف بشكل أخر 

 لكن مثلا 

 

الإسم الرقم  تاريخ الإزدياد 

 

وملف الإكسل بنفس الشكل الجديد

 

ويبدأ الملف من B5 

 

فهل هناك فكرة لمعاجلة الملفات هكذا ؟

هناك باترن إسمه adapter 

 

لكن هذا في الجافا خصوصا في الويب ميثود وهذه الأمور 

 

لكن في الphp هل هناك فكرة ؟؟؟؟

تم تعديل هذه المشاركة بواسطة bilal2005 في 11 مارس 2014 في 17:01

#8

أخى العزيز

 

أنا رديت عليك على أساس كلامك هذا

 

اقتباس

عندما نقرأ من ملف أكسل نبدأ القراءة من A1 ونرسله إلى قاعدة البينات في حلق تدور على كل الحقول .

 

الأن لو لو كان الملف يبدأ من A7 فإن قاعدة البينات ستم ملأها بالفراغ لأن A1 فارغ

 

أنت لم تشرح كل التفاصيل فى ردك السابق, وكان سؤالك (فإن قاعدة البينات ستم ملأها بالفراغ لأن A1 فارغ), وأنا رديت على أساس هذا السؤال .

 

 

أما بالنسبة للـ adapter pattern, فهذة بعض المقالات التى تتكلم عن أستخدام هذا pattern  فى PHP (باللغة الانجليزية)

 

المقالة الاولى

المقالة الثانية

المقالة الثالثة

 

 

أتمنى أنهم يفيدوك.

||||||||||||||||||||||||||||||||||||


||||||||||||||||||||||||||||||||||||


egypt_coa.gif


||||||||||||||||||||||||||||||||||||


||||||||||||||||||||||||||||||||||||

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