چگونه : داده ها را از فایل excel بخوانیم و در دیتابیس MySQL بریزیم ؟!

25 دیدگاه

سلام 🙂

مدتی قبل در یکی از کارها باید یک سری اطلاعات رو از فایل excel می خواندیم و در دیتابیس MySQL ذخیره می کردیم .چون برای اولین این کارو انجام می دادم مدتی دنبال بهترین و آسون ترین روش بودم که بالاخره مشکلم با این اسکریپت راه افتاد که می خواهیم حالا بررسی کنیم . روش های دیگری هم هست مثل استفاده از کتابخانه PHP EXCEL که به علت حجم بالای کلاس و پیچیدگی بیشتری که داشت انتخاب ما نبود . یه نکته دیگر اینکه این اسکریپت فعلا از زبان فارسی پشتیبانی نمی کند

 فایل اصلی

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="fa">
<head>
    <title>Progress Bar</title>
			<style>
			body{font:.8em tahoma;direction:rtl;text-align:center}
			#logo{margin:40px auto 40px auto}
			#progress{width:500px;border:1px solid #ccc;padding:8px;margin: 0px auto;}
			#progress div{background-color:#C3FF73;padding:4px}
			#information{margin: 0px auto;width:500px;text-align:right}
		</style>
</head>
<body>

<img src="logo-public.png" id="logo" /><br/>
<span>اسکریپت تبدیل فایل ایکسل به MySQL</span>

<!-- Progress bar holder -->
<div id="progress"></div>
<!-- Progress information -->
<div id="information"></div>
<?php

error_reporting(E_ALL^E_NOTICE);
require_once 'Excel/reader.php';
$data = new Spreadsheet_Excel_Reader();

mysql_connect('localhost', 'root', '');
mysql_select_db('xls2sql');
mysql_query('SET NAMES utf8');
$data->read('Senator.xls);

for ($j = 1; $j < $data->sheets[0]['numRows']; $j++)
  {
    $percent = intval( $j/$data->sheets[0]['numRows']  * 100) . "%";
    $f1      = $data->sheets[0]['cells'][$j + 1][1];
    $f2      = $data->sheets[0]['cells'][$j + 1][2];
    $f3      = $data->sheets[0]['cells'][$j + 1][3];
    $f4      = $data->sheets[0]['cells'][$j + 1][4];
    mysql_query("insert INTO `xlsx` values('','$f1','$f2','$f3','$f4')");
    // Javascript for updating the progress bar and information
    echo '<script language="javascript">
    document.getElementById("progress").innerHTML="<div style=\"width:' . ($percent) . ';\">' . ($percent) . '</div>";
    document.getElementById("information").innerHTML="<b>' . number_format($j) . '</b> ردیف از کل <b>' . number_format($data->sheets[0]['numRows']) . '</b> رکورد پردازش شد !";
    </script>';
    // Send output to browser immediately
    ob_flush();
  }
?>

از خط 6 تا 10 کد استایل های CSS قرار دارند . در خط 25 کلاس مربوطه را به برنامه الحاق کرده و در خط بعدی یک شی (Object) از روی کلاس فوق می سازیم .در خط 28 اطلاعات مربوط به پایگاه داده و در خط بعدی نام پایگاه داده را وارد کرده ایم (کد sql لازم برای ایجاد جدول لازمه داخل فایل اسکریپت در آخر همین پست قرار دارد) .در خط 31 نام فایل excel ای را وارد می کنیم که می خواهیم اطلاعاتش را بخوانیم .

در همین رابطه :   راهنماي سريع عبارات منظم در php

سپس به وسیله یک حلقه for اطلاعات فایل ایکسل را ردیف به ردیف خوانده در در دیتابیس ذخیره می کنیم .این اسکریپت همچنین یک progressbar نیز دارد که روند پیشرفت عملیات ذخیره سازی را در حجم های انبوه بهتر مشخص می کند.

امیدوارم این اسکریپت مورد استفاده تون قرار بگیرد و به دوستان تون هم پیشنهاد کنید . ما رو از نظرات تون نیز بهره مند کنید

 

دسته بندی : PHP

25 نظر

      1. اوکی شد، با فایل excel که شما گذاشتین کار میکنه ولی فایل من ایمپورت نمیشه، تغییرات مورد نظر رو هم در فایل php اعمال کردم
        یه مورد دیگه هم هست که از فارسی پشتیبانی نمیکنه
        فایل excel شما رو هم بخشی ازش فارسی هست ولی در دیتابیس بصورت A یا D و … وارد میشه
        ممنون میشم بررسی کنین
        مرسی

  1. سلام ممنون بابت اسکریپت تون اما مثل چندتا از دوستان دیگه که ذکر کرده بودند، برای من هم تا 98% میره و بعد هیچ اتفاقی نمیفته و توی دیتابیس هم ذخیره نمیکنه…

    ممکنه راهنمائی بفرمائید که مشکل از کجا میتونه باشه…؟

    با تشکر

  2. سلام
    این فایل روکجااستفاده کنم وفایل اکسل خود رو توکدام مسیر وکلا با چه کدنویسی عملیات فوق رو انجام بدم .ممنون

  3. سلام.جواب نداد.تا 90 درصد میره ناگهانی.میگه 9 از 10 پردازش شد.اما هیچی نمیره توی دیتابیس.
    البته هنوز کد را بررسی دقیق نکردم.

  4. دوستان اگه کسی ازاین کد استفاده کرد وجواب گرفت ،لطفا بنده هم راهنمایی کنید که این فایل روکجااستفاده کنم وفایل اکسل خود رو توکدام مسیر وکلا با چه کدنویسی عملیات فوق رو انجام بدم .ممنون

  5. سلام وممنون
    من اجراش میکنم تا 99 درصد پیش میره و این ارور رو میده

    Notice: Undefined variable: formatstr in C:\ms4w\Apache\htdocs\mapping\excelRead\excelRead\Excel\reader.php on line 410
    ولی هیچی تو پایگاه داده نمیره

  6. با درود و احترام
    می خواستم این کد را تست کنم لطفا بگویید فایل reader.php را از کجا دانلود کنم؟

  7. به نام خدا
    و با سلام
    بالاخره با کلی جستجو و…
    بعد نزدیک به 2 ساعت راه حل برای نمایش کاراکتر های فارسی رو پیدا کردم، اونم:
    $data->setOutputEncoding(“UTF-8”);
    دوستان برای تشکر فقط یه صلوات برامون بفرستند.
    موفق و پیروز باشید.

    1. خدا خیرت بده از دیروز درگیر این موضوع بودم، کلی روش که انجام میشد ولی کلی تبدیلات باید رو اکسل انجام میدادی تا فارسی رو هم نشون بده، و این روش به راحتی این کارو انجام داد

  8. سلام
    دوست عزیز اسکریپت خوبیست، فقط خوب بود از زبان فارسی هم پشتیبانی می کرد. اگه امکان داره راه این رو که از زبان فارسی پشتیبانی کنه، مختصرا توضیج دهید.
    با تشکر.

  9. مهندس فکر می کنم توی قالب قبلی برای این جور پست هات یک فایل نمونه هم میگذاشتی که توش تمام فایل های مورد نیاز بود ولی الان یا من نمی تونم پیداش کنم یا نیستش !
    مثلا همین اسکپریپت رو من قبلا گرفتم و ازش استفاده هم کرده بودم ولی الان فقط کدهاش نمایش داده میشه و فایلهایی که برای اجرا به اونها نیاز داره مثل reader.php موجود نیست.

  10. یک دیکشنری ویندوز دارم که از اکسل استفاده می کنه, برای تبدیل به نسخه ی آنلاینش دنبال راه حل بودم که به نظر چیز خوبی پیدا کردم.
    ممون

  11. یعنی اینکه میخوام جداول پایگاه داده رو پس از ایمکه جستجو کردم از طریق فایل اکسل ببینم .من مثلا جستجو میکنم که آقای x رو نتایجش رو بیار (جدولش رو بیار )ولی به صورت اکسل

  12. سلام میشه بگید اگر بخواهیم که نتایج مشاهده شده از پایگاه رو در فرم اکسل ببینیم چیکار کنیم؟؟؟؟؟؟؟

  13. ssalam,man az in code to sitam estefade kardam ama ba in error movajeh shodam,mishe komaakam konid,mamnon misham begid

    Fatal error: Class ‘Spreadsheet_Excel_Reader’ not found in

    1. سلام
      چیزی که از این خطا معلومه اینه که کلاس مربوطه تو کد شما وجود نداره یعنی include نکردید به کدتون

  14. من این اسنیپت رو ندیده بودم. البته راه دیگه ای هم هست: import کردن فایل اکسل به پایگاه داده در phpMyAdmin.
    از آپدیت پروگرس بارش خوشم اومد. همونجا میشد یک لوگ هم اضافه کرد تا در صورت خطا گزارش کنه.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *