Ekspor dan Pisahkan ke dalam Beberapa File Lembar Excel menggunakan PHP

//lh4.googleusercontent.com/-eAXyxy2JJKA/AAAAAAAAAAI/AAAAAAAAGS4/OHgzqHzCvtQ/s512-c/photo.jpg
September 02, 2018




Selama siang sobat blogger kali ini kami akan share bagaimana membuat PHP Split dan Ekspor Database ke File Excel. Bayangkan kita memiliki sejuta catatan, apa yang akan terjadi jika kita mengekspor catatan itu ke dalam satu file excel! Dalam situasi seperti ini, kita harus mengelompokkan catatan dan membaginya menjadi beberapa file sehingga mudah ditangani. Itulah fungsi dari Php split ini.




Dalam artikel ini, kamitelah membuat antarmuka dengan tombol kontrol Ekspor. Hasil basis data MySQL diambil dan dicantumkan di halaman web dengan opsi Ekspor. Saat memicu aksi ekspor, hasil basis data akan dipisahkan oleh konstanta batas. Dengan menerapkan penghalang batas, hasilnya dibagi dan diunduh ke dalam beberapa file excel.

Langsung saja yang mesti pertama anda lakukan adalah buat database dengan nama export atau terserah anda, asalakan anda menyesuaikan pada koneksi kedatabse, kemudian masukka tabel di bawa ini.

 --
-- Table structure for table `tbl_employee`
--

CREATE TABLE `tbl_employee` (
  `id` int(11) NOT NULL COMMENT 'primary key',
  `employee_name` varchar(255) NOT NULL COMMENT 'employee name',
  `employee_salary` double NOT NULL COMMENT 'employee salary',
  `employee_age` int(11) NOT NULL COMMENT 'employee age'
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='datatable demo table';

--
-- Dumping data for table `tbl_employee`
--

INSERT INTO `tbl_employee` (`id`, `employee_name`, `employee_salary`, `employee_age`) VALUES
(1, 'Arman', 12345, 10),
(2, 'A. Abidzra', 11111, 20),
(3, 'Irsyad Khalid', 54257, 30),
(4, 'Lawan', 90875, 40),
(5, 'Andi Anugrah', 78976, 50),
(6, 'Denny Hakim', 56787, 60),
(7, 'Annisa dayumi', 57779, 70);

--
-- Indexes for dumped tables
--

--
-- Indexes for table `tbl_employee`
--
ALTER TABLE `tbl_employee`
  ADD PRIMARY KEY (`id`);
COMMIT; 

Kedua adalah buat file dengan nama DBController.php kemudian masukkan kodingan di bawah ini. Ini adalah pengontrol Database untuk menyiapkan pernyataan query dengan MySQLi untuk menangani akses database dari PHP.

 <?php
class DBController {
 private $host = "localhost";
 private $user = "root";
 private $password = "";
 private $database = "tbl_employee";
 private $conn;
 
    function __construct() {
        $this->conn = $this->connectDB();
    } 

    function connectDB() {
      $conn = mysqli_connect($this->host,$this->user,$this->password,$this->database);
      return $conn;
  }

  function runBaseQuery($query) {
    $result = $this->conn->query($query); 
    if ($result->num_rows > 0) {
        while($row = $result->fetch_assoc()) {
            $resultset[] = $row;
        }
    }
    return $resultset;
}


function runQuery($query, $param_type, $param_value_array) {
    $sql = $this->conn->prepare($query);
    $this->bindQueryParams($sql, $param_type, $param_value_array);
    $sql->execute();
    $result = $sql->get_result();

    if ($result->num_rows > 0) {
        while($row = $result->fetch_assoc()) {
            $resultset[] = $row;
        }
    }

    if(!empty($resultset)) {
        return $resultset;
    }
}

function bindQueryParams($sql, $param_type, $param_value_array) {
    $param_value_reference[] = & $param_type;
    for($i=0; $i<count($param_value_array); $i++) {
        $param_value_reference[] = & $param_value_array[$i];
    }
    call_user_func_array(array(
        $sql,
        'bind_param'
    ), $param_value_reference);
}
}
?> 

Ketiga buat file dengan nama splitData.php kemudian masukkan kodingan dibawah ini, fungsi dari kodingan dibawah adalah. Proses ini dilakukan dengan panggilan AJAX jQuery. File splitData.php diakses melalui AJAX untuk mendapatkan hasil tabel HTML yang dipartisi. Array hasil tabel HTML akan dikodekan dalam format JSON. Callback sukses AJAX menerima respons JSON dari PHP dan menjalankan tindakan ekspor JavaScript.

 <?php
require_once ("DBController.php");
$db_handle = new DBController();

define("RECORD_LIMIT_PER_FILE", 5);
$start = 0;

$rowcount = $_POST["record_count"];
$lastPageNo = ceil($rowcount / RECORD_LIMIT_PER_FILE);

for ($i = $start; $i < $lastPageNo; $i ++) {
    $query = " SELECT * FROM tbl_employee limit " . $start . " , " . RECORD_LIMIT_PER_FILE;
    $result = $db_handle->runBaseQuery($query);
    
    $splitHTML[$i] = '<table class="table table-bordered">

    <thead>
    <tr>
    <th>ID</th>
    <th>Name</th>
    <th>Salary</th>
    <th>Age</th>

    </tr>
    </thead>';
    
    foreach ($result as $k => $v) {
        $splitHTML[$i] .= '<tr>
        <td width="10%">' . $result[$k]['id'] . '</td>
        <td width="40%">' . $result[$k]['employee_name'] . '</td>
        <td width="30%">' . $result[$k]['employee_salary'] . '</td>
        <td width="20%">' . $result[$k]['employee_age'] . '</td>
        </tr>';
    }
    $splitHTML[$i] .= '</table>';
    
    $start = $start + RECORD_LIMIT_PER_FILE;
}
print json_encode($splitHTML);
?>

 

Yang terakhir buat file dengan nama index.php, file ini berfungsi menampilkan data yang ada pada databse, sekaligus terdapat button export yang berfungsi untuk mengeksport data database ke dalam format excel.

Beberapa hasil tabel HTML diulang menggunakan jQuery setiap () dengan referensi objek JSON. Dalam setiap iterasi, data tabel berformat HTML akan diubah menjadi format excel menggunakan JavaScript.

Dalam JavaScript ini, tautan unduhan akan dibuat dan propertinya diatur secara dinamis melalui pemrograman.

Dalam contoh ini, nama file untuk beberapa file excel akan divariasikan dengan menggunakan fungsi agregat JavaScript Math.random (). Semua nama file akan memiliki awalan yang sama seperti yang didefinisikan.

 <?php
require_once ("DBController.php");

$db_handle = new DBController();
$query = "select * from tbl_employee";
$result = $db_handle->runBaseQuery($query);

?>
<!DOCTYPE html>
<html>
<head>
  <title>Export File</title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  
  <!--Script CSS-->
  <link type="text/css" href='https://cdn.datatables.net/1.10.16/css/jquery.dataTables.min.css' rel='stylesheet'>
  <link type="text/css" href='https://cdn.datatables.net/responsive/2.2.1/css/responsive.dataTables.min.css' rel='stylesheet'>
  <link type="text/css" href='https://cdn.datatables.net/buttons/1.5.1/css/buttons.dataTables.min.css' rel='stylesheet'>
  
</head>
<body>
  <br /><br />
  <div class="container">
   <nav class="navbar navbar-inverse">
    <div class="container-fluid">
     <div class="navbar-header">
      <a class="navbar-brand" href="#">Ekspor dan Pisahkan ke dalam Beberapa File Lembar Excel menggunakan PHP</a>
    </div>
  </div>
</nav>
<br />
<!--h2 align="center">EXPORT FILE</h2-->
<br />
<div class="form-group">
 <?php if (! empty($result)) { ?>
  <!--Script untuk memanggil Javascript-->
  <table id="example" class="display responsive nowrap" style="width:100%">
    <thead>
      <tr>
        <th>ID</th>
        <th>Name</th>
        <th>Salary</th>
        <th>Age</th>
      </tr>
    </thead>
    <?php
    
    foreach ($result as $k => $v) {
      ?>
      <tbody>
       <tr>
        <td width="10%"> <?php echo $result[$k]['id']; ?></td>
        <td width="40%"> <?php echo $result[$k]['employee_name']; ?></td>
        <td width="30%"> <?php echo $result[$k]['employee_salary']; ?></td>
        <td width="20%"> <?php echo $result[$k]['employee_age']; ?></td>
      </tr>
      <?php
    }
    
    ?>

  </tbody>
</table>
<?php
}
?>

<button class="btn btn-success" id="btn-export" onclick="getHTMLSplit();">Export to Excel File</button>
</div>
<div class="form-group">
</div>

<!--Script Javascript-->
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/responsive/2.2.1/js/dataTables.responsive.min.js"></script>
<script src="https://cdn.datatables.net/buttons/1.5.1/js/dataTables.buttons.min.js"></script>
<script src="https://cdn.datatables.net/buttons/1.5.1/js/buttons.colVis.min.js"></script>
<script>
 $(document).ready(function() {
  $('#example').DataTable( {
    dom: 'Bfrtip',
    buttons: [
    'colvis'
    ]
  } );
} );
</script>

</body>
</html>

<script type="text/javascript">
  function getHTMLSplit() {
   $.ajax({
    url: 'splitData.php',
    type: 'POST',
    dataType: 'JSON',
    data: {record_count:<?php echo count($result); ?>},
    success:function(response){
     exportHTMLSplit(response); 
   }
 });
 }

 function exportHTMLSplit(response) {
   var random = Math.floor(100000 + Math.random() * 900000)
   $(response).each(function (index) {
    
    var excelContent = response[index];

    var excelFileData = "<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:excel' xmlns='http://www.w3.org/TR/REC-html40'>";
    excelFileData += "<head>";
    excelFileData += "<!--[if gte mso 9]>";
    excelFileData += "<xml>";
    excelFileData += "<x:ExcelWorkbook>";
    excelFileData += "<x:ExcelWorksheets>";
    excelFileData += "<x:ExcelWorksheet>";
    excelFileData += "<x:Name>";
    excelFileData += "{worksheet}";
    excelFileData += "</x:Name>";
    excelFileData += "<x:WorksheetOptions>";
    excelFileData += "<x:DisplayGridlines/>";
    excelFileData += "</x:WorksheetOptions>";
    excelFileData += "</x:ExcelWorksheet>";
    excelFileData += "</x:ExcelWorksheets>";
    excelFileData += "</x:ExcelWorkbook>";
    excelFileData += "</xml>";
    excelFileData += "<![endif]-->";
    excelFileData += "</head>";
    excelFileData += "<body>";
    excelFileData += excelContent;
    excelFileData += "</body>";
    excelFileData += "</html>";

    var sourceHTML = excelFileData + response[index];

    var source = 'data:application/vnd.ms-excel;charset=utf-8,' + encodeURIComponent(sourceHTML);
    var fileDownload = document.createElement("a");
    document.body.appendChild(fileDownload);
    fileDownload.href = source;
    fileDownload.download = "sheet_" + random + '_'+(index+1)+'.xls';
    fileDownload.click();
    document.body.removeChild(fileDownload);
  }) 
 }
</script> 

Jika kalian ingin melihat langsung demonya silahkan tekan button demo divawah ini.


Sekian share kali ini semoga apa yang kami shae bermanfaat bagi anda semua, jangan lupa share juga keteman kalian. Jika kalian masih bingun dengan penggunaan fungsi-fungsi di atas silahkan tinggalkan komentar dibawah dan mulai berdiskusi dengan kami.


Related Post

SUBSCRIBE TO OUR NEWSLETTER

closed