乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > 为什么从<em>excel</em>表里面拿出来的图片不可以上传到网站上-php excel 导

为什么从<em>excel</em>表里面拿出来的图片不可以上传到网站上-php excel 导

作者:乔山办公网日期:

返回目录:excel表格制作


首先,去PHPExcel官方网站下载e799bee5baa6e79fa5e98193e59b9ee7ad94338PHPExcel,官方地址为;http://phpexcel.codeplex.com/.我下的是1.8.0版本的.解压后发现还是蛮大的,有十几M,不知道其他版本是不是会小点.
  这里写图片描述
  把解压好的PHPExcel文件放在ThinkPHP的Vender文件夹下(专门放第三方类库的),如下图
  这里写图片描述
  其次,创建Excel转换数组类,并把它放在ThinkPHP\Extend\Library\ORG\Util目录下
  class ExcelToArrary {
  public function __construct() {
  Vendor("PHPExcel.Classes.PHPExcel");//引入phpexcel类(留意路径,不了解路径可以查看下手册)
  Vendor("PHPExcel.Classes.PHPExcel.IOFactory"); //引入phpexcel类(留意路径)
  }
  public function read($filename,$encode,$file_type){
  if(strtolower ( $file_type )=='xls')//判断excel表类型为2003还是2007
  {
  Vendor("PHPExcel.Classes.PHPExcel.Reader.Excel5"); //引入phpexcel类(留意路径)
  $objReader = PHPExcel_IOFactory::createReader('Excel5');
  }elseif(strtolower ( $file_type )=='xlsx')
  {
  Vendor("PHPExcel.Classes.PHPExcel.Reader.Excel2007");//引入phpexcel类(留意路径)
  $objReader = PHPExcel_IOFactory::createReader('Excel2007');
  }
  $objReader->setReadDataOnly(true);
  $objPHPExcel = $objReader->load($filename);
  $objWorksheet = $objPHPExcel->getActiveSheet();
  $highestRow = $objWorksheet->getHighestRow();
  $highestColumn = $objWorksheet->getHighestColumn();
  $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
  $excelData = array();
  for ($row = 1; $row <= $highestRow; $row++) {
  for ($col = 0; $col < $highestColumnIndex; $col++) {
  $excelData[$row][] =(string)$objWorksheet->getCellByColumnAndRow($col, $row)->getValue();
  }
  }
  return $excelData;
  }
  }
  1
  2
  3
  4
  5
  6
  7
  8
  9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
  21
  22
  23
  24
  25
  26
  27
  28
  29
  30
  1
  2
  3
  4
  5
  6
  7
  8
  9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
  21
  22
  23
  24
  25
  26
  27
  28
  29
  30
  如右图这里写图片描述
  现在来说Excel,表格的结构样式和MySQL样式要类似,表格样式如下(本人对Excel使用只是一般,所以如果有Excel大神做的报表,不知后果如何).
  这里写图片描述
  前端页面相关代码:
  <div>
  <form method="post" action="{:U('Index/upload')}" enctype="multipart/form-data">
  <font>导入Excel数据:</font>
  <label for="file_stu">上传</label>
  <input name="file_stu" type="file" id="file_stu" />
  <h3>温馨提示:</h3>
  <p>请确认您的Excel表格类型是xls的,以免出现兼容问题.</p>
  <inputtypeinputtype="submit" class="sure" value="导入" />
  </form>
  </div>
  1
  2
  3
  4
  5
  6
  7
  8
  9
  10
  1
  2
  3
  4
  5
  6
  7
  8
  9
  10
  最后,控制器部分使用了Thinkphp自带的上传类,使用unlink()函数是为了删除上传的excel表格,以免文件夹存入过多文件,调试代码时可先注释掉.或者不写也行,把删除文件的工作交给你们的运维.代码中foreach循环部分$v[]里的0, 1,2可以改动以下看看与Excel表格里的内容是什么关系.可以把数组打印出来看一看,你就很清楚了
  相关代码:
  public function upload(){
  import('ORG.Util.ExcelToArrary');//导入excelToArray类
  if (! empty ( $_FILES ['file_stu'] ['name'] )){
  import('ORG.Net.UploadFile');
  $upload = new UploadFile();// 实例化上传类
  $upload->maxSize = 3145728 ;// 设置附件上传大小
  $upload->allowExts = array('xls', 'xlsx');// 设置附件上传类型
  $upload->savePath = './Uploads/';// 设置附件上传目录
  if(!$upload->upload()) {// 上传错误提示错误信息
  $this->error($upload->getErrorMsg());
  }else{// 上传成功 获取上传文件信息
  $info = $upload->getUploadFileInfo();
  }
  }else{
  $this->error('(⊙o⊙)~没传数据就导入?!你在逗我?!');
  }
  //dump($info);die;
  $ExcelToArrary=new ExcelToArrary();//实例化
  $res=$ExcelToArrary->read($info[0]['savepath'].$info[0]['savename'],"UTF-8",$info[0]['extension']);//传参,判断office2007还是office2003
  $res = array_slice($res,1); //为了去掉Excel里的表头,也就是$res数组里的$res[0];
  //dump($res);
  foreach ( $res as $k => $v ){ //循环excel表
  $data[$k]['mobile'] = $v [0];//创建二维数组
  $data[$k]['name'] = $v [1];
  $data[$k]['duty'] = $v [2];
  }
  //dump($data);die;
  $result=M('appkey')->addAll($data);
  if(!$result){
  $this->error('导入数据库失败');
  exit();
  }else{
  $filename = './Uploads/'.$info[0]['savename'];//上传文件绝对路径,unlink()删除文件函数
  if (unlink($filename)) {
  $this->success ( '导入成功' );
  }else{
  $this->error('缓存删除失败');
  }
  }
  }

将excel表另存网页(在另存为时,保存类型选择【网页(*.htm;*.html)】),位置选择桌面。在桌面会生成一个网页文件和一个同名文件夹,在该文件夹内找到需要的图片文件即可。
照片全都上传到同一目录,然后地址和student_id对应表。。

require_once '../Classes/PHPExcel/IOFactory.php';

$objReader = PHPExcel_IOFactory::createReader('Excel5');
// 设置载入含有贴图e79fa5e98193e58685e5aeb9338的 sheet
$objReader->setLoadSheetsOnly(array('sheet1'));
$objPHPExcel = $objReader->load('test.xls');

$drawing = new PHPExcel_Writer_Excel2007_Drawing();

$drawingHashTable = new PHPExcel_HashTable();
$drawingHashTable->addFromSource($drawing->allDrawings($objPHPExcel));

for ($i = 0; $i < $drawingHashTable->count(); ++$i)
{
$memoryDrawing = $drawingHashTable->getByIndex($i);
if ($memoryDrawing instanceof PHPExcel_Worksheet_MemoryDrawing)
{
$filename = 'images/' . $memoryDrawing->getCoordinates() . '_' . $memoryDrawing->getHashCode() . '.jpg';
// 将图片存到指定的目录
imagejpeg($memoryDrawing->getImageResource(), $filename);
// 获得该图片所在的单元格
$cell = $memoryDrawing->getWorksheet()->getCell($memoryDrawing->getCoordinates());
// 将该单元格的值设置为单元格的文本加上图片的 img 标签
$cell->setValue($cell->getValue() . '<img src="' . $filename . '" />');
}
}
// 再处理将这些单元格的值存入数据库
// ... ...

相关阅读

关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网