php_zip
、php_xml
、php_gd2
函式庫。
<?php include_once "header.php"; require_once TADTOOLS_PATH . '/PHPExcel.php'; //引入 PHPExcel 物件庫 require_once TADTOOLS_PATH . '/PHPExcel/IOFactory.php'; //引入 PHPExcel_IOFactory 物件庫 $objPHPExcel = new PHPExcel(); //實體化Excel //----------內容-----------// header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename=文章備份.xls'); header('Cache-Control: max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->setPreCalculateFormulas(false); $objWriter->save('php://output'); exit;
$objPHPExcel->setActiveSheetIndex(0); //設定預設顯示的工作表 $objActSheet = $objPHPExcel->getActiveSheet(); //指定預設工作表為 $objActSheet $objActSheet->setTitle("文章列表"); //設定標題 $objPHPExcel->createSheet(); //建立新的工作表,上面那三行再來一次,編號要改
TYPE_BOOL
、TYPE_ERROR
、TYPE_FORMULA
、TYPE_INLINE
、TYPE_NULL
、TYPE_NUMERIC
、TYPE_STRING
$objActSheet ->setCellValue("A1", '編號') ->setCellValue("B1", '精選'); $objActSheet->setCellValueExplicit("C2", '0987654321',PHPExcel_Cell_DataType:: TYPE_STRING); $objActSheet->setCellValueByColumnAndRow(3, 1, '測試'); //直欄從0開始,橫列從1開始
$objActSheet->getColumnDimension('A')->setWidth(8); //固定寬度8 $objActSheet->getColumnDimension('B')->setAutoSize(true); //自動寬度 $objActSheet->getColumnDimensionByColumn(2)->setWidth(8);
$objActSheet->getRowDimension($i)->setRowHeight(60);
$objPHPExcel->getDefaultStyle()->getFont()->setName('微軟正黑體')->setSize(14); $objActSheet->getStyle('A1:J1')->getFont()->setBold(true)->getColor()->setARGB('00FFFFFF'); $objActSheet->getStyle('A1:J1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setARGB('00474747');
$objActSheet->mergeCells("A1:J1")->setCellValue("A1", '巷談集所有文章備份');
$objActSheet->setCellValue("A{$i}", '文章數'); $n = $i - 1; $objActSheet->setCellValue("B{$i}", "=COUNT(A3:A{$n})");
$objActSheet->getProtection()->setSheet(true); $objActSheet->getProtection()->setSort(true); $objActSheet->getProtection()->setInsertRows(true); $objActSheet->getProtection()->setFormatCells(true); $objActSheet->getProtection()->setPassword('1234');
HORIZONTAL_CENTER
、 HORIZONTAL_CENTER_CONTINUOUS
、 HORIZONTAL_GENERAL
、 HORIZONTAL_JUSTIFY
、 HORIZONTAL_LEFT
、 HORIZONTAL_RIGHT
、 VERTICAL_BOTTOM
、 VERTICAL_CENTER
、 VERTICAL_JUSTIFY
、 VERTICAL_TOP
$objActSheet->getStyle('A')->getAlignment() ->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER) //垂直置中 ->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //水平置中 $objActSheet->getStyle('F')->getAlignment()->setWrapText(true); //自動換行
getAllborders()
、getTop()
、getLeft()
、getRight()
、getBottom()
等位置,邊框的種類有:BORDER_DASHDOT
、 BORDER_DASHDOTDOT
、 BORDER_DASHED
、 BORDER_DOTTED
、 BORDER_DOUBLE
、 BORDER_HAIR
、 BORDER_MEDIUM
、 BORDER_MEDIUMDASHDOT
、 BORDER_MEDIUMDASHDOTDOT
、 BORDER_MEDIUMDASHED
、 BORDER_NONE
、 BORDER_SLANTDASHDOT
、 BORDER_THICK
、 BORDER_THIN
$objActSheet->getStyle("A1:J{$i}")->getBorders()->getAllborders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN)->getColor()->setRGB('000000');
function num2alpha($n){ for($r = ""; $n >= 0; $n = intval($n / 26) - 1) $r = chr($n%26 + 0x41) . $r; return $r; }
<h1 style="margin-top:60px;">匯入Excel</h1> <form action="index.php" method="post" class="form-inline" enctype="multipart/form-data" style="margin: 60px;"> <div class="form-group"> <label for="userfile">請選擇 xls 檔</label> <input type="file" name="userfile" class="form-control" id="userfile" placeholder="請選擇 xls 檔"> <input type="hidden" name="op" value="import_excel"> </div> <button type="submit" class="btn btn-default">匯入</button> </form>
$_FILES['userfile']['name']
來判斷匯入的檔案格式,以便選用正確的閱讀器
include_once TADTOOLS_PATH . '/PHPExcel/IOFactory.php'; if (preg_match('/\.(xlsx)$/i', $_FILES['userfile']['name'])) { $reader = PHPExcel_IOFactory::createReader('Excel2007'); } else { $reader = PHPExcel_IOFactory::createReader('Excel5'); }
$_FILES['userfile']['tmp_name']
)並讀取內容,$highestRow讓我們知道檔案裡面有幾列
$PHPExcel = $reader->load($_FILES['userfile']['tmp_name']); // 檔案名稱 $sheet = $PHPExcel->getSheet(0); // 讀取第一個工作表(編號從 0 開始) $highestRow = $sheet->getHighestRow(); // 取得總列數
for ($row = 3; $row <= $highestRow; $row++) { $v = array(); //讀取一列中的每一格 for ($col = 0; $col <= 10; $col++) { //讀取資料 } //寫入資料庫 $sql = "insert into $tbl (`sn`, `focus`, `topic_sn`, `sort`, `title`, `content`, `username`, `create_time`, `update_time`, `uid`) values('{$v[0]}' , '{$v[1]}', '{$v[2]}', '{$v[3]}', '{$v[4]}', '{$v[5]}', '{$v[6]}', '{$v[7]}', '{$v[8]}', '{$v[9]}')"; $xoopsDB->queryF($sql) or web_error($sql); }
//針對excel各種數據類型 function get_value_of_cell($cell = "") { if (is_null($cell)) { $value = $cell->setIterateOnlyExistingCells(TRUE); } else { if (strstr($cell->getValue(), '=')) { $value = $cell->getCalculatedValue(); } else if ($cell->getValue() instanceof PHPExcel_RichText) { $value = $cell->getValue()->getPlainText(); } else if (PHPExcel_Shared_Date::isDateTime($cell)) { //$value = $cell->getFormattedValue(); $value = PHPExcel_Shared_Date::ExcelToPHPObject($cell->getValue())->format('Y-m-d'); } else { $value = $cell->getValue(); } } return $value; }
if (PHPExcel_Shared_Date::isDateTime($sheet->getCellByColumnAndRow($col, $row))) { $val = PHPExcel_Shared_Date::ExcelToPHPObject($sheet->getCellByColumnAndRow($col, $row)->getValue())->format('Y-m-d H:i:s'); } else { $val = $sheet->getCellByColumnAndRow($col, $row)->getCalculatedValue(); } $v[$col] = $myts->addSlashes($val);
include_once XOOPS_ROOT_PATH."/modules/tadtools/jeditable.php"; $file="save.php"; $jeditable = new jeditable(); //此處加入欲直接點擊編輯的欄位設定 $jeditable->render();
//一般文字框 $jeditable->setTextCol("#id名稱", $file, '140px', '12px', "{'sn':$sn,'op' : 'save'}", "點擊編輯"); //大量文字框 $jeditable->setTextAreaCol("#id名稱", $file, '500px', '150px', "{'sn':$sn,'op' : 'save'}", "點擊編輯"); //下拉選單 $jeditable->setSelectCol("#id名稱", $file, "{'值1':'選項文字1' , '值2':'選項文字2' , 'selected':'預設值'}", "{'sn' : $sn , 'op' : 'save'}", "點擊編輯");
<p class="text-center" id="username"><{$snews.username}></p>
save.php
內容如下:
<?php include "header.php"; if (power_chk('', 1)) { $sql = "update " . $xoopsDB->prefix("snews") . " set `{$_POST['id']}`='{$_POST['value']}' where sn='{$_POST['sn']}'"; $xoopsDB->queryF($sql); echo $_POST['value']; }
save.php
執行後所echo的值會出現在該元件中。save.php
的額外變數值,以{}
包起來,每組變數的格式為「變數名稱:變數值」,每組變數用 , 隔開。json_encode($陣列,256)
函數將之變成所需選項格式。