/ / Php cơ bản / Comments (31)

Đọc ghi dữ liệu file excel sử dụng PHPExcel

Trong bài trước mình có giới thiệu cho các bạn cách xuất dữ liệu ra file excel 1 cách đơn giản nhất,trong bài này mình sẽ giới thiệu cho các bạn thư viện PHPExcel,đây là 1 thư viện cho phép chúng ta làm việc đọc ghi dữ liệu từ file excel 1 cách đơn giản và tốt nhất.
– Trước tiên các bạn cần vào đây để download thư viện này về làm việc

Ghi dữ liệu vào file excel – Export excel

//luu cac thong tin vao file excel
require_once 'PHPExcel/PHPExcel.php';
$objPHPExcel = new PHPExcel();

$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', 'Tên')
->setCellValue('B1', 'Email')
->setCellValue('C1', 'Số điện thoại');

$lists = array(
array(
'name' => 'Nobita',
'email' => 'nobitacnt@gmail.com',
'phone' => '0123.456.789',
),
array(
'name' => 'Xuka',
'email' => 'xuka@gmail.com',
'phone' => '0222.333.444',
),
array(
'name' => 'Chaien',
'email' => 'chaien@gmail.com',
'phone' => '0111.333.444',
),
);

//set gia tri cho cac cot du lieu
$i = 2;
foreach ($lists as $row)
{
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A'.$i, $row['name'])
->setCellValue('B'.$i, $row['email'])
->setCellValue('C'.$i, $row['phone']);
$i++;
}
//ghi du lieu vao file,định dạng file excel 2007
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$full_path = 'data.xlsx';//duong dan file
$objWriter->save($full_path);

– Với đoạn code trên các bạn cần chú ý tới phương thức setCellValue nó cho phép chúng ta gắn dữ liệu vào các cột tương ứng,tham số đầu là vị trí cột,tham số 2 là dữ liệu

Sau khi chạy file này chúng ta sẽ tạo file data.xlsx như sau:

export excel

export excel

Đọc và hiển thị dữ liệu từ file excel

– Trong ví dụ này chúng ta sẽ sử dụng luôn file data.xlsx đã tạo ở trên nhé,ở đây mình sẽ tạo file read.php với nội dung sau:

<?php
require_once 'PHPExcel/PHPExcel.php';

$filename = 'data.xlsx';
$inputFileType = PHPExcel_IOFactory::identify($filename);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);

$objReader->setReadDataOnly(true);

/**  Load $inputFileName to a PHPExcel Object  **/
$objPHPExcel = $objReader->load("$filename");

$total_sheets=$objPHPExcel->getSheetCount();

$allSheetName=$objPHPExcel->getSheetNames();
$objWorksheet  = $objPHPExcel->setActiveSheetIndex(0);
$highestRow    = $objWorksheet->getHighestRow();
$highestColumn = $objWorksheet->getHighestColumn();
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
$arraydata = array();
for ($row = 2; $row <= $highestRow;++$row)
{
    for ($col = 0; $col <$highestColumnIndex;++$col)
    {
        $value=$objWorksheet->getCellByColumnAndRow($col, $row)->getValue();
        $arraydata[$row-2][$col]=$value;
    }
}

echo '<pre>';
print_r($arraydata);
echo '</pre>';

Và khi chạy file này sẽ cho kết quả như sau:

Array
(
    [0] => Array
        (
            [0] => Nobita
            [1] => nobitacnt@gmail.com
            [2] => 0123.456.789
        )

    [1] => Array
        (
            [0] => Xuka
            [1] => xuka@gmail.com
            [2] => 0222.333.444
        )

    [2] => Array
        (
            [0] => Chaien
            [1] => chaien@gmail.com
            [2] => 0111.333.444
        )

)

Tổng kết: Qua bài này mình đã giới thiệu cho các bạn cách làm việc đọc ghi dữ liệu với file excel sử dụng thư viện PHPExcel 1 cách đơn giản,để tìm hiểu thêm về các phương thức khác các bạn có thể truy cập https://phpexcel.codeplex.com/ nhé,các bạn có thể tải code demo trong bài viết này tại đây,chúc các bạn áp dụng tốt với dự án của mình
Tải mã nguồn bài viết: http://ouo.io/hKG9Mj



08/05/2015
Written by nobitacnt

Trong bài viết không tránh khỏi những câu từ chưa chính xác,mong nhận được sự góp ý để website hoàn thiện hơn.Nếu thấy bài viết có ích với bạn hãy like và share để ủng hộ nhé :D.

Bài viết chùng chuyên mục

31 Comments

  1. Vương says:
     /  Reply

    Cho mình hỏi, phần đọc và hiển thị dữ liệu từ file excel, mình copy nội dung và chạy thì không ra kết quả, và trang localhost thì thông báo là không tìm thấy. Trong khi các file khác mình chạy thì nó vẫn hoạt động bình thường.

    • nobitacnt says:
       /  Reply

      Bạn kiểm tra xem cái file mà bạn đọc có tồn tại và đúng đường dẫn không?trong ví dụ mình sử dụng đọc file $filename = 'data.xlsx'; bạn thay đổi lại cho đúng với file bạn cần đọc

  2. Jonathan says:
     /  Reply

    Admin cho hỏi:
    – Ví dụ: tôi có 1 file excel nhưng nội dung không giống thứ tự dòng, cột như ý đồ của chúng ta thì có giải pháp nào để Import hay không? chẳng hạn có file: vidu.xlsx có cột A: STT, B: TÊN, C: Năm Sinh, D: Số điện thoại. Bây h tôi chỉ muốn thêm cột Tên và Số điện thoại vô CSDL thì làm như thé nào?

    • nobitacnt says:
       /  Reply

      Chào bạn,với cách trên thì bạn có thể lấy được nội dung trong file excel lưu vào 1 mảng,như vậy bạn muốn thêm cột nào vào csdl dữ cũng được mà,ví dụ sau khi lấy dữ liệu từ file excel bạn có

      Array
      (
      [0] => Array
      (
      [0] => 1 //Số TT
      [1] => Học php //Tên
      [2] => 1990 //Năm Sinh
      [3] => 012345678 //Số điện thoại
      )

      [1] => Array
      (
      [0] => 2
      [1] => Xuka
      [2] => 1990
      [3] => 01245676
      )
      )

      Lúc này bạn chỉ việc lặp mảng trên và cần thêm trường dữ liệu vào csdl thì cho vào thôi.

  3. Chung says:
     /  Reply

    Mình muốn download file excel từ trên host của web về thì phải làm sao???

    • Jonathan says:
       /  Reply

      Cảm ơn admin rất nhiều khi trả lời thắc mắc của mình,

      Tuy nhiên mình có 1 vấn đề chưa rõ như thế này:
      1. Ví dụ tui có khoảng mấy chục file excel muốn thêm dữ liệu vào Mysql thì giải quyết theo cách này có ổn không?
      2. Mỗi file excel có khoảng hơn 100 dòng dữ liệu muốn thêm vào thì việc tạo ra mảng với để thêm 100 dòng này thì rất mất thời gian.

      Vậy admin có thể giúp đỡ được không. Xin cảm ơn rất nhiều!!

      • nobitacnt says:
         /  Reply

        Chào bạn,bạn có thể import từng file một,một file của bạn có tầm 100 dữ liệu như thế là bình thường,mình từng thêm vào csdl số lượng nhiều hơn thế vẫn ok,bạn có thể tăng thời gian time out chạy lệnh trên server lên nếu server xử lý dữ liệu quá lâu.Nhưng với 100 dùng thì không có vấn đề gì đâu bạn.

  4. Jonathan says:
     /  Reply

    Nhưng tôi thấy làm như thế thì thủ công quá. Chúng ta có thể nghiên cứu xem có cách nào khác để xử lý với số lượng file lớn và có dung lượng lớn mới được. Chẳng hạn, có 100 dòng dữ liệu thì mình lại tạo cái mảng như thế này:
    Array
    (
    [0] => Array
    (
    [0] => Nobita
    [1] => nobitacnt@gmail.com
    [2] => 0123.456.789
    )

    [1] => Array
    (
    [0] => Xuka
    [1] => xuka@gmail.com
    [2] => 0222.333.444
    )

    [2] => Array
    (
    [0] => Chaien
    [1] => chaien@gmail.com
    [2] => 0111.333.444
    )
    )
    array[100] thì cực lắm =(

    • nobitacnt says:
       /  Reply

      Ý bạn là phải tạo mảng trên thủ công bằng tay ah?Bạn xem trong bài viết trên,phần mảng dữ liệu là nó tự động được sinh ra khi đọc file excel mà,mình đọc nội dung trong file sau đó lưu nội dung đó vào mảng để sử dụng,bạn có cần làm gì đâu nhỉ?ngoài việc bạn lựa chọn file nào để thêm vào csdl thôi còn lại tất cả tự động mà,khi đã có mảng trên rồi bạn chỉ việc lặp mảng đó sau đó thêm vào csdl thôi :D.

  5. Thái Trần says:
     /  Reply

    Hi Admin,
    Tình hình là em có cả một folder khoảng vài trăm file excel báo cáo của khoảng chục bộ phận trong công ty. Các file này trình bày theo một form mẫu gồm có: Tiêu đề, logo, ngày báo cáo, stt, họ tên, số giờ làm việc, hệ số hiệu quả, hệ số thái độ, ghi chú.

    Bây giờ, em muốn chỉ insert dòng, cột có của: họ tên, giờ làm việc, hệ số thái độ, hệ số hiệu quả thì import như thế nào?

    Vì có nhiều file quá nên copy dữ liệu của mấy cột muốn insert vào 1 file riêng thì lại quá lâu. Admin có cách nào để nguyên file như vậy mà vẫn Insert được các cột mình mong muốn vào CSDL k??

    Cảm ơn admin rất nhìu!!

    • nobitacnt says:
       /  Reply

      Chào bạn,trước tiên bạn cần import 1 file excel xem cấu trúc lúc lấy dữ liệu về nó thế nào,các cột tương ứng với vị trí bao nhiêu sau đó cho vào csdl.Vấn để bạn có cả trăm file excel thì có thể duyệt qua thư mục chứa các file excel đó sau đó lưu các tên file vào 1 mảng (hoặc lưu vào csdl) sau đó duyệt qua từng file để thực hiện thêm vào csdl.

  6. Đỗ Hữu Hải says:
     /  Reply

    phpexcel có read được file csv mà một cell bất kỳ có chưa tag html như abc không bạn?

    • nobitacnt says:
       /  Reply

      Nó không lọc được cell nào có chứa tag html như abc đâu,mà bạn lấy các dữ liệu về sau đó xử lý tìm chuỗi trong phần dữ liệu đã lấy về.

  7. lâm says:
     /  Reply

    Hì Tks bạn rất nhiều, mình đã làm được.
    Cho mình hỏi thêm $objWorksheet = $objPHPExcel->setActiveSheetIndex(0); tức là lấy sheet đầu tiên ra làm việc. Vậy mình có thể lấy tiếp dữ liệu sheet thứ hai , thứ ba, v.v. luôn 1 lần rồi lưu vào mảng rồi xử lý được ko bạn, vì mình đang có file excel có đến 15 sheet mỗi sheet là mỗi thông tin khác nhau. Nếu được bạn chỉ mình code lun nha tks bạn

  8. lâm says:
     /  Reply

    Mình đã làm được luôn phần getsheet rồi . 🙂 . Cho mình hỏi có cách nào import kiểu dữ liệu từ excel vào luôn được ko bạn .vd mình tô số 5 trong file excel màu đỏ, thì có cách nào để import luôn cả phần màu vào . Chỉ giúp mình với nha bạn.

    • nobitacnt says:
       /  Reply

      Mình chưa thử nhưng nghĩ chắc không được,vì cái định dạng trên file excel nó khác với định dạng bạn cần đó là dạng html rồi,trừ khi trong file excel đó bạn ghi hẳn mã html vào file excel đó may ra được 😀

      • lâm says:
         /  Reply

        À ko ý mình là có cách nào làm cho nó nhận biết được ko bạn, vd nó nhận ra được trong file xcel khung đó màu đỏ, thì lúc import vào, nó sẽ ghi chữ đỏ. 😀

    • lâm says:
       /  Reply

      À ko ý mình là có cách nào làm cho nó nhận biết được ko bạn, vd nó nhận ra được trong file xcel khung đó màu đỏ, thì lúc import vào, nó sẽ ghi chữ đỏ. 😀

  9. Long says:
     /  Reply

    Mình muốn làm 1 site đơn giản ! chỉ để lấy dữ liệu và hiển thị cái dữ liệu đó ở file excell cho trước đặt ở chung host ko bạn ! 🙂 mình ko biết liên hệ bạn như thế nào 🙂 bạn có thể cho mình thông tin liên lạc fb hay email chẳng hạn ko 🙂
    Cảm ơn bạn

    • nobitacnt says:
       /  Reply

      Bạn có thể liên hệ tuyencnt90 nhé.

  10. toàn says:
     /  Reply

    Vậy mình muốn insert vào database thì mình chạy 2 vòng lặp for để duyệt mảng arraydata hả admin

    • Nobitacnt says:
       /  Reply

      Với mảng đa chiều này bạn chỉ cần sử dụng 1 vòng lặp foreach để lặp và thêm vào csdl thôi.

      • Toàn says:
         /  Reply

        for ($row = 2; $row <= $highestRow;++$row)
        {
        for ($col = 0; $col getCellByColumnAndRow($col, $row)->getValue();
        $arraydata[$row-2][$col]=$value;
        }
        }
        ngoài vòng lặp này mình chạy hàm foreach thế nào với câu quyery insert chỗ nào bạn chỉ giúp mình với. Cảm ơn bạn nhiều

        • Nobitacnt says:
           /  Reply

          Bạn xem kỹ ví dụ trên đã in biến $arraydata ra,bạn có thể xem cấu trúc mảng đó rồi lặp mảng đó ra thôi,ví dụ
          foreach($arraydata as $row)
          {
          $name = $row[0]
          $email = $row[1]
          $phone = $row[2]
          }

  11. hoitumlum says:
     /  Reply

    Hi ban,
    mình có sẵn file excel đã định dạng, mình chỉ muốn lưu các thông tin lên các ô dữ liệu thôi.
    nhưng ví dụ trên là tạo file mới và lưu đè lên nên mất toàn bộ định dạng có sẵn trong file excel.
    vậy bạn có cách nào không chỉ mình với nhé

    Thanks

  12. Viet says:
     /  Reply

    Chao Admin,

    Mình có tải về rồi, bạn có thể hướng dẫn mình sao để chạy nó nhỉ.Mình tải về rồi nhưng truy cập vào thì nó không có gì cả. Cảm ơn bạn trước.

  13. Minh says:
     /  Reply

    Chào Admin.
    Mình đang gặp vấn đề về việc export dữ liệu từ mysql ra file Excel sử dung PHPExcel. Cơ sở dữ liệu của mình có một trường chứa link ảnh. Mình muốn export cả hình ảnh ra file Excel thì làm cách nào ạ.

  14. Nguyễn Hoàng Huy says:
     /  Reply

    Mình cũng dùng PHPExcel để xuất dữ liệu php ra file excel. Nhưng tại sao cùng 1 souce code cùng 1 phiên bản webserver nhưng cài trên máy mình thì đọc được file excel, cài trên máy khách hàng thì không đọc được. Mở lên nó báo lỗi và dữ liệu bị mã hết.

    • nobitacnt says:
       /  Reply

      Bạn export ra định dạng file là gì, phiên bản excel máy khách và máy bạn là phiên bản bao nhiêu

  15. leobeo says:
     /  Reply

    Em đang có vẫn đề về lưu file, khi chạy trên local thì vẫn được nhưng trên sever không thể lưu trên máy client. Có giải pháp gì cho trường hợp này không ạ?

Gửi bình luận

Giới thiệu

Mình tạo ra blog này với mong muốn chia sẻ và học hỏi kinh nghiệm trong quá trình thiết kế website. Website đang trong quá trình phát triển chân thành cảm ơn mọi sự góp ý của các bạn để làm cho website ngày càng hoàn thiên.

DMCA.com Protection Status
Theo dõi qua Email

Tổng hợp các bài viết về

Hoc php - CodeIgniter Framework - Laravel Framework - PHP va MYSQL