excel学习库

excel表格_excel函数公式大全_execl从入门到精通

php导入导出excel/csv


类库:

"phpoffice/phpspreadsheet": "1.12",

1 导入excel/csv,结果array数组

private function importFromExcel($filePath){        $ext = pathinfo($filePath, PATHINFO_EXTENSION);        if (!in_array($ext, ['csv', 'xls', 'xlsx'])) {            $this->error(__('Unknown data format'));        }        if ($ext === 'csv') {            $file = fopen($filePath, 'r');            $filePath = tempnam(sys_get_temp_dir(), 'import_csv');            $fp = fopen($filePath, "w");            $n = 0;            while ($line = fgets($file)) {                $line = rtrim($line, "\n\r\0");                $encoding = mb_detect_encoding($line, ['utf-8', 'gbk', 'latin1', 'big5']);                if ($encoding != 'utf-8') {                    $line = mb_convert_encoding($line, 'utf-8', $encoding);                }                if ($n == 0 || preg_match('/^".*"$/', $line)) {                    fwrite($fp, $line . "\n");                } else {                    fwrite($fp, '"' . str_replace(['"', ','], ['""', '","'], $line) . "\"\n");                }                $n++;            }            fclose($file) || fclose($fp);            $reader = new Csv();        } elseif ($ext === 'xls') {            $reader = new Xls();        } else {            $reader = new Xlsx();        }        $insert = [];        try {            if (!$PHPExcel = $reader->load($filePath)) {                $this->error(__('Unknown data format'));            }            $currentSheet = $PHPExcel->getSheet(0);  //读取文件中的第一个工作表             $allColumn = $currentSheet->getHighestDataColumn(); //取得最大的列号             $allRow = $currentSheet->getHighestRow(); //取得一共有多少行             $maxColumnNumber = Coordinate::columnIndexFromString($allColumn);            $fields = [];            for ($currentRow = 1; $currentRow <= 1; $currentRow++) {                for ($currentColumn = 1; $currentColumn <= $maxColumnNumber; $currentColumn++) {                    $val = $currentSheet->getCellByColumnAndRow($currentColumn, $currentRow)->getValue();                    $fields[] = $val;                }            }            $insert[] = $fields;            for ($currentRow = 2; $currentRow <= $allRow; $currentRow++) {                $values = [];                for ($currentColumn = 1; $currentColumn <= $maxColumnNumber; $currentColumn++) {                    $val = $currentSheet->getCellByColumnAndRow($currentColumn, $currentRow)->getValue();                    $values[] = is_null($val) ? '' : $val;                }                $flag = false;                foreach ($values as $v) {                    if (!empty($v)) $flag = true;                }                if ($flag) $insert[] = $values;            }        } catch (\Exception $exception) {            $this->error($exception->getMessage());        }        if (!$insert) {            $this->error(__('No rows were updated'));        }        return $insert;    }

2 导出CSV,不依赖库

function exportToCvs($fileName = '', $headArr = [], $data = []) {        ini_set('memory_limit', '1024M'); //设置程序运行的内存         ini_set('max_execution_time', 0); //设置程序的执行时间,0为无上限         ob_end_clean();  //清除内存         ob_start();        header("Content-Type: text/csv");        header("Content-Disposition:filename=" . $fileName . '.csv');        $fp = fopen('php://output', 'w');        fwrite($fp, chr(0xEF) . chr(0xBB) . chr(0xBF));        fputcsv($fp, $headArr);        $index = 0;        foreach ($data as $item) {            if ($index == 1000) { //每次写入1000条数据清除内存                 $index = 0;                ob_flush();//清除内存                 flush();            }            $index++;            fputcsv($fp, $item);        }        ob_flush();        flush();        ob_end_clean();        exit();    }

3 导出excel

public function exportToExcel($title, $headers=[], $datas){        // Create new Spreadsheet object         $spreadsheet = new Spreadsheet();        // Set document properties         $spreadsheet->getProperties()->setCreator('syx')            ->setLastModifiedBy('syx')            ->setTitle($title)            ->setSubject($title)            ->setDescription('')            ->setKeywords('')            ->setCategory('');        // Set active sheet index to the first sheet, so Excel opens this as the first sheet         $worksheet = $spreadsheet->setActiveSheetIndex(0);        $worksheet->setTitle("数据");        $styleArray = array(            'font' => array(                'bold' => false,                'color' => array('rgb' => '000000'),                'size' => 12,                'name' => 'Verdana'             ));        // Add some data 1         // $spreadsheet->setActiveSheetIndex(0)         //     ->setCellValue('A1', 'Hello')         //     ->setCellValue('B2', 'world!')         //     ->setCellValue('C1', 'Hello')         //     ->setCellValue('D2', 'world!');         // Add some data 2         // $worksheet->setCellValueByColumnAndRow(1, 1, 'Hello');         $line = 0;        if (!empty($headers)) {            $line++;            $col = 1;            foreach ($headers as $field => $value) {                $value = ' '.$value;                $worksheet->setCellValueByColumnAndRow($col, $line, $value);                $worksheet->getCellByColumnAndRow($col, $line)->getStyle()->applyFromArray($styleArray);                $col++;            }        }        foreach ($datas as $index => $item) {            $line++;            $col = 1;            foreach ($item as $field => $value) {                $value = ' '.$value;                $worksheet->setCellValueByColumnAndRow($col, $line, $value);                $worksheet->getCellByColumnAndRow($col, $line)->getStyle()->applyFromArray($styleArray);                $col++;            }        }        // Redirect output to a client’s web browser (Xlsx)         header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');        header('Content-Disposition: attachment;filename="'.$title.'.xlsx"');        header('Cache-Control: max-age=0');        // If you're serving to IE 9, then the following may be needed         header('Cache-Control: max-age=1');        // If you're serving to IE over SSL, then the following may be needed         header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past         header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified         header('Cache-Control: cache, must-revalidate'); // HTTP/1.1         header('Pragma: public'); // HTTP/1.0         $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');        $writer->save('php://output');    }

over

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接