1.csv導出
$where = stripcslashes($_GET['where']);
header('Content-type:text/csv');
header('Content-Disposition:attachment;filename=' . date('Y-m-d-His-') . rand(1000, 9999) . '.csv');
$head = array(_('ID'), _('日期'), _('總條數'), _('單價'), _('總額'));
echo '"' . iconv('UTF-8', 'gbk', implode('","', $head)) . '"' . "\r\n";
$data = Db::name('sms_stat')->where($where)->select();
foreach ($data as $key => $val) {
$csv = [];
$csv['id'] = $val['id'];
$csv['date'] = strstr($val['date'], ' ', true);
$csv['count'] = $val['count'];
$csv['unitprice'] = $val['unitprice'];
$csv['total'] = $val['total'];
echo '"' . implode('","', $csv) . '"' . "\r\n";
}
2.xlsxwriter導出
$where = ' 1=1 ';
$begin_month = input('begin_month');
if (!empty($begin_month)) {
$where .= " and month >= '" . $begin_month . "'";
}
$end_month = input('end_month');
if (!empty($end_month)) {
$where .= " and month <= '" . $end_month . "'";
}
if (!empty($begin_month) || !empty($end_month)) {
if (empty($begin_month)) {
$filename = $end_month . "之前.xlsx";
} else if (empty($end_month)) {
$filename = $begin_month . "之後.xlsx";
} else {
$filename = $begin_month . "至" . $end_month . ".xlsx";
}
header('Content-disposition: attachment; filename="' . \XLSXWriter::sanitize_filename($filename) . '"');
header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate');
header('Pragma: public');
$heads = ['ID' => 'string', '月份' => 'string', '總計數' => 'string', '單價' => 'string', '總費用' => 'string'];
$fields = ['id', 'month', 'count', 'unitprice', 'total'];
$writer = new \XLSXWriter();
$writer->writeSheetHeader('Sheet1', $heads);
$sms_stat_month = new SmsStatMonth();
$sms_stat_month->field($fields)->where($where)->chunk(1000, function ($data) use ($fields, $writer) {
foreach ($data as $key => $rows) {
$writer->writeSheetRow('Sheet1', $rows->toArray());
}
});
$writer->writeToStdOut();
exit(0);
}
3.PHPExcel_IOFactory導出
set_time_limit(1200);
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="' . date('Ymd-His-') . rand(1000, 9999) . '.xlsx"');
header("Content-Transfer-Encoding:binary");
$tableid = input('tableid');
$dict = AdminDict::get(['name' => $_GET['type'], 'parent_number' => 'c926cecf9156e3d2d1ecc9ec43ec6be6']);
if (empty($dict)) {
echo json_encode(['success' => false, 'msg' => '所屬項目填寫有誤!']);
exit;
}
$order_tpl = CrmOrderExportTpl::all(['tpl_type' => $dict->number]);
$head = ['ID'];
$fields_export = [];
$fields_export[] = 'id';
foreach ($order_tpl as $item) {
$head[] = $item->excel_name;
$field = AdminField::get(['alias' => $item->field, 'tableid' => $tableid]);
$fields_export[] = $field->fieldid;
}
$fields = db('admin_field')->where(['tableid' => $tableid])->select();
$fields = setSelectKey($fields, 'fieldid');
$fields_sql = ['id'];
foreach ($fields_export as $val) {
if ($val != 'id') {
$fields_sql[] = $fields[$val]['alias'];
$fields[$val]['setting'] = string2array($fields[$val]['setting']);
//$head[] = $fields[$val]['name'];
}
}
$fields_sql = implode(',', $fields_sql);
$where = $_GET['where'];
$tablename = $this->model_main->getTableName($tableid);
$cacheMethod = \PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;
$cacheSettings = array('memoryCacheSize' => '16MB');
\PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
$PHPExcel = new \PHPExcel();
$PHPSheet = $PHPExcel->getActiveSheet();
$PHPExcel->setActiveSheetIndex(0);
$key = 0; // 設置表頭
foreach ($head as $k => $v) {
$colum = \PHPExcel_Cell::stringFromColumnIndex($key);
$PHPSheet->getColumnDimension($colum)->setWidth(40);
$PHPSheet->getStyle($colum . '1')->applyFromArray(
array(
'fill' => array(
'type' => \PHPExcel_Style_Fill::FILL_SOLID,
'color' => array('rgb' => '92D050')
)
)
);
$PHPSheet->getStyle($colum)->applyFromArray(
array(
'alignment' => array(
'horizontal' => \PHPExcel_Style_Alignment::HORIZONTAL_LEFT,
)
)
);
//設置首行
$PHPExcel->setActiveSheetIndex(0)->setCellValue($colum . '1', $v);
$PHPSheet->freezePaneByColumnAndRow(0, 2);//設置首行固定
$key += 1;
}
$column = 2;
Db::name($tablename)->field($fields_sql)->where($where)->chunk(1000, function ($data) use ($tableid, &$column, $fields, $PHPSheet) {
$data = $this->model_main->model_list($tableid, $data, $fields);
foreach ($data as $key => $rows) { // 行寫入
$span = 0;
foreach ($rows as $keyName => $value) { // 列寫入
if (substr($keyName, 0, 1) === '_' && substr($keyName, -1) === '_') {
continue;
}
$PHPSheet->setCellValue(\PHPExcel_Cell::stringFromColumnIndex($span) . $column, $value . "\t");
$span++;
}
$column++;
}
});
$PHPWriter = \PHPExcel_IOFactory::createWriter($PHPExcel, "Excel2007");
$PHPWriter->save("php://output");
exit;