منو اصلی

درگاه ورود کاربران
لینک سایت های مفید
تقویم
<    «  ارديبهشت 1391  »    >
شيدسچپج
 1
2345678
9101112131415
16171819202122
23242526272829
3031 
آرشیو
امار سایت
آمار مطالب:
  يک ساعت پيش: 0
  امروز: 0
  اين ماه: 7
  مجموع مطالب: 398
  کل نظرات: 309



آمار بازديد:
  بازديد امروز: 4094
  بازديد ديروز: 3512
  مجموع بازديدها: 2495604



آمار کاربران:
  يک ساعت پيش: 0
  امروز: 9
  اين ماه: 347
  مجموع کابران: 7265
  بن شدگان: 2

آخرين عضو:


javad_gh1370

 


کاربران آنلاین:

رباطها آنلاین: Crawl Bot

در حال حاضر 0 کاربر, 1 رباط, 1 میهمان و در مجموع 2 نفر در سایت حضور دارند.
همکاران سایت

--------------------
نظرسنجی

دوست دارید نرم افزار رو روی چه سیستم عاملی اجرا کنید ؟

Xp
Vista
Seven
Apple
Windows android
تازه های سایت
بخش های پربازدید
اطلاعات سایت
حمایت  فارسی دی بی

 

http://www.farsidb.com/farsidb.gif

برای حمایت از فارسی دی بی کد بالا را در سایت و یا وبلاگ خود قرار دهید با تشکر

رتبه و اطلاعات سایت   

   http://www.farsidb.com/alex.jpg

 

در بخشی از آخرین پروژه ایی که این روزها در حال نوشتن آن هستم لازم بود قابلیت Mail Merge مایکروسافت ورد، تحت وب پیاده سازی شود. بعبارتی کاربر یک الگو در قالب فرمت doc یا docx ایجاد می نمود و بعد از آنالیز الگو، داده های متناظر از یک فایل با فرمت اکسل در بلوک ها قرار می گرفت و فایل نهایی آماده سازی می شد. به واسطه فیلتر سازی داده های فایل اکسل و استفاده بهینه از کد راهی مناسب تر از ایمپورت داده ها از قالب Excel به Mysql پیدا نکردم. اصولاً بکارگیری نرم افزارهای آفیس مایکروسافت در محیط وب با PHP، بخصوص ویرایش فایل های ساخته شده با این مجموعه کار ساده ایی نیست. هرچند استفاده از COM در این موارد چاره ساز است اما محدودیت به سیستم عامل ویندوز را به همراه خواهد داشت.

ساده ترین راه برای انتقال داده ها، ذخیره فایل اکسل با فرمت های xls یا xlsx در قالب فرمت csv توسط مایکروسافت اکسل و ایمپورت آن به Mysql بود. این فرمت خلاصه شده عبارت comma-separated values ( مقادیر جدا شده با کاما) می باشد که داده ها را بصورت جدولی در یک فایل متنی که می توان آن را با یک وبرایش گر متن باز کرد ذخیره می کند. در حقیقت شماره خطها به ردیف های جدول و داده های جدا شده با کاما به فیلدها اشاره دارند. اما تبدیل به csv توسط اکسل UTF-8 را به خوبی پشتیبانی نمی کند و داده های فارسی در تبدیل قابل استفاده نیستند و اینکه می بایست کاربر عملیات تبدیل را خودش انجام می داد و فایل csv را برای ایمپورت وارد می کرد در حالی که استفاده از فایل اکسل با فرمت معمولی xls یا xlsx ارجحیت داشت.

خوشبختانه کلاس PHPExcel به اندازه ایی خوب و کامل نوشته شده بود که دغدغه نوشتن کلاس جدید را نداشتم. این کلاس که بر پایه استانداردهای OpenXML مایکروسافت نوشته شده است قابلیت نوشتن و خواندن از فایل Excel را براحتی فراهم می کند. برای وارد کردن اطلاعات از فایل Excel به Mysql تکه کد زیر را نوشتم:



load('book1.xlsx');
$rowIterator = $objPHPExcel->getActiveSheet()->getRowIterator();

$skip_rows = 0;
$excell_array_data = array();
foreach($rowIterator as $row){
$cellIterator = $row->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(false);
if($skip_rows >= $row->getRowIndex ()) continue;
$rowIndex = $row->getRowIndex ();
$excell_array_data[$rowIndex] = array();

foreach ($cellIterator as $cell) {
$excell_array_data[$rowIndex][$cell->getColumn()] = $cell->getCalculatedValue();
}
}

$link = @mysql_connect('localhost', 'root', '123');
if ($link){
$db_selected = mysql_select_db('alvanweb.com', $link);
@mysql_set_charset('utf8',$link);

//Create Database table with one Field
$sql = "CREATE TABLE xlsx (
rowID INT NOT NULL ,
PRIMARY KEY (rowID)
)";
mysql_query($sql);

//Create Others Field (A, B, C & ...)
$columns_name = array();
$columns_name = $excell_array_data[$skip_rows+1];
foreach (array_keys($columns_name) as $fieldname ){
$sql = "ALTER TABLE xlsx ADD $fieldname VARCHAR(1000)";
mysql_query($sql);
}

//Insert Excel data to MySQL
foreach( $excell_array_data as $k=>$v){
$keys = join(array_keys($v), ',');
$values = join($v, "','");
$sql = "insert into xlsx (rowID, $keys) values ($k, '$values') " ;
mysql_query($sql);
}

} else {
echo "Error in database connection.";
}
?>



مستندات PHPExcel کامل است و نیاز به توضیح متدها نیست. ورود اطلاعات توسط این کد در چهار مرحله انجام می شود:
1- ریختن داده های فایل اکسل در آرایه $excell_array_data (خطوط 9 تا 19)
2- اتصال به پایگاه داده و ایجاد جدول xlsx در دیتابیس و افزودن فیلد rowed به عنوان PRIMARY KEY (خطوط 21 تا 31)
3- افزودن فیلدهای مربوط به نام ستون های فایل اکسل (A، B، C و …) به جدول xlsx (خطوط 34 تا 39)
4- خواندن آرایه $excell_array_data و افزودن داده ها به جدول ( خطوط 42 تا 47)

توضیح اضافه اینکه $skip_rows برای رد کردن ردیف ها بالای فایل اکسل مقداردهی می شود. معمولاً اولین ردیف قبل از داده ها معرف نام ستون هایی است که گویااطلاعات نوع فیلد است (فرضاً سن، جنسیت و …) برای رد کردن این ردیف این متغیر برابر 1 تنظیم می شود.

بازدیدها: 342

http://www.farsidb.com/forum.gif


اطلاعات
 
براي ارسال نظر، بايد در سايت عضو شويد.

 
 

پشتیبانی شده توسط سرور باران