Postingan lainnya
Buku Ini Koding!
Baru!
Buku ini akan jadi teman perjalanan kamu belajar sampai dapat kerjaan di dunia programming!
Class 'PhpOffice\PhpSpreadsheet\Reader\Xls' not found pada framework Codeigniter
Saya membuat fungsi upload file excel. Pada saat mencoba proses upload, muncul error:
An uncaught Exception was encountered
Type: Error
Message: Class 'PhpOffice\PhpSpreadsheet\Reader\Xls' not found
Filename: C:\xampp-7.4.16\htdocs\webaplikasi\application\controllers\menu_admin.php
Line Number: 657
Backtrace:
File: C:\xampp-7.4.16\htdocs\webaplikasi\index.php
Line: 315
Function: require_once
Saya sudah memasang library PHPSpreadsheet.
Controller:
public function upload_dummy()
{
$data = array();
//$data['title'] = 'Import Excel Sheet | Indo Asia';
//$data['breadcrumbs'] = array('Home' => '#');
// Load form validation library
$this->load->library('form_validation');
$this->form_validation->set_rules('fileURL', 'Upload File', 'callback_checkFileValidation');
if($this->form_validation->run() == false) {
$this->load->view('server_admin/db1/import_statistic/dummy_lokal', $data);
} else {
// If file uploaded
if(!empty($_FILES['fileURL']['name'])) {
// get file extension
$extension = pathinfo($_FILES['fileURL']['name'], PATHINFO_EXTENSION);
if($extension == 'xls'){
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
} elseif($extension == 'xlsx') {
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
} else {
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv();
}
// file path
$spreadsheet = $reader->load($_FILES['fileURL']['tmp_name']);
$allDataInSheet = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
// array Count
$arrayCount = count($allDataInSheet);
$flag = 0;
$createArray = array(
'NoPengajuan',
'TanggalPIB',
'TanggalBLAWB',
'PelabuhanAsal',
'PelabuhanTujuan',
'Importir',
'AlamatImportir',
'PPJK',
'AlamatPPJK',
'Pemasok',
'AlamatPemasok',
'NegaraPemasok',
'HS',
'UraianBarang',
'Quantity',
'KodeSatuan',
'Berat',
'HargaCIF',
'MataUang',
'NPWP'
);
$makeArray = array(
'NoPengajuan' => 'NoPengajuan',
'TanggalPIB' => 'TanggalPIB',
'TanggalBLAWB' => 'TanggalBLAWB',
'PelabuhanAsal' => 'PelabuhanAsal',
'PelabuhanTujuan' => 'PelabuhanTujuan',
'Importir' => 'Importir',
'AlamatImportir' => 'AlamatImportir',
'PPJK' => 'PPJK',
'AlamatPPJK' => 'AlamatPPJK',
'Pemasok' => 'Pemasok',
'AlamatPemasok' => 'AlamatPemasok',
'NegaraPemasok' => 'NegaraPemasok',
'HS' => 'HS',
'UraianBarang' => 'UraianBarang',
'Quantity' => 'Quantity',
'KodeSatuan' => 'KodeSatuan',
'Berat' => 'Berat',
'HargaCIF' => 'HargaCIF',
'MataUang' => 'MataUang',
'NPWP' => 'NPWP'
);
$SheetDataKey = array();
foreach ($allDataInSheet as $dataInSheet) {
foreach ($dataInSheet as $key => $value) {
if (in_array(trim($value), $createArray)) {
$value = preg_replace('/\s+/', '', $value);
$SheetDataKey[trim($value)] = $key;
}
}
}
$dataDiff = array_diff_key($makeArray, $SheetDataKey);
if (empty($dataDiff)) {
$flag = 1;
}
// match excel sheet column
if ($flag == 1) {
for ($i = 2; $i <= $arrayCount; $i++) {
$addresses = array();
$NoPengajuan = $SheetDataKey['NoPengajuan'];
$TanggalPIB = $SheetDataKey['TanggalPIB'];
$TanggalBLAWB = $SheetDataKey['TanggalBLAWB'];
$PelabuhanAsal = $SheetDataKey['PelabuhanAsal'];
$PelabuhanTujuan = $SheetDataKey['PelabuhanTujuan'];
$Importir = $SheetDataKey['Importir'];
$AlamatImportir = $SheetDataKey['AlamatImportir'];
$PPJK = $SheetDataKey['PPJK'];
$AlamatPPJK = $SheetDataKey['AlamatPPJK'];
$Pemasok = $SheetDataKey['Pemasok'];
$AlamatPemasok = $SheetDataKey['AlamatPemasok'];
$NegaraPemasok = $SheetDataKey['NegaraPemasok'];
$HS = $SheetDataKey['HS'];
$UraianBarang = $SheetDataKey['UraianBarang'];
$Quantity = $SheetDataKey['Quantity'];
$KodeSatuan = $SheetDataKey['KodeSatuan'];
$Berat = $SheetDataKey['Berat'];
$HargaCIF = $SheetDataKey['HargaCIF'];
$MataUang = $SheetDataKey['MataUang'];
$NPWP = $SheetDataKey['NPWP'];
$NoPengajuan = filter_var(trim($allDataInSheet[$i][$NoPengajuan]), FILTER_SANITIZE_STRING);
$TanggalPIB = filter_var(trim($allDataInSheet[$i][$TanggalPIB]), FILTER_SANITIZE_STRING);
$TanggalBLAWB = filter_var(trim($allDataInSheet[$i][$TanggalBLAWB]), FILTER_SANITIZE_EMAIL);
$PelabuhanAsal = filter_var(trim($allDataInSheet[$i][$PelabuhanAsal]), FILTER_SANITIZE_STRING);
$PelabuhanTujuan = filter_var(trim($allDataInSheet[$i][$PelabuhanTujuan]), FILTER_SANITIZE_STRING);
$Importir = filter_var(trim($allDataInSheet[$i][$Importir]), FILTER_SANITIZE_STRING);
$AlamatImportir = filter_var(trim($allDataInSheet[$i][$AlamatImportir]), FILTER_SANITIZE_STRING);
$PPJK = filter_var(trim($allDataInSheet[$i][$PPJK]), FILTER_SANITIZE_STRING);
$AlamatPPJK = filter_var(trim($allDataInSheet[$i][$AlamatPPJK]), FILTER_SANITIZE_STRING);
$Pemasok = filter_var(trim($allDataInSheet[$i][$Pemasok]), FILTER_SANITIZE_STRING);
$AlamatPemasok = filter_var(trim($allDataInSheet[$i][$AlamatPemasok]), FILTER_SANITIZE_STRING);
$NegaraPemasok = filter_var(trim($allDataInSheet[$i][$NegaraPemasok]), FILTER_SANITIZE_STRING);
$HS = filter_var(trim($allDataInSheet[$i][$HS]), FILTER_SANITIZE_STRING);
$UraianBarang = filter_var(trim($allDataInSheet[$i][$UraianBarang]), FILTER_SANITIZE_STRING);
$Quantity = filter_var(trim($allDataInSheet[$i][$Quantity]), FILTER_SANITIZE_STRING);
$KodeSatuan = filter_var(trim($allDataInSheet[$i][$KodeSatuan]), FILTER_SANITIZE_STRING);
$Berat = filter_var(trim($allDataInSheet[$i][$Berat]), FILTER_SANITIZE_STRING);
$HargaCIF = filter_var(trim($allDataInSheet[$i][$HargaCIF]), FILTER_SANITIZE_STRING);
$MataUang = filter_var(trim($allDataInSheet[$i][$MataUang]), FILTER_SANITIZE_STRING);
$NPWP = filter_var(trim($allDataInSheet[$i][$NPWP]), FILTER_SANITIZE_STRING);
//fungsi untuk merubah tipe data datetime ke string/varchar
$newTanggalPIB = date("d/m/Y", strtotime($TanggalPIB));
$newTanggalBLAWB = date("d/m/Y", strtotime($TanggalBLAWB));
$fetchData[] = array(
'NoPengajuan' => $NoPengajuan,
'TanggalPIB' => $newTanggalPIB,
'TanggalBLAWB' => $newTanggalBLAWB,
'PelabuhanAsal' => $PelabuhanAsal,
'PelabuhanTujuan' => $PelabuhanTujuan,
'Importir' => $Importir,
'AlamatImportir' => $AlamatImportir,
'PPJK' => $PPJK,
'AlamatPPJK' => $AlamatPPJK,
'Pemasok' => $Pemasok,
'AlamatPemasok' => $AlamatPemasok,
'NegaraPemasok' => $NegaraPemasok,
'HS' => $HS,
'UraianBarang' => $UraianBarang,
'Quantity' => floatval($Quantity),
'KodeSatuan' => $KodeSatuan,
'Berat' => floatval($Berat),
'HargaCIF' => floatval($HargaCIF),
'MataUang' => $MataUang,
'NPWP' => $NPWP
);
}
$data['dataInfo'] = $fetchData;
$this->upload_dummy_m->setBatchImport($fetchData);
$this->upload_dummy_m->importData();
} else {
echo "Please import correct file, did not match excel sheet column";
}
$this->load->view('server_admin/db1/import_statistic/preview_dummy_lokal', $data);
}
}
}
// checkFileValidation
public function checkFileValidation($string) {
$file_mimes = array('text/x-comma-separated-values',
'text/comma-separated-values',
'application/octet-stream',
'application/vnd.ms-excel',
'application/x-csv',
'text/x-csv',
'text/csv',
'application/csv',
'application/excel',
'application/vnd.msexcel',
'text/plain',
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
);
if(isset($_FILES['fileURL']['name'])) {
$arr_file = explode('.', $_FILES['fileURL']['name']);
$extension = end($arr_file);
if(($extension == 'xlsx' || $extension == 'xls' || $extension == 'csv') && in_array($_FILES['fileURL']['type'], $file_mimes)){
return true;
}else{
$this->form_validation->set_message('checkFileValidation', 'Please choose correct file.');
return false;
}
}else{
$this->form_validation->set_message('checkFileValidation', 'Please choose a file.');
return false;
}
}
Model:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Upload_dummy_m extends CI_Model{
private $_batchImport;
public function setBatchImport($batchImport) {
$this->_batchImport = $batchImport;
}
// save data
public function importData() {
$data = $this->_batchImport;
$this->db->insert_batch('dummy', $data);
}
// get data list
public function dataList() {
$this->db->select(array(
'd.NoPengajuan',
'd.TanggalPIB',
'd.TanggalBLAWB',
'd.PelabuhanAsal',
'd.PelabuhanTujuan',
'd.Importir',
'd.AlamatImportir',
'd.PPJK',
'd.AlamatPPJK',
'd.Pemasok',
'd.AlamatPemasok',
'd.NegaraPemasok',
'd.HS',
'd.UraianBarang',
'd.Quantity',
'd.KodeSatuan',
'd.Berat',
'd.HargaCIF',
'd.MataUang',
'd.NPWP'
));
$this->db->from('dummy as d');
$query = $this->db->get();
return $query->result_array();
}
}
View (setelah proses upload, akan redirect ke view ini):
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>Web | Tabel Dummy</title>
<?php include 'application/views/komponen/header.php'; //meta, css, js ?>
</head>
<body>
<?php
if ($this->session->userdata('level') == 'administrator') {
include 'application/views/komponen/navbar_admin.php'; //navbar
}
elseif ($this->session->userdata('level') == 'manager') {
include 'application/views/komponen/navbar_manager.php'; //navbar
}
elseif ($this->session->userdata('level') == 'staff') {
include 'application/views/komponen/navbar_staff.php'; //navbar
}
?>
<main class="container" role="main">
<div class="row">
<div class="col">
<h2><i class="fas fa-table"></i>Hasil Upload Tabel Dummy</h2>
</div>
<div class="col text-right">
<!--<a href="<?php if($this->session->userdata('level') == 'administrator' || $this->session->userdata('level') == 'manager') { base_url(); } ?>import_statistic" type="button" class="btn btn-outline-primary"><i class="far fa-arrow-alt-circle-left"></i> Kembali</a>-->
<!-- tombol kembali ketika pindah halaman pagination bug error Message: A non-numeric value encountered -->
</div>
</div>
<hr>
<div class="alert alert-warning" role="alert">
<i class="fas fa-exclamation-circle"></i> Fitur ini hanya ditujukan untuk pengembangan data
</div>
<div class="row">
<form class="form" id="search" action="<?php if($this->session->userdata('level') == 'administrator' || $this->session->userdata('level') == 'manager') { base_url(); } ?>cari_master_imp_lokal" method="get">
<?php include 'application/views/server_admin/db1/import_statistic/komponen/form_cari.php'; ?>
</form>
<form class="form" id="search" action="<?php if($this->session->userdata('level') == 'administrator' || $this->session->userdata('level') == 'manager') { base_url(); } ?>laporan_master_imp_lokal" method="post">
<?php include 'application/views/server_admin/db1/import_statistic/komponen/form_laporan.php'; ?>
</form>
<form class="form" id="search" action="<?php if($this->session->userdata('level') == 'administrator' || $this->session->userdata('level') == 'manager') { base_url(); } ?>chart_master_imp_lokal" method="post">
<?php include 'application/views/server_admin/db1/import_statistic/komponen/form_grafik.php'; ?>
</form>
<form class="form" id="search" action="<?php if($this->session->userdata('level') == 'administrator' || $this->session->userdata('level') == 'manager') { base_url(); } ?>upload_dummy" method="post" enctype="multipart/form-data" accept-charset="utf-8">
<?php include 'application/views/server_admin/db1/import_statistic/komponen/form_upload.php'; ?>
</form>
</div>
<br />
<div class="table-responsive">
<table class="table table-striped">
<thead>
<tr class="table-primary">
<th scope="col">NoPengajuan</th>
<th scope="col">TanggalPIB</th>
<th scope="col">TanggalBLAWB</th>
<th scope="col">PelabuhanAsal</th>
<th scope="col">PelabuhanTujuan</th>
<th scope="col">Importir</th>
<th scope="col">AlamatImportir</th>
<th scope="col">PPJK</th>
<th scope="col">AlamatPPJK</th>
<th scope="col">Pemasok</th>
<th scope="col">AlamatPemasok</th>
<th scope="col">NegaraPemasok</th>
<th scope="col">HS</th>
<th scope="col">UraianBarang</th>
<th scope="col">Quantity</th>
<th scope="col">KodeSatuan</th>
<th scope="col">Berat</th>
<th scope="col">HargaCIF</th>
<th scope="col">MataUang</th>
<th scope="col">NPWP</th>
</tr>
</thead>
<tbody>
<?php foreach($dataInfo as $key=>$element) { ?>
<tr>
<td><?php print $element['NoPengajuan'];?></td>
<td><?php print $element['TanggalPIB'];?></td>
<td><?php print $element['TanggalBLAWB'];?></td>
<td><?php print $element['PelabuhanAsal'];?></td>
<td><?php print $element['PelabuhanTujuan'];?></td>
<td><?php print $element['Importir'];?></td>
<td><?php print $element['AlamatImportir'];?></td>
<td><?php print $element['PPJK'];?></td>
<td><?php print $element['AlamatPPJK'];?></td>
<td><?php print $element['Pemasok'];?></td>
<td><?php print $element['AlamatPemasok'];?></td>
<td><?php print $element['NegaraPemasok'];?></td>
<td><?php print $element['HS'];?></td>
<td><?php print $element['UraianBarang'];?></td>
<td><?php print $element['Quantity'];?></td>
<td><?php print $element['KodeSatuan'];?></td>
<td><?php print $element['Berat'];?></td>
<td><?php print $element['HargaCIF'];?></td>
<td><?php print $element['MataUang'];?></td>
<td><?php print $element['NPWP'];?></td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</main>
<?php include 'application/views/komponen/footer.php'; //footer ?>
</body>
</html>
mohon bantuannya, terima kasih.
1 Jawaban:
Jawaban Terpilih
<div>Pastikan kamu sudah mengunduh library PhpSpreadsheetnya ya, kamu bisa install librarynya menggunakan composer dengan command berikut :</div><pre>composer require phpoffice/phpspreadsheet</pre><div><br>setelah itu, ketika kamu akan menggunakan fungsi dari PhpSpreadsheet, jangan lupa import class-nya dengan menggunakan namespace, berikut contoh sederhananya :<br><br></div><pre><strong><?php</strong> //Memanggil file autoload <strong>require</strong> 'vendor/autoload.php';
//Memanggil class dari PhpSpreadsheet dengan namespace <strong>use</strong> <strong>PhpOffice</strong><strong>PhpSpreadsheet</strong><strong>Spreadsheet</strong>; <strong>use</strong> <strong>PhpOffice</strong><strong>PhpSpreadsheet</strong><strong>Writer</strong><strong>Xlsx</strong>;
$spreadsheet = <strong>new</strong> Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); $sheet->setCellValue('A1', 'Hello World !');
$writer = <strong>new</strong> Xlsx($spreadsheet); $writer->save('hello world.xlsx');</pre><div><br>Untuk me-load library yang diinstall via Composer di framework Codeigniter, ubah file config yang berada pada folder application/config/config.php sebagai berikut :</div><pre>Dari $config['composer_autoload'] = FALSE;
diubah menjadi: $config['composer_autoload'] = './vendor/autoload.php'; <br></pre><div>Semoga berhasil.</div>
Tanggapan
untuk $config['composer_autoload'] = './vendor/autoload.php'; apakah boleh menggunakan $config['composer_autoload'] = 'TRUE'; ? setau saya $config['composer_autoload'] berfungsi untuk mengaktifkan perintah composer ke dalam codeigniter