WebHU - Programozási kérdések és válaszok

Az excelsheet oszlopok formátumának konvertálása php-ban nem működik

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

  1. Dátum az Excel munkalapon ide írja be a kép leírását

    1. Be- és kilépés az Excel-táblázatban Írja be ide a kép leírását

    2. Amikor a felhasználó felkeresi a webhelyet, és feltölti ezt az Excel-lapot Írja be ide a kép leírását

    3. Ezután megnyílik egy felugró ablak adja meg itt a kép leírását

    4. Ezután a felhasználó böngészi az excel lapot, majd megmutatom az Excel nézetet, a nézet rossz adja meg itt a kép leírását

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.

adja meg itt a kép leírását

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


Válaszok:


1

Az MS Excel lebegő értékként, soros időbélyegként tárolja a dátumokat, az 1900. január 1-je óta eltelt napok számát (vagy 1904. január 1-je óta, ha a fájl a Mac-naptárt használja), és a cella számformátummaszkjaként jeleníti meg formázott dátum.

A PHPExcel egy sor módszert biztosít az MS Exce szerializált időbélyeg és a unix időbélyegek vagy PHP DateTime objektumok közötti konvertáláshoz

$unixTimestamp = PHPExcel_Shared_Date::ExcelToPHP($excelTimestampValue);

konvertálja az MS Excel időbélyegét Unix időbélyegzővé

$phpDateTimeObject = PHPExcel_Shared_Date::ExcelToPHPObject($excelTimestampValue);

konvertálja az MS Excel időbélyegét PHP DateTime objektummá

Ezután használhatja a PHP szabványos date() függvényét vagy a DateTime objektum format() metódusát az érték tetszés szerinti formázásához.

$excelTimestamp = PHPExcel_Shared_Date::ExcelToPHPObject($phpDateTimeObject);
$excelTimestamp = PHPExcel_Shared_Date::ExcelToPHPObject($unixTimestamp);

vagy egy unix időbélyeget vagy egy PHPP DateTime objektumot konvertál MS Excel soros időbélyeg értékké

Ha meg akarja változtatni az MS Excel soros időbélyegzőjének táblázatban való megjelenítését, akkor olyan Excel formátumú maszkot kell használnia, amely dátum/idő maszknak is megfelel... A PHPExcel_Style_NumberFormat::FORMAT_GENERAL a nem formátummaszk a dátumokhoz/időpontokhoz

17.09.2017
  • Kérem, mondja meg, hogyan tehetem ezt meg a kódomban ... mert minden oszlopot és sort dinamikusan kaptam 17.09.2017
  • Mivel tudja, mely cellák tartalmaznak dátumokat, lekéri a cellaértéket a $objWorksheet->getCellByColumnAndRow($col, $row)->getValue() használatával, és az eredményt argumentumként adja át a PHPExcel_Shared_Date::ExcelToPHPObject()-nak, lekérve az eredményt, majd a DateTime objektum format() metódusával megmondja, hogyan szeretné megjeleníteni az eredményt. 17.09.2017
  • Alternatív megoldásként használhatja a getFormattedValue() 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
  • köszönöm ... a második megjegyzésed működik nekem ... tökéletesen ... szerkeszted a válaszodat ... hogy ezt elfogadhassam 18.09.2017
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..