A staff attendance
-n dolgozom. A felhasználó feltölthet jelenléti ívet, és a rendszerem megjeleníti a jelenléti excel lapot a felhasználónak, majd el tudja menteni az adatbázisba. Az Excel-lap sikeres adatbázisba mentéséből származó értékek.
A probléma az, hogy a felhasználó bármilyen formátumban hozzáadhat rekordot az Excel táblázat oszlopaihoz, de amikor a PHP-be belépek, a dátumformátum rossz lesz.
pl. amikor a felhasználó a jelenléti dátumot adja meg az oszlopban, az oszlop formátuma date
, és amikor meg tud spórolni a túllépési időt, akkor számformátumú lehet, és amikor a felhasználó feltölti ezt az Excel lapot, a dátum előnézete unix time stamp
.
Itt vannak példák képekben
A fenti képen látható, hogy a dátum unix időbélyegzőre, valamint az idő be- és kikapcsolása numerikusan történik.
Ezt a nézetet szeretném, ha a felhasználó feltölthet egy Excel lapot.
Szóval remélem megérted a problémámat és azt, hogy mit akarok.
Íme a feltöltési és megtekintési excel kódom:
$excel_file = $_FILES['file']['name'];
$target = SERVERPATH . 'assets/attendance_excel/';
$ext = pathinfo($excel_file, PATHINFO_EXTENSION);
$filename = rand() . date("YmdHis");
move_uploaded_file($_FILES['file']['tmp_name'], $target . $filename . '.' . $ext);
include(EXCEL_CLASS);
$inputFileName = $target . $filename . '.' . $ext;
// chmod($inputFileName,0777);
try {
$objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
} catch (Exception $e) {
die('Error loading file "' . pathinfo($inputFileName, PATHINFO_BASENAME) . '": ' . $e->getMessage());
}
$objWorksheet = $objPHPExcel->getActiveSheet();
// $objWorksheet->getStyle('A1:E433')->getNumberFormat()->setFormatCode('Text');
$highestRow = $objWorksheet->getHighestRow(); // e.g. 10
$highestColumn = $objWorksheet->getHighestDataRow();
$highestColumn = $objWorksheet->getHighestColumn(); // e.g 'F'
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); // e.g. 5
$td_data = '';
$row_no = 0;
for ($row = 1; $row <= $highestRow; ++$row) {
$check_empty_column = 0;
for ($col = 0; $col <= $highestColumnIndex; ++$col) {
if ($objWorksheet->getCellByColumnAndRow($col, $row)->getValue() == null) {
$check_empty_column++;
}
}
if ($check_empty_column < $highestColumnIndex) {
for ($col = 0; $col < $highestColumnIndex; ++$col) {
$td_data .= '<td>' . $objWorksheet->getCellByColumnAndRow($col, $row)->getValue() . '</td>';
}
}
$tr_data[$row_no] = $td_data;
$td_data = '';
$row_no++;
}
$data_all = array(
'data' => $tr_data,
't_col' => $highestColumnIndex,
'name' => $filename . '.' . $ext
);
echo json_encode($data_all);
Én is sokat keresgéltem ezzel kapcsolatban, és találtam valami ehhez hasonlót: setFormatCode
, PHPExcel_Style_NumberFormat::FORMAT_GENERAL
stb, de nekem nem működik. Megteszem a tőlem telhetőt.
Tehát kérem, adjon megoldást erre a problémára.
Megjegyzés: Nem korlátozhatom a felhasználót, hogy konvertálja az oszlopokat, és adatokat adjon hozzá.
Remélem megérted a kérdésem
$objWorksheet->getCellByColumnAndRow($col, $row)->getValue()
használatával, és az eredményt argumentumként adja át aPHPExcel_Shared_Date::ExcelToPHPObject()
-nak, lekérve az eredményt, majd a DateTime objektumformat()
metódusával megmondja, hogyan szeretné megjeleníteni az eredményt. 17.09.2017getFormattedValue()
getValue()
helyett, hogy megmondja a PHPExcelnek, hogy az eredményt előre formázottan adja vissza a táblázatban beállított számformátummaszk szerint. 17.09.2017