fastadmin 数据导出,设置excel行高和限制图片大小
生活随笔
收集整理的這篇文章主要介紹了
fastadmin 数据导出,设置excel行高和限制图片大小
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
起因是一個項目的圖片導出到excel之后太大了,需要調整一下大小,這個fastadmin自帶的前端導出就可以實現,但是也是比較復雜的,需要搞清楚圖片的代碼
在require-table.js這個文件里面找到exportOptions,添加一下代碼
htmlContent: true, // 處理導出圖片 onCellHtmlData: function ($cell, row, col, htmlData) {var html = $.parseHTML(htmlData);var inputidx = 0;var selectidx = 0;var result = '';$.each(html, function () {if ($(this).is("input")) {result += $cell.find('input').eq(inputidx++).val();}else if ($(this).is("select")) {result += $cell.find('select option:selected').eq(selectidx++).text();}else if ($(this).is("a")) {// 這里就是設置圖片大小的代碼if($(this).context.childNodes[0].tagName=='IMG'){let str = $(this).context.childNodes[0]str.width = "60";str.height = "60"; }result += $(this).html();} else {if (typeof $(this).html() === 'undefined') {result += $(this).text();}else if (jQuery().bootstrapTable === undefined || ($(this).hasClass('filterControl') !== true && $cell.parents('.detail-view').length === 0)) {result += $(this).html();}}});return result; },但是如果想要設置excel的行高是不夠的,需要自定義服務端導出才可以
首先,設置界面導出按鈕樣式
在相關控制器的index.html添加,記得改控制器的名稱
<a href="javascript:;" class="btn btn-success btn-export {:$auth->check('question/export')?'':'hide'}" title="{:__('Export')}" id="btn-export-file"><i class="fa fa-download"></i> {:__('Export')}</a>然后在該js文件里,在var table = $("#table");后面添加,這里也要記得修改控制器的名稱
$(document).on("click", ".btn-export", function () {var ids = Table.api.selectedids(table);var page = table.bootstrapTable('getData');var all = table.bootstrapTable('getOptions').totalRows;console.log(ids, page, all);Layer.confirm("請選擇導出的選項<form action='" + Fast.api.fixurl("question/export") + "' method='post' target='_blank'><input type='hidden' name='ids' value='' /><input type='hidden' name='filter' ><input type='hidden' name='op'><input type='hidden' name='search'><input type='hidden' name='columns'></form>", {title: '導出數據',btn: ["選中項(" + ids.length + "條)", "本頁(" + page.length + "條)", "全部(" + all + "條)"],success: function (layero, index) {$(".layui-layer-btn a", layero).addClass("layui-layer-btn0");}, yes: function (index, layero) {submitForm(ids.join(","), layero);return false;},btn2: function (index, layero) {var ids = [];$.each(page, function (i, j) {ids.push(j.id);});submitForm(ids.join(","), layero);return false;},btn3: function (index, layero) {submitForm("all", layero);return false;}}) }); var submitForm = function (ids, layero) {var options = table.bootstrapTable('getOptions');console.log(options);var columns = [];$.each(options.columns[0], function (i, j) {if (j.field && !j.checkbox && j.visible && j.field != 'operate') {columns.push(j.field);}});var search = options.queryParams({});$("input[name=search]", layero).val(options.searchText);$("input[name=ids]", layero).val(ids);$("input[name=filter]", layero).val(search.filter);$("input[name=op]", layero).val(search.op);$("input[name=columns]", layero).val(columns.join(','));$("form", layero).submit(); };最后在php文件里,添加導出方法
public function export(){if ($this->request->isPost()) {set_time_limit(0);$search = $this->request->post('search');$ids = $this->request->post('ids');$filter = $this->request->post('filter');$op = $this->request->post('op');$columns = $this->request->post('columns');$spreadsheet = new Spreadsheet();$spreadsheet->getProperties()->setCreator("FastAdmin")->setLastModifiedBy("FastAdmin")->setTitle("標題")->setSubject("Subject");$spreadsheet->getDefaultStyle()->getFont()->setName('Microsoft Yahei');$spreadsheet->getDefaultStyle()->getFont()->setSize(12);$worksheet = $spreadsheet->setActiveSheetIndex(0);$whereIds = $ids == 'all' ? '1=1' : ['id' => ['in', explode(',', $ids)]];$this->request->get(['search' => $search, 'ids' => $ids, 'filter' => $filter, 'op' => $op]);list($where, $sort, $order, $offset, $limit) = $this->buildparams();$line = 1;//設置過濾方法$this->request->filter(['strip_tags']);//如果發送的來源是Selectpage,則轉發到Selectpageif ($this->request->request('keyField')) {return $this->selectpage();}list($where, $sort, $order, $offset, $limit) = $this->buildparams();$total = $this->model->where($whereIds)->order($sort, $order)->count();$list = $this->model->where($whereIds)->order($sort, $order)->limit($offset, $limit)->select(); $list = collection($list)->toArray();$result = array("total" => $total, "rows" => $list);$first = array_keys($list[0]);foreach ($first as $index => $item) {$worksheet->setCellValueByColumnAndRow($index, 1, __($item));}$worksheet = $spreadsheet->getActiveSheet(); //指向激活的工作表$worksheet->getColumnDimension('B')->setWidth(50);$worksheet->getColumnDimension('H')->setWidth(15);$worksheet->getColumnDimension('J')->setAutoSize(true);$worksheet->getColumnDimension('K')->setWidth(50);$worksheet->getColumnDimension('L')->setWidth(15);$worksheet->getColumnDimension('N')->setWidth(20);$worksheet->getColumnDimension('O')->setWidth(20);//設置表頭$worksheet->setCellValue('A1', '序號');$worksheet->setCellValue('B1', '問題圖片');$worksheet->setCellValue('C1', '所屬村(社區)');$worksheet->setCellValue('D1', '區域分類');$worksheet->setCellValue('E1', '問題分類');$worksheet->setCellValue('F1', '角色');$worksheet->setCellValue('G1', '發現人');$worksheet->setCellValue('H1', '發現人手機號');$worksheet->setCellValue('I1', '地點');$worksheet->setCellValue('J1', '描述');$worksheet->setCellValue('K1', '整改圖片');$worksheet->setCellValue('L1', '整改人手機號');$worksheet->setTitle('數據表');foreach ($list as $key => &$val) {$i=$key+2;//表格是從2開始的$worksheet->getRowDimension($i)->setRowHeight(100);//多個圖片需用遍歷new// 多圖導出$num1 = 10;if (!empty($val['images'])) {$images = explode(",", $val['images']);foreach ($images as $k => $v){// 獲取本地文件夾路徑$str = explode('uploads',$v);$str2 = explode('/',$str[1]);$dir = ROOT_PATH . 'public/uploads/' .$str2[0];$image = ROOT_PATH . 'public/uploads' .$str[1];// 過濾非文件類型if (!empty($file_info['basename'])) {$basename = $file_info['basename'];// 進行檢測文件是否存在is_dir($dir) OR mkdir($dir, 0777, true);$res = file_put_contents($dir . $basename, file_get_contents($image));// 引入操作圖片類$drawings[$i] = new Drawing();$drawings[$i]->setResizeProportional(false); // TODO 此處順序不可調,因為導出默認是按原圖像縮放的,設置成false才可以設置成可控制的寬度,要注意哦!$drawings[$i]->setName('圖片');$drawings[$i]->setDescription('圖片');$drawings[$i]->setPath($image);$drawings[$i]->setWidth(60);$drawings[$i]->setHeight(60);$drawings[$i]->setOffsetX($num1);$drawings[$i]->setOffsetY(10);$drawings[$i]->setCoordinates('B' . $i);$drawings[$i]->setWorksheet($worksheet);}$num1 = $num1 + 70; // 增加每張圖之間的間距}}else{$worksheet->setCellValue('B' . $i, '');}//向模板表中寫入數據$worksheet->setCellValue('A'.$i,$key+1);// $worksheet->setCellValue('B'.$i,$val['images']);$worksheet->setCellValue('C'.$i,$val['village_name']);$worksheet->setCellValue('D'.$i,$val['type_area_name']);$worksheet->setCellValue('E'.$i,$val['type_question_name']);$worksheet->setCellValue('F'.$i,$val['group_name']);$worksheet->setCellValue('G'.$i,$val['personnel_user']['username']);$worksheet->setCellValue('H'.$i,$val['personnel_user']['mobile']);$worksheet->setCellValue('I'.$i,$val['address']);$worksheet->setCellValue('J'.$i,$val['description']);// $worksheet->setCellValue('K'.$i,$val['corrective_images']);$worksheet->setCellValue('N'.$i,$i,$val['personnel_user_two']['username']);$worksheet->setCellValue('L'.$i,$val['personnel_user_two']['mobile']);$worksheet->setCellValue('M'.$i,$val['status_name']);$worksheet->setCellValue('N'.$i,$val['create_date']);$worksheet->setCellValue('O'.$i,$val['correctivetime']);} $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xls');//下載文檔header('Content-Type: application/vnd.ms-excel');header('Content-Disposition: attachment;filename="'. date('Y-m-d') .'_test'.'.xls"');header('Cache-Control: max-age=0');$writer = new Xlsx($spreadsheet);$writer->save('php://output'); return;} }批量修改行高加上這句代碼
$spreadsheet->getActiveSheet()->getDefaultRowDimension()->setRowHeight(100);如果是想要修改除了第一行的行高,就在循環里面添加
$spreadsheet->getActiveSheet()->getDefaultRowDimension($i)->setRowHeight(100);修改單元格寬度
$spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(15);單元格寬度自適應
$spreadsheet->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);總結
以上是生活随笔為你收集整理的fastadmin 数据导出,设置excel行高和限制图片大小的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Excel行高与像素值,列宽与像素值之间
- 下一篇: 计算机软件里的字体,软件里面的字体大小