您好,欢迎访问一九零五行业门户网

php生成excel文件打开报错?!!!

public function check_daochu($data) { ob_end_clean(); //***这里再加一个 $this->load->library('phpexcel'); $this->load->library('phpexcel/iofactory'); $objphpexcel = new phpexcel(); $objwriter = new phpexcel_writer_excel2007($objphpexcel); //设置表头 $this->excel_bt($objphpexcel, $data['bt_data']); //导出的类容 $this->excel_lr($objphpexcel, $data['data']); //设置单元格的宽度 $objphpexcel->getactivesheet()->getcolumndimension('b')->setwidth(15); foreach ($data['hb_data'] as $key => $value) { //合并单元格 $objphpexcel->getactivesheet()->mergecells($key . ':' . $value); } //水平垂直居中设置 $objphpexcel->getactivesheet()->getstyle('a1')->getalignment()->setvertical(phpexcel_style_alignment::vertical_center); $objphpexcel->getactivesheet()->getstyle('a1')->getalignment()->sethorizontal(phpexcel_style_alignment::horizontal_center); $fieldname = iconv('utf-8', 'gb2312', date(y-m-d, time()) . '_' . $data['bt_data']['a1']); ob_end_clean(); header(pragma: public); header(expires: 0); header(cache-control:must-revalidate, post-check=0, pre-check=0); header(content-type:application/force-download); header(content-type:application/vnd.ms-execl); header(content-type:application/octet-stream); header(content-type:application/download); header('content-disposition:attachment;filename=' . $fieldname . '.xlsx'); header(content-transfer-encoding:binary); $objwriter->save('php://output'); } //设置导出标题的方法 public function excel_bt($objphpexcel, $bt_data) { foreach ($bt_data as $key => $value) { $objphpexcel->getactivesheet()->setcellvalue($key, $value); } } //设置导出的内容 public function excel_lr($objphpexcel, $select_data) { $i = 3; $data = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'); foreach ($select_data as $key => $value) { $j = 0; foreach ($value as $k => $v) { $objphpexcel->getactivesheet()->setcellvalue($data[$j] . $i, $v); $j++; } $i++; } }

生成excel打开文件,报下图的错误?何解呢?(更让人费解的是,同样的代码块在另一个项目中完美运行!)
补充:自己找了问题,做了如下尝试,但是没一个可行的
我生成.txt文件,打开时发现乱码,于是我想到字符编码的问题,于是在check_daochu这个方法中,把data这个数组用iconv函数转换编码,不行!
在头文件里那里加入header(content-type:application/vnd.ms-execl;charset=utf-8);,不行!
把另外一个项目中相同的类库和代码块都覆盖过来,不行!
打开.txt文件是这样子的
我擦、问题解决了!!!缓冲区的问题,看了这个文章才有一点明白,我明明在输出前加了ob_end_clean了,但是这还不够,还要在生成excel内容前加一个ob_end_clean,也就是在check_daochu方法的第一行。不知道为什么这里还要加一个,但是问题也已经解决了。
回复内容: public function check_daochu($data) { ob_end_clean(); //***这里再加一个 $this->load->library('phpexcel'); $this->load->library('phpexcel/iofactory'); $objphpexcel = new phpexcel(); $objwriter = new phpexcel_writer_excel2007($objphpexcel); //设置表头 $this->excel_bt($objphpexcel, $data['bt_data']); //导出的类容 $this->excel_lr($objphpexcel, $data['data']); //设置单元格的宽度 $objphpexcel->getactivesheet()->getcolumndimension('b')->setwidth(15); foreach ($data['hb_data'] as $key => $value) { //合并单元格 $objphpexcel->getactivesheet()->mergecells($key . ':' . $value); } //水平垂直居中设置 $objphpexcel->getactivesheet()->getstyle('a1')->getalignment()->setvertical(phpexcel_style_alignment::vertical_center); $objphpexcel->getactivesheet()->getstyle('a1')->getalignment()->sethorizontal(phpexcel_style_alignment::horizontal_center); $fieldname = iconv('utf-8', 'gb2312', date(y-m-d, time()) . '_' . $data['bt_data']['a1']); ob_end_clean(); header(pragma: public); header(expires: 0); header(cache-control:must-revalidate, post-check=0, pre-check=0); header(content-type:application/force-download); header(content-type:application/vnd.ms-execl); header(content-type:application/octet-stream); header(content-type:application/download); header('content-disposition:attachment;filename=' . $fieldname . '.xlsx'); header(content-transfer-encoding:binary); $objwriter->save('php://output'); } //设置导出标题的方法 public function excel_bt($objphpexcel, $bt_data) { foreach ($bt_data as $key => $value) { $objphpexcel->getactivesheet()->setcellvalue($key, $value); } } //设置导出的内容 public function excel_lr($objphpexcel, $select_data) { $i = 3; $data = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'); foreach ($select_data as $key => $value) { $j = 0; foreach ($value as $k => $v) { $objphpexcel->getactivesheet()->setcellvalue($data[$j] . $i, $v); $j++; } $i++; } }

生成excel打开文件,报下图的错误?何解呢?(更让人费解的是,同样的代码块在另一个项目中完美运行!)
补充:自己找了问题,做了如下尝试,但是没一个可行的
我生成.txt文件,打开时发现乱码,于是我想到字符编码的问题,于是在check_daochu这个方法中,把data这个数组用iconv函数转换编码,不行!
在头文件里那里加入header(content-type:application/vnd.ms-execl;charset=utf-8);,不行!
把另外一个项目中相同的类库和代码块都覆盖过来,不行!
打开.txt文件是这样子的
我擦、问题解决了!!!缓冲区的问题,看了这个文章才有一点明白,我明明在输出前加了ob_end_clean了,但是这还不够,还要在生成excel内容前加一个ob_end_clean,也就是在check_daochu方法的第一行。不知道为什么这里还要加一个,但是问题也已经解决了。
猜测$objphpexcel需要引用传参
其它类似信息

推荐信息