当前位置 : 主页 > 网络编程 > PHP >

使用excelReader读取excel文件

来源:互联网 收集:自由互联 发布时间:2021-07-03
class excel_tool{ const EXCEL_READER_PATH = '/../Vendor/excelReader/reader.php'; // 引入 reader.php 的路径,根据实际情况改 protected static $readerObj; public static $charset = 'utf-8'; // 结果字符集。可以改 /** * read
 
class excel_tool{
  
  const EXCEL_READER_PATH = '/../Vendor/excelReader/reader.php';   // 引入 reader.php 的路径,根据实际情况改
  
  protected static $readerObj;
  public static $charset = 'utf-8';   // 结果字符集。可以改
     
  /**
   * reader excel file by path
   * @param $filePath     string   excel file path
   * @param @getDataByRow bool     按行对数据分组或全部放在一组
   * @param @charset      set      输出结果字符集
   * @return array result data
  */
  public static function readFile($filePath, $getDataByRow = true, $charset = 'utf-8'){
  
    self::$charset = $charset;
    $readerObj = self::getReaderInstance();
    $readerObj->read($filePath);
    $readerObj->setOutputEncoding(self::$charset);
    $resultArr = array();
    //需要对结果进行excelIconv 处理
    if ($getDataByRow === true) {
  
      for ($i = 1; $i <= $readerObj->sheets[0]['numRows']; $i++) {
        $arr = array();
        for ($j = 1; $j <= $readerObj->sheets[0]['numCols']; $j++) {
          $arr[] = self::excelIconv($readerObj->sheets[0]['cells'][$i][$j]);
        }
        $resultArr[] = $arr;
      }
    } else {
  
      for ($i = 1; $i <= $readerObj->sheets[0]['numRows']; $i++) {
        for ($j = 1; $j <= $readerObj->sheets[0]['numCols']; $j++) {
          $resultArr[] = self::excelIconv($readerObj->sheets[0]['cells'][$i][$j]);
        }
      }
      $resultArr = array_unique($resultArr);
    }
  
    return $resultArr;
  }
  
  /**
   * change the excel input charset 
   * @param $input string excel input
   * @param string iconv input by self::$charset
  */
  public static function excelIconv($input){
    return iconv('Unicode', self::$charset, $input);
  }
  
  /**
   * get static reader obj
  */
  public static function getReaderInstance(){
  
    if (empty(self::$readerObj)) {
      require_once(dirname(__FILE__) . self::EXCEL_READER_PATH);
      self::$readerObj = new Spreadsheet_Excel_Reader();
    }
  
    return self::$readerObj;
  }
}



//使用方法
//传入路径,不传false 默认按行取数据
$xlsdata = excel_tool::readFile('./test.xls');
  
var_dump($xlsdata);
//结果:test1是在A列第一行,test2是在A列第二行
//array(2) { [0]=> array(1) { [0]=> string(5) "test1" } [1]=> array(1) { [0]=> string(5) "test2" } }

网友评论