当前位置: 首页>>代码示例>>PHP>>正文


PHP PHPExcel_IOFactory::createReader方法代码示例

本文整理汇总了PHP中PHPExcel_IOFactory::createReader方法的典型用法代码示例。如果您正苦于以下问题:PHP PHPExcel_IOFactory::createReader方法的具体用法?PHP PHPExcel_IOFactory::createReader怎么用?PHP PHPExcel_IOFactory::createReader使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在PHPExcel_IOFactory的用法示例。


在下文中一共展示了PHPExcel_IOFactory::createReader方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: run_import

 public function run_import($file_upload)
 {
     $file_path = './upload/files/excel/' . $file_upload['file_name'];
     //load the excel library
     $this->load->library('excel');
     //read file from path
     $inputFileType = PHPExcel_IOFactory::identify($file_path);
     //die(print_r($inputFileType));
     /**  Create a new Reader of the type defined in $inputFileType  **/
     $objReader = PHPExcel_IOFactory::createReader($inputFileType);
     $objPHPExcel = $objReader->load($file_path);
     //die(print_r($objPHPExcel));
     //get only the Cell Collection
     $cell_collection = $objPHPExcel->getActiveSheet()->getCellCollection();
     //extract to a PHP readable array format
     foreach ($cell_collection as $cell) {
         $column = $objPHPExcel->getActiveSheet()->getCell($cell)->getColumn();
         $row = $objPHPExcel->getActiveSheet()->getCell($cell)->getRow();
         $data_value = $objPHPExcel->getActiveSheet()->getCell($cell)->getValue();
         //header will/should be in row 1 only. of course this can be modified to suit your need.
         if ($row == 1) {
             $header[$row][$column] = $data_value;
         } else {
             $arr_data[$row][$column] = $data_value;
         }
     }
     //send the data in an array format
     $data['header'] = $header;
     $data['values'] = $arr_data;
     return $arr_data;
 }
开发者ID:pay-test,项目名称:ci2,代码行数:31,代码来源:medical.php

示例2: convertCsvToExcel

 public function convertCsvToExcel($loadPath, $outputPath)
 {
     $objReader = \PHPExcel_IOFactory::createReader('CSV');
     $objPHPExcel = $objReader->load($loadPath);
     $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
     $objWriter->save($outputPath);
 }
开发者ID:jocoonopa,项目名称:avenue,代码行数:7,代码来源:ExcelGenerator.php

示例3: excelParsing

 public static function excelParsing($fileExcel)
 {
     //        $cacheMethod = \PHPExcel_CachedObjectStorageFactory::cache_to_sqlite3;  /* here i added */
     //        $cacheEnabled = \PHPExcel_Settings::setCacheStorageMethod($cacheMethod);
     //        if (!$cacheEnabled) {
     //            echo "### WARNING - Sqlite3 not enabled ###" . PHP_EOL;
     //        }
     $objPHPExcel = new \PHPExcel();
     //$fileExcel = Yii::getAlias('@webroot/templates/operator.xls');
     $inputFileType = \PHPExcel_IOFactory::identify($fileExcel);
     $objReader = \PHPExcel_IOFactory::createReader($inputFileType);
     $objReader->setReadDataOnly(true);
     /**  Load $inputFileName to a PHPExcel Object  * */
     $objPHPExcel = $objReader->load($fileExcel);
     $total_sheets = $objPHPExcel->getSheetCount();
     $allSheetName = $objPHPExcel->getSheetNames();
     $objWorksheet = $objPHPExcel->setActiveSheetIndex(0);
     $highestRow = $objWorksheet->getHighestRow();
     $highestColumn = $objWorksheet->getHighestColumn();
     $highestColumnIndex = \PHPExcel_Cell::columnIndexFromString($highestColumn);
     for ($row = 1; $row <= $highestRow; ++$row) {
         for ($col = 0; $col < $highestColumnIndex; ++$col) {
             $value = $objWorksheet->getCellByColumnAndRow($col, $row)->getValue();
             $arraydata[$row - 1][$col] = $value;
         }
     }
     return $arraydata;
 }
开发者ID:sintret,项目名称:yii2-gii2,代码行数:28,代码来源:Util.php

示例4: parseFile

function parseFile($file, $type)
{
    $sql = new MySQL();
    $sql->connect('127.0.0.1', 'root', 'root');
    $objReader = PHPExcel_IOFactory::createReader($type);
    $chunkSize = 200;
    $i = 1;
    $sql->clear('price_liga');
    $r = array();
    for ($startRow = 0; $startRow <= 5000; $startRow += $chunkSize + 1) {
        $chunkFilter = new chunkReadFilter($startRow, $chunkSize);
        $objReader->setReadFilter($chunkFilter);
        $objReader->setReadDataOnly(true);
        $objPHPExcel = $objReader->load($file);
        $data = $objPHPExcel->getActiveSheet()->toArray();
        foreach ($data as $k => $v) {
            if ($data[$k][0] == '') {
                unset($data[$k]);
            } else {
                $sql->insert('price_liga', array('id' => $i, 'cat_num' => $data[$k][0], 'brand' => ucwords(strtolower($data[$k][1])), 'article' => $data[$k][2], 'descr' => str_replace("'", "\\'", $data[$k][3]), 'model' => str_replace("'", "\\'", $data[$k][4]), 'size' => $data[$k][5], 'price' => $data[$k][6], 'amount' => $data[$k][8]), true);
                $i++;
            }
        }
    }
    //print_r($r);
    $sql->close();
    return array('counter' => $i);
}
开发者ID:herrlosxxx,项目名称:test_parser,代码行数:28,代码来源:liga.php

示例5: actionExcel

 public function actionExcel($id)
 {
     $po = $this->loadModel($id);
     $poItemCriteria = new CDbCriteria();
     $poItemCriteria->with = array('material');
     $poItemCriteria->compare('po_number', $id);
     $poItemDataProvider = new CActiveDataProvider('PoItems', array('criteria' => $poItemCriteria, 'pagination' => false));
     Yii::import('ext.phpexcel.XPHPExcel');
     $objPHPExcel = XPHPExcel::createPHPExcel();
     $objReader = PHPExcel_IOFactory::createReader('Excel5');
     $objPHPExcel = $objReader->load(Yii::app()->basePath . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . "templates" . DIRECTORY_SEPARATOR . "PO_Template.xls");
     $objPHPExcel->getProperties()->setCreator(Yii::app()->user->name)->setLastModifiedBy(Yii::app()->user->name)->setTitle("PO Order-" . $id);
     //->setSubject("Office 2007 XLSX Test Document")
     //->setDescription("Sales Order#")
     //->setKeywords("office 2007 openxml php")
     //->setCategory("Test result file");
     // Add the data
     $objPHPExcel->setActiveSheetIndex(0)->setCellValue('C2', $po->po_number)->setCellValue('C3', Yii::app()->dateFormatter->formatDateTime($po->maturity_date, "short", null))->setCellValue('C4', Yii::app()->dateFormatter->formatDateTime($po->created, "short", null))->setCellValue('C5', Yii::app()->dateFormatter->formatDateTime($po->updated, "short", null))->setCellValue('E2', $po->comp->name)->setCellValue('E3', $po->contact)->setCellValue('E4', $po->contact_telephone)->setCellValue('C6', $po->paymentTerm->description)->setCellValue('C7', $po->is_open ? "Open" : "Closed")->setCellValue('A8', "Comments:\r" . $po->comments);
     $row = 13;
     //$i = 1;
     // Write the sale items now
     $items = $poItemDataProvider->getData();
     foreach ($items as $item) {
         $objPHPExcel->setActiveSheetIndex(0)->setCellValue("B" . $row, $item->material->cat->description . "-" . $item->material->description)->setCellValue("D" . $row, $item->qty)->setCellValue("E" . $row, $item->qty_units)->setCellValue("F" . $row, $item->unit_price)->setCellValue("G" . $row, $item->price_units)->setCellValue("H" . $row, $item->qty_recieved)->setCellValue("I" . $row, $item->qty_diff);
         //$i++;
         $row++;
     }
     $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
     // Redirect output to a client’s web browser
     //header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
     header('Content-Type: application/vnd.ms-excel');
     header('Content-Disposition: attachment;filename=' . '"PurchaseOrder-' . $id . '.xls"');
     header('Cache-Control: max-age=0');
     $objWriter->save('php://output');
 }
开发者ID:mehulsbhatt,项目名称:sale_purchase_tracking,代码行数:35,代码来源:PurchaseOrderController.php

示例6: readExcel

 private function readExcel($key = 0)
 {
     error_reporting(E_ALL);
     date_default_timezone_set('Asia/ShangHai');
     require_once 'Classes/PHPExcel/IOFactory.php';
     $reader = PHPExcel_IOFactory::createReader('Excel2007');
     //设置格式
     foreach ($GLOBALS['excelfile'] as $key => $value) {
         $value = EXCEL_PATH . $value;
         if (!file_exists($value)) {
             exit("not found {$value}.\n");
         }
         $PHPExcel = $reader->load($value);
         // 载入excel文件
         $sheet = $PHPExcel->getSheet(0);
         // 读取第一個工作表
         $sheetName = $sheet->getTitle();
         $allRow = $sheet->getHighestRow();
         // 取得总行数
         $allColumm = $sheet->getHighestColumn();
         // 取得总列数
         if ($key == 1) {
             $this->outputLuaByMap($sheet, $sheetName, $allRow, $allColumm);
         } else {
             $this->outputLuaByList($sheet, $sheetName, $allRow, $allColumm);
         }
         $this->outputXml($sheet, $sheetName, $allRow, $allColumm, $key);
     }
 }
开发者ID:castilla1988,项目名称:excelToXml-Lua,代码行数:29,代码来源:Factory.class.php

示例7: importExcel

 public function importExcel($fileID)
 {
     $filename = $this->storeExcel($fileID);
     if ($filename != false) {
         $objReader = PHPExcel_IOFactory::createReader('Excel2007');
         $objPHPExcel = PHPExcel_IOFactory::load($this->path . $filename);
         $sheet = $objPHPExcel->getSheet(0);
         $highestRow = $sheet->getHighestRow();
         //取得行数
         $highestColumn = $sheet->getHighestColumn();
         // 取得列数
         $result = array();
         for ($j = 1; $j <= $highestRow; $j++) {
             for ($k = 'A'; $k <= $highestColumn; $k++) {
                 $str = $objPHPExcel->getActiveSheet()->getCell("{$k}{$j}")->getValue();
                 //这个地方的字符处理有问题,当把array传递到createAccount_run页面的时候会出现乱码
                 //                     $str = iconv('gbk','utf-8',$str);
                 $result[$j][$k] = $str;
             }
         }
         unlink($this->path . $filename);
         //删除文件
         return $result;
     } else {
         return false;
     }
 }
开发者ID:ChenXL581X,项目名称:distributedcourse,代码行数:27,代码来源:Excel.php

示例8: Write

 /**
  * Write statistics to Excel table
  *
  * @param  string $file File name
  * @return void
  */
 public function Write($file)
 {
     if (file_exists($file) && NULL !== $this->session->userdata('Write_statistics') && $this->session->userdata('Write_statistics')) {
         $this->session->unset_userdata('Write_statistics');
         $this->load->library('Excel');
         // Open file
         $fileType = 'Excel2007';
         $objReader = PHPExcel_IOFactory::createReader($fileType);
         $objPHPExcel = $objReader->load($file);
         $objPHPExcel->setActiveSheetIndex(0);
         $objWorksheet = $objPHPExcel->getActiveSheet();
         $highestRow = $objWorksheet->getHighestRow();
         $dateFound = FALSE;
         $sum = 0;
         $currentDate = date('Y.m.d');
         for ($row = 1; $row <= $highestRow; ++$row) {
             $value = $objWorksheet->getCellByColumnAndRow(0, $row)->getValue();
             $sum = max($sum, $objWorksheet->getCellByColumnAndRow(1, $row)->getValue());
             if ($value == $currentDate) {
                 $dateFound = TRUE;
                 $objPHPExcel = $this->Update($objPHPExcel, $row, $sum, $currentDate);
             }
         }
         if (!$dateFound) {
             $objPHPExcel = $this->Update($objPHPExcel, $highestRow + 1, $sum, $currentDate);
         }
         // Write the file
         $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, $fileType);
         $objWriter->save($file);
     }
 }
开发者ID:peresadam,项目名称:zsebtanar_v4,代码行数:37,代码来源:Statistics.php

示例9: excelToArray

function excelToArray($file)
{
    $objReader = PHPExcel_IOFactory::createReader('Excel5');
    $objReader->setReadDataOnly(true);
    $objPHPExcel = $objReader->load($file);
    //读取文件
    $objWorksheet = $objPHPExcel->getActiveSheet(0);
    //读取excel文件中的第一个工作表
    $highestRow = $objWorksheet->getHighestRow();
    //计算总行数
    $highestColumn = $objWorksheet->getHighestColumn();
    //取得列数中最大的字母。如(J)
    $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
    //通过字母计算总列数
    $excelData = array();
    //存放读取的数据
    for ($row = 2; $row <= $highestRow; ++$row) {
        //从第二行开始读取数据
        for ($col = 0; $col <= $highestColumnIndex; ++$col) {
            //读取每行中的各列
            //把读取的数据放入数组中
            $excelData[$row - 2][] = $objWorksheet->getCellByColumnAndRow($col, $row)->getValue();
        }
    }
    return $excelData;
}
开发者ID:JasonWiki,项目名称:docs,代码行数:26,代码来源:read.php

示例10: customerimport

 public function customerimport()
 {
     require_once APPPATH . 'third_party/phpexcel/Classes/PHPExcel/IOFactory.php';
     $path = "C://inetpub/ftproot/retailersurvey/";
     $filename = 'NAV Active Customer and Ship-to Address List.xlsx';
     if (!file_exists($path . $filename)) {
         exit("file not found" . EOL);
     }
     $objReader = PHPExcel_IOFactory::createReader('Excel2007');
     $objPHPExcel = $objReader->load($path . $filename);
     $sheetNames = $objPHPExcel->getSheetNames();
     $sheetindex = '0';
     $sheet = $objPHPExcel->getSheet($sheetindex);
     $startRow = 2;
     $highestRow = $sheet->getHighestRow();
     $comma = "";
     $customeridlist = '';
     $data = array();
     for ($row = $startRow; $row <= $highestRow; $row++) {
         if (trim($sheet->getCell('A' . $row)->getValue()) != '') {
             $temp = $this->cronjob_model->updatecustomer(trim($sheet->getCell('A' . $row)->getValue()), trim($sheet->getCell('B' . $row)->getValue()));
             if (!$temp) {
             } else {
                 $customeridlist .= $comma . $temp;
                 $comma = ', ';
             }
             //echo trim($sheet->getCell('A'.$row)->getValue())." | ".trim($sheet->getCell('B'.$row)->getValue())."\n";
         }
     }
     $this->cronjob_model->updatecustomerlist($customeridlist);
 }
开发者ID:mdbhk,项目名称:retailersurvey.themdbfamily.com,代码行数:31,代码来源:cronjob.php

示例11: index

 public function index()
 {
     //load library excel
     $this->load->library('excel');
     //Here i used microsoft excel 2007
     $objReader = PHPExcel_IOFactory::createReader('Excel2007');
     //Set to read only
     $objReader->setReadDataOnly(true);
     //Load excel file
     $objPHPExcel = $objReader->load('assets/uploads/files/data.xlsx');
     $objWorksheet = $objPHPExcel->setActiveSheetIndex(0);
     //load model
     $this->load->model('excelModel');
     //loop from first data untill last data
     for ($i = 2; $i <= 4; $i++) {
         $n_nota = $objWorksheet->getCellByColumnAndRow(0, $i)->getValue();
         $nit_cc = $objWorksheet->getCellByColumnAndRow(1, $i)->getValue();
         $nombre = $objWorksheet->getCellByColumnAndRow(2, $i)->getValue();
         $direccion = $objWorksheet->getCellByColumnAndRow(3, $i)->getValue();
         $barrio = $objWorksheet->getCellByColumnAndRow(4, $i)->getValue();
         $telefono = $objWorksheet->getCellByColumnAndRow(5, $i)->getValue();
         $descripcion = $objWorksheet->getCellByColumnAndRow(6, $i)->getValue();
         $cantidad = $objWorksheet->getCellByColumnAndRow(7, $i)->getValue();
         $fecha = $objWorksheet->getCellByColumnAndRow(8, $i)->getValue();
         $hora = $objWorksheet->getCellByColumnAndRow(9, $i)->getValue();
         $data_user = array('n_nota' => $n_nota, 'nit_cc' => $nit_cc, 'nombre' => $nombre, 'direccion' => $direccion, 'barrio' => $barrio, 'telefono' => $telefono, 'descripcion' => $descripcion, 'cantidad' => $cantidad, 'fecha' => $fecha, 'hora_servicio' => $hora, 'cod_zona' => $i, 'cod_estado' => 2);
         $this->excelModel->add_data($data_user);
     }
     echo 'listo';
 }
开发者ID:ppipolitecnico,项目名称:tutienda,代码行数:30,代码来源:excelController.php

示例12: insertarExcel

 function insertarExcel($array)
 {
     $uploadOk = 1;
     $time = time();
     $fecha = date("Y-m-d", $time);
     $target_dir = "../documents/";
     $target_file = $target_dir . basename($_FILES["archivoExcel"]["name"]);
     move_uploaded_file($array["archivoExcel"]["tmp_name"], $target_file);
     set_include_path(get_include_path() . PATH_SEPARATOR . '../complements/PHPExcel-1.8/Classes/');
     $inputFileType = 'Excel2007';
     include 'PHPExcel/IOFactory.php';
     $inputFileName = $target_file;
     $objReader = PHPExcel_IOFactory::createReader($inputFileType);
     $objReader->setReadDataOnly(true);
     $objPHPExcel = $objReader->load($inputFileName);
     $sheetData = $objPHPExcel->getActiveSheet()->toArray(null, true, true, true);
     require_once "../db/conexiones.php";
     $consulta = new Conexion();
     foreach ($sheetData as $datos) {
         $nombreSinAcentos = sanear_string($datos['B']);
         $nombre = strtoupper(trim($nombreSinAcentos));
         $datosEmpleado = $consulta->Conectar("postgres", "SELECT * FROM userinfo WHERE UPPER(name)='" . $nombre . "'");
         if ($datosEmpleado) {
             $sqlInsert = $this->invoco->Conectar("postgres", "INSERT INTO horario_personal (user_id, banda_id, fecha) VALUES (" . $datosEmpleado[0]['userid'] . "," . $datos['C'] . ", '" . $fecha . "')");
         }
     }
     return "Se insertaron los datos Exitosamente!";
 }
开发者ID:josenriquevh,项目名称:kkoreal,代码行数:28,代码来源:definirPorArchivoExcelExp.php

示例13: __construct

 public function __construct($filename = null, $sheet = 0)
 {
     $this->filename = $filename;
     if (file_exists($filename)) {
         /* on charge le contenu du fichier dans l'objet phpExcel */
         $inputFileType = PHPExcel_IOFactory::identify($filename);
         $objReader = PHPExcel_IOFactory::createReader($inputFileType);
         $this->phpExcel = $objReader->load($filename);
         /* on implémente dans le tableau */
         //  Get worksheet dimensions
         $sheet = $this->phpExcel->getSheet($sheet);
         $highestRow = $sheet->getHighestRow();
         $highestColumn = $sheet->getHighestColumn();
         //  Loop through each row of the worksheet in turn
         for ($row = 1; $row <= $highestRow; $row++) {
             //  Read a row of data into an array
             $rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE);
             $this->container[] = $rowData[0];
         }
     } else {
         $this->phpExcel = new PHPExcel();
         $this->phpExcel->setActiveSheetIndex($sheet);
     }
     parent::__construct($this->container);
 }
开发者ID:Weysan,项目名称:ExcelArrayAccess,代码行数:25,代码来源:ExcelArray.php

示例14: actionImport

 public function actionImport()
 {
     $field = ['fileImport' => 'File Import'];
     $modelImport = DynamicModel::validateData($field, [[['fileImport'], 'required'], [['fileImport'], 'file', 'extensions' => 'xls,xlsx', 'maxSize' => 1024 * 1024]]);
     if (Yii::$app->request->post()) {
         $modelImport->fileImport = \yii\web\UploadedFile::getInstance($modelImport, 'fileImport');
         if ($modelImport->fileImport && $modelImport->validate()) {
             $inputFileType = \PHPExcel_IOFactory::identify($modelImport->fileImport->tempName);
             $objReader = \PHPExcel_IOFactory::createReader($inputFileType);
             $objPHPExcel = $objReader->load($modelImport->fileImport->tempName);
             $sheetData = $objPHPExcel->getActiveSheet()->toArray(null, true, true, true);
             $baseRow = 2;
             while (!empty($sheetData[$baseRow]['A'])) {
                 $model = new Mahasiswa();
                 $model->nama = (string) $sheetData[$baseRow]['B'];
                 $model->nim = (string) $sheetData[$baseRow]['C'];
                 $model->save();
                 //die(print_r($model->errors));
                 $baseRow++;
             }
             Yii::$app->getSession()->setFlash('success', 'Success');
         } else {
             Yii::$app->getSession()->setFlash('error', 'Error');
         }
     }
     return $this->redirect(['index']);
 }
开发者ID:adem-team,项目名称:advanced,代码行数:27,代码来源:FingerController.php

示例15: import_dt

 public function import_dt($inputFileName)
 {
     try {
         //$inputFileType = 'Excel2007';
         $inputFileType = 'Excel5';
         $objReader = PHPExcel_IOFactory::createReader($inputFileType);
         $objPHPExcel = $objReader->load($inputFileName);
         $data = $objPHPExcel->getActiveSheet()->toArray(null, true, true, true);
         $result = '';
         $session = new Zend_Session_Namespace('import_dt');
         $deTais = array();
         $thanhViens = array();
         $count = -1;
         for ($row = 10; $row <= count($data); $row++) {
             //if cell[$row,B] là đề tài mới
             if (!empty($data[$row]['B'])) {
                 //luu de tai
                 $cap_quan_ly = Default_Model_Functions::convert_vi_to_en(strtolower(trim($data[$row]['M'])));
                 $deTais[] = array('ten' => $data[$row]['B'], 'linh_vuc' => trim($data[$row]['C']), 'thoi_gian_bat_dau' => trim($data[$row]['K']), 'thoi_gian_hoan_thanh' => trim($data[$row]['L']), 'cap_quan_ly' => $cap_quan_ly, 'kinh_phi' => trim($data[$row]['N']));
                 //luu chu nhiem
                 $count++;
                 $thanhViens[$count][] = array('ma_giang_vien' => trim($data[$row]['E']), 'ho_ten' => preg_replace('/\\s+/u', ' ', trim($data[$row]['F'])), 'hoc_vi' => trim($data[$row]['G']), 'ghi_chu' => trim($data[$row]['H']), 'nhiem_vu' => '1', 'email' => trim($data[$row]['I']), 'so_dien_thoai' => trim($data[$row]['J']));
             } else {
                 //luu thanh vien neu co
                 if (!empty($data[$row]['F'])) {
                     $thanhViens[$count][] = array('ma_giang_vien' => trim($data[$row]['E']), 'ho_ten' => preg_replace('/\\s+/u', ' ', trim($data[$row]['F'])), 'hoc_vi' => trim($data[$row]['G']), 'ghi_chu' => trim($data[$row]['H']), 'nhiem_vu' => '0', 'email' => trim($data[$row]['I']), 'so_dien_thoai' => trim($data[$row]['J']));
                 }
             }
         }
         $session->deTais = $deTais;
         $session->thanhViens = $thanhViens;
     } catch (Zend_Exception $ex) {
         throw $ex;
     }
 }
开发者ID:nhochong,项目名称:qlkh-sgu,代码行数:35,代码来源:ImportController.php


注:本文中的PHPExcel_IOFactory::createReader方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。