您的位置:首页 > 编程语言 > PHP开发

phpexcle 数据导入导出

2017-09-14 13:42 399 查看
/**
* 导出未回答的问题
* @date   2017-09-13
* @return bool or string
*/
function  onexport(){
set_time_limit(0);
$sql = 'select a.*,b.description from '. DB_TABLEPRE .'answer as a left join '.DB_TABLEPRE.'question as b on a.qid=b.id where a.content =""';
$export_data = $this->db->fetch_all($sql);
if(is_array($export_data)){
include_once ('./plugin/PHPExcel/PHPExcel/IOFactory.php');
// Create new PHPExcel object
$objPHPExcel = new PHPExcel();
// Set properties
$objPHPExcel->getProperties()->setCreator("ctos")
->setLastModifiedBy("ctos")
->setTitle("Office 2007 XLSX Test Document")
->setSubject("Office 2007 XLSX Test Document")
->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
->setKeywords("office 2007 openxml php")
->setCategory("Test result file");

// set width
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(10);
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(10);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(40);
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(40);
$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(40);

// 设置行高度
$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(22);
$objPHPExcel->getActiveSheet()->getRowDimension('2')->setRowHeight(20);

// 字体和样式
$objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setSize(10);
$objPHPExcel->getActiveSheet()->getStyle('A1:F1')->getFont()->setBold(true);
$objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);

$objPHPExcel->getActiveSheet()->getStyle('A1:F1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('A1:F1')->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

// 设置水平居中
$objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('A')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('B')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('C')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
$objPHPExcel->getActiveSheet()->getStyle('D')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
$objPHPExcel->getActiveSheet()->getStyle('E')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('F')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

// 表头
$elx_title ='未回答的问题';
$objPHPExcel->setActiveSheetIndex(0)
//->setCellValue('A1', $elx_title)
->setCellValue('A1', '回答ID')
->setCellValue('B1', '问题ID')
->setCellValue('C1', '提问者')
->setCellValue('D1', '问题')
->setCellValue('E1', '问题补充')
->setCellValue('F1', '回答');
// 内容
for ($i = 0, $len = count($export_data); $i < $len; $i++) {
$objPHPExcel->getActiveSheet(0)->setCellValue('A' . ($i + 2), $export_data[$i]['id']);
$objPHPExcel->getActiveSheet(0)->setCellValue('B' . ($i + 2), $export_data[$i]['qid']);
$objPHPExcel->getActiveSheet(0)->setCellValue('C' . ($i + 2), $export_data[$i]['author']);
$objPHPExcel->getActiveSheet(0)->setCellValue('D' . ($i + 2), $export_data[$i]['title']);
$objPHPExcel->getActiveSheet(0)->setCellValue('E' . ($i + 2), $export_data[$i]['description']);
$objPHPExcel->getActiveSheet(0)->setCellValue('F' . ($i + 2), $export_data[$i]['content']);
$objPHPExcel->getActiveSheet()->getStyle('A' . ($i + 2) . ':F' . ($i + 2))->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('A' . ($i + 2) . ':F' . ($i + 2))->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objPHPExcel->getActiveSheet()->getRowDimension($i + 2)->setRowHeight(16);
}

// Rename sheet
//$objPHPExcel->getActiveSheet()->setTitle($elx_title);

// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);
// 输出
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="' . $elx_title . '.xls"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
}
}
/**
* 导入回复问题的答案
* @date   2017-09-13
* @return bool or string
* 数据格式:
* array(5) {
[0]=>问题ID
[1]=>提问者
[2]=>问题
[3]=>问题补充
[4]=>回答
}
*/
protected function importAnswerUpdateData($files){
header("Content-type: text/html; charset=utf-8");
if (!isset($files['importdata']['tmp_name']) && !$files['importdata']['tmp_name']) {
echo  '请选择导入的文件';exit();
}
$path = './importdata/' . date('Ymd',time());
if(!is_dir($path)){
mkdir($path,0777,true);
}
$file_name = $path.'/'.date('YmdHis',time()).'.xls';
$flag = move_uploaded_file($files['importdata']['tmp_name'],$file_name);
if($flag){
set_time_limit(0); //设置页面等待时间
include_once ('./plugin/PHPExcel/PHPExcel/IOFactory.php');
//文件的扩展名
$ext = strtolower(pathinfo($file_name,PATHINFO_EXTENSION));
if($ext == 'xlsx'){
$reader = PHPExcel_IOFactory::createReader('Excel2007');
}elseif($ext == 'xls'){
$reader = PHPExcel_IOFactory::createReader('Excel5');
}
$PHPExcel = $reader->load($file_name); // 文档名称
$objWorksheet = $PHPExcel->getActiveSheet();
$highestRow   = $objWorksheet->getHighestRow();       // 取得总行数
// 一次读取一列
$res = array();
for ($row = 2; $row <= $highestRow; $row++) {
for ($column = 0; $column<6; $column++) {
$val = $objWorksheet->getCellByColumnAndRow($column, $row)->getValue();
if($val){
$res[$row-2][$column] = $val;
}
}
}
//更改每条数据
$count = 0;
foreach ($res as $value){
try{
$this->db->query('set autocommit=0');
$this->db->query('start transaction');
//更新answer 表的 回答
if($value[5]){
$this->db->query("UPDATE " . DB_TABLEPRE . "answer   SET content='".$value[5]."', time=".time()." WHERE id=$value[0] ");
}
//更新question 表的 问题补充
if ($value[4]) {
$this->db->query("UPDATE " . DB_TABLEPRE . "question SET description='" . $value[4] . "' WHERE id=$value[1] ");
}
$this->db->query('commit');
$this->db->query('set autocommit=1');
$count ++;
}catch (Exception $e){
$this->db->query('ROLLBACK');
echo $e->getMessage();
}
}
echo '<script>alert("总共更新了 : 【'.$count.'】条数据");</script>';
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: