homepagePHP/app/Gy_Library/CusExcel.class.php

136 lines
4.7 KiB
PHP
Executable File

<?php
namespace Gy_Library;
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/**
* Description of CusExcel
*
* @author 英乐
*/
class CusExcel{
//put your code here
private $_php_excel;
public function __construct($excel_file = '') {
import('Common.Util.PHPExcel');
if(file_exists($excel_file)){
$this->_php_excel = $this->load($excel_file);
}
else{
$this->_php_excel = new \PHPExcel();
}
}
protected function load($file){
if(strpos($file, '.xlsx') === false && strpos($file, '.xls') === false){
E('不是excel文件');
}
$php_excel = \PHPExcel_IOFactory::load($file);
return $php_excel;
}
public function setActiveSheetIndexByName($name){
$this->_php_excel->setActiveSheetIndexByName($name);
return $this;
}
public function setCellValueByColumnAndRow($column, $row, $value){
$letter = \PHPExcel_Cell::stringFromColumnIndex($column);
if(strpos($value, 'picture:') !== false && strpos($value, 'picture:') !== null){
$objDrawing = new \PHPExcel_Worksheet_Drawing();
$pic_path = substr($value, strlen('picture:'));
if(!file_exists($pic_path)){
return $this;
}
$objDrawing->setPath($pic_path);
$objDrawing->setWidth(100);
$objDrawing->setHeight(100);
$objDrawing->setCoordinates("{$letter}{$row}");
}
// example list:item A@item A,item B,item C
else if(strpos($value, 'list:') !== false && strpos($value, 'list:') !== null){
$tmp_arr = explode('@', $value);
$list_str = $tmp_arr[1];
$data_value = substr($tmp_arr[0], strlen('list:'));
$objValidation = $this->_php_excel->getActiveSheet()->getCellByColumnAndRow($column, $row)->getDataValidation();
$objValidation->setType(\PHPExcel_Cell_DataValidation::TYPE_LIST);
$objValidation->setErrorStyle(\PHPExcel_Cell_DataValidation::STYLE_INFORMATION);
$objValidation->setShowInputMessage(true);
$objValidation->setShowErrorMessage(true);
$objValidation->setShowDropDown(true);
$objValidation->setErrorTitle('输入错误');
$objValidation->setError('请选择列表中的值');
if(strpos($list_str, ',') === false){
$objValidation->setFormula1($list_str);
}
else{
$objValidation->setFormula1('"' . $list_str . '"');
}
$this->_php_excel->getActiveSheet()->setCellValueExplicitByColumnAndRow($column, $row, $data_value);
}
else{
$this->_php_excel->getActiveSheet()->setCellValueExplicitByColumnAndRow($column, $row, $value);
}
return $this;
}
public function download($file_name){
$php_writer = \PHPExcel_IOFactory::createWriter($this->_php_excel, 'Excel5');
header('pragma:public');
header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'. $file_name .'"');
header("Content-Disposition:attachment;filename={$file_name}");//attachment新窗口打印inline本窗口打印
$php_writer->save('php://output');
}
public function getRow($column_count, $row){
$column_list = array();
for($col = 0; $col < $column_count; $col++){
$cell_value = $this->_php_excel->getActiveSheet()->getCellByColumnAndRow($col, $row)->getValue();
$column_list[] = (string)$cell_value;
}
return $column_list;
}
//flag_column 指选择哪一列作为循环结束标记,当该列的行数据为空就结束循环
public function getRows($flag_column = ''){
$col = $flag_column == '' ? 0 : $flag_column;
$column_count = $this->getColumnCount(1);
$r = 1;
$cell_value = $this->_php_excel->getActiveSheet()->getCellByColumnAndRow($col, $r)->getValue();
$row_list = array();
while($cell_value != ''){
$row_list[] = $this->getRow($column_count, $r);
$r++;
$cell_value = $this->_php_excel->getActiveSheet()->getCellByColumnAndRow($col, $r)->getValue();
}
return $row_list;
}
public function getColumnCount($row){
$col = 0;
do{
$cell_value = $this->_php_excel->getActiveSheet()->getCellByColumnAndRow($col, $row)->getValue();
$col++;
}
while(!empty($cell_value));
return $col-1;
}
}