Skip to main content

upload dan import file excel ke database mengunkan CI

2 replies [Last post]
does not have a status.
firman_id's picture
User offline. Last seen 17 weeks 3 days ago. Offline
Joined: 09/20/2010

hlow master2 ada yng thu cara atau script CI untuk upload dan imprort file excel ke database?.
databasenya mengunkan postgres..
mungkn para master ada yng berpengalam sma kasus nie...
dan para newbie jga bsa bljar ...
thanks..

Next destination : Bandung (again) XD
zawaruddin's picture
User offline. Last seen 4 weeks 4 days ago. Offline
Joined: 02/28/2011
kalo pengen export/importnya

kalo pengen export/importnya adl file yg berformat xls, pake aja library excel_reader2.php, dpt d cari lewat mbah google.
Untuk mudahnya taruh file excel_reader2.php di folder libraries (sejajar dengan folder controller dkk.)

trus untuk controller (controller untuk import) bisa seperti ini

function format_header(){
		return array('ORDER DATE','ORDER NO','ASSY NO','QTY','O/S','ETA','LAST UPDATE','CND','ADD','LEAD TIME','CUSTOMERS');
	}
 
	function format_header_wip(){
		return array('ASSY NO','TOTAL WIP','DATE WIP');
	}
 
	function check_format_header($data_header, $checksum){
		$loop = 0;
		if($checksum==1)$format_header = $this->format_header(); else $format_header = $this->format_header_wip(); 
		$check = true;
		while($loop < count($format_header) && $check == true){
			//echo $data_header->val(1,($loop+1))." - ".$format_header[$loop]."<br>";
			if(strcmp(strtoupper($data_header->val(1,($loop+1))), $format_header[$loop])!=0){
				//echo "false";
				$check = false;
			}
			$loop++;
		}
		return $check;
	}
 
function read_file(){
	   if (!$this->session->userdata('logged_in')){
			$data['cek'] = 1;
			$this->load->view('Session/login/expired_session', $data);
		}else{
			include_once ( APPPATH."libraries/excel_reader2.php");
			$data = new Spreadsheet_Excel_Reader($_FILES['userfile']['tmp_name']);
			$status_data = $error_data = "";
 
			if($this->check_format_header($data, 1)){ // untuk cek jika format (isi data di excel tidak sesuai format)
				$j = $k = -1;
				for ($i=2; $i <= ($data->rowcount($sheet_index=0)); $i++){
					$data_po = array('no_po' => $data->val($i, 2), 
										 'assy_no' => $data->val($i, 3),
										 'id_cust' => $id_cust,
										 'date_order' => $data->val($i, 1), 	
										 'quantity' => $data->val($i, 4), 
										 'outs' => $data->val($i, 5), 
										 'eta' => $data->val($i, 6), 
										 'update_order' => $data->val($i, 7), 
										 'cnd' => $data->val($i, 8), 
										 'add_order' => $data->val($i, 9), 
										 'lead_time' => $data->val($i, 10));
 
					if($this->po_model->insertPO($data_po)==false){				
						$j++;
						// buat pesan disini kalo ada sebagian data yg tidak dapat di insert
						$status[$j] = "Data tidak dapat diimport";
						array_push($data_error, $data_po);
					}
 
				}
			}
			if($j >= 0){
				$xdata['status_data'] 	= $status_data;
				$xdata['row']			= $j+1;
				$xdata['data_error']	= $data_error;
				$this->load->view('PROCESS/PO/message_import_po', $xdata);
			}else{
				redirect('PROCESS/purchase_order_process/import_po/1/data error');
			}
			}
	}

trus untuk controllerx (controller untuk export) bisa seperti ini
function header($stat='PO'){
		//$stat1 = array();
		if(strcmp($stat,"PO")==0){
			return array('ORDER DATE','ORDER NO','ASSY NO','QTY','O/S','ETA','LAST UPDATE','CND','ADD','LEAD TIME','CUSTOMER');
		}else{ // jika $stat = "Assy"
			return array('Assy No','Product','CCT','Status','Customer');
		}
	}
 
function exportExcelMenu($filename='export_db') {		
		$data['Header'] = $this->header();
		$loop = 0;
		$array = array(
                $data['Header']
            );
//disini data diambil dari database PostgreSQL 9.02
		foreach($this->PO_model->getPO() as $row){			
				$content[$loop] = array($row->date_order,$row->no_po,
									$row->assy_no,$row->quantity,$row->outs,
									$row->eta,$row->update_order,$row->cnd,$row->add_order,$row->lead_time, $this->customers_model->getNameCustomer($row->id_cust));
 
				array_push($array, $content[$loop]);
				$loop++;				
			}	
		$this->load->plugin('to_excel');
		array_to_excel($array, 'Menu');
	}

lalu taruh file to_excel_pi.php di folder plugins (sejajar folder application, codeigniter dkk.)
ini code nya

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
 
function to_excel($query, $filename='xlsoutput')
{
     $headers = ''; // variable untuk menampung header
     $data = ''; // variable untuk menampung data
 
     $obj =& get_instance();
 
     $fields = $query->field_data();
     if ($query->num_rows() == 0) {
          echo 'The table appears to have no data.';
     } else {
          foreach ($fields as $field) {
             $headers .= $field->name . "\t";
          }
 
          foreach ($query->result() as $row) {
               $line = '';
               foreach($row as $value) {
                    if ((!isset($value)) OR ($value == "")) {
                         $value = "\t";
                    } else {
                         $value = str_replace('"', '""', $value);
                         $value = '"' . $value . '"' . "\t";
                    }
                    $line .= $value;
               }
               $data .= trim($line)."\n";
          }
 
          $data = str_replace("\r","",$data);
 
          header("Content-type: application/x-msdownload");
          header("Content-Disposition: attachment; filename=$filename.xls");
          echo "$headers\n$data";
     }
}
 
function array_to_excel($array, $filename='xlsoutput')
{
     $headers = ''; // variable untuk menampung header
     $data = ''; // variable untuk menampung data
 
     $obj =& get_instance();
 
     //$fields = $query->field_data();
     if (sizeof($array) == 0) {
          echo 'The table appears to have no data.';
     } else {
          foreach ($array as $row) {
               $line = '';
               foreach($row as $value) {
                    if ((!isset($value)) OR ($value == "")) {
                         $value = "\t";
                    } else {
                         $value = str_replace('"', '""', $value);
                         $value = '"' . $value . '"' . "\t";
                    }
                    $line .= $value;
               }
               $data .= trim($line)."\n";
          }
 
          $data = str_replace("\r","",$data);
 
 
		header('Content-type: application/ms-excel');
		header("Content-Disposition: attachment; filename=$filename.xls");
		echo $data;
     }
}
?>

jadi kalo ingin buat laporan

------------------------------------------------------------
Go..Go..Go.. CodeIgniter

Visit My Blog @ zawaruddin.blogspot.com

Talk is cheap. Show me the code.
Kazel's picture
User offline. Last seen 17 weeks 5 days ago. Offline
Joined: 01/28/2011
Kalo dari php sendiri, ada

Kalo dari php sendiri, ada fungsi 'fgetcsv' untuk mengambil data dari file berformat '.csv'. Format ini dapat dibaca oleh file excel. Kalo dari CI sendiri saya kurang tau ada library khusus apa enggak.

Misalkan struktur table seperti ini:
Nama table: 'girl'

+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| id     | int(11)     | NO   | PRI | NULL    | auto_increment |
| nama   | varchar(50) | NO   |     | NULL    |                |
| umur   | tinyint(4)  | NO   |     | NULL    |                |
| alamat | text        | NO   |     | NULL    |                |
+--------+-------------+------+-----+---------+----------------+

dan isi file 'girl.cvs' :

Nama	Umur	Alamat
Vicky	20	Bandung
Lita	25	Surabaya
Cynthia	19	Jakarta

isi controllernya bisa seperti ini:

$row=0;
if (($handle = fopen("girl.csv", "r")) !== FALSE) 
{
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) 
	{
		if($row!=0)
		{
			$this->db->insert('girl',array('nama'=>$data[0],'umur'=>$data[1],'alamat'=>$data[2]));
		}
		$row++;
    }
    fclose($handle);
}

Premium Drupal Themes by Adaptivethemes