Synes jeg har prøvet alle metoder, men jeg kan ikke få et datofelt til at blive vist i datoformat ved eksport til Excel.
Kolonnen "Startdato" er i SQL server formateret som Date. Datoen vises korrekt på siden i format d-m-Y, men alligevel vises den i Excel som f.eks. "2023-11-01 00:00:00".
Kodedel der indsætter data i Excel: $rowIndex = 2; foreach ($rows as $row) { $column = 'A'; foreach ($row as $cell) { $sheet->setCellValue($column . $rowIndex, $cell); $column++; } $rowIndex++; }
Jeg har prøvet med andre datoer før uden at have problemer. Så jeg ved ikke helt hvad der er anderledes her
Nu er der rimelig meget, der skal gættes på, med det korte uddrag af koden. Men et forsigtigt bud kunne måske være, hvis variablen rummer en datetime i stedet for en date?
Hvis ja, kunne en løsning måske være: $cell->format( 'd-m-Y' ); eller date_format($cell,"Y-m-d")
Får denne fejl: Uncaught TypeError: date_format(): Argument #1 ($object) must be of type DateTimeInterface
Jeg kan lige smide query ind her hvis det hjælper: SELECT DISTINCT l1.Medarbejdernr, Navn, Ansatdato, Arbejdssted, Stilling, '' AS Kilde, NULL AS Type, NULL AS Plustrin, NULL AS Aarligtbeloeb, NULL AS Maanedsloen, NULL AS Betegnelse, NULL AS Startdato, NULL AS Beloeb FROM tabel1 L1 WHERE l1.Medarbejdernr NOT IN ( SELECT l2.Medarbejdernr FROM tabel2 l2 WHERE l2.Startdato >= DATEFROMPARTS(YEAR(GETDATE()) - 5, 1, 1) AND l2.startdato < DATEFROMPARTS(YEAR(GETDATE()), 1, 1) AND Aftaleform = 'Individuel aftale') UNION ALL SELECT L.Medarbejdernr, L.Navn, L.Ansatdato, L.Arbejdssted, L.Stilling, 'Fast løn' AS Kilde, L.Type, L.Plustrin, L.Aarligtbeloeb, L.Maanedsloen, L.Betegnelse, FORMAT(L.Startdato, 'dd-MM-yyyy'), NULL AS Beloeb FROM tabel l WHERE l.Startdato >= DATEFROMPARTS(YEAR(GETDATE()) - 5, 1, 1) AND startdato < DATEFROMPARTS(YEAR(GETDATE()), 1, 1) AND Aftaleform = 'Individuel aftale' UNION ALL SELECT E.Medarbejdernr, E.Navn, Ansatdato, E.Arbejdssted, E.Stilling, 'Engangstillæg' AS Kilde, NULL AS Type, NULL AS Plustrin, NULL AS Aarligtbelob, NULL AS Maanedsloen, E.Bemaerkning, E.Startdato, E.Beloeb FROM tabel E WHERE startdato > DATEADD(YEAR, -5, CAST(YEAR(GETDATE()) AS VARCHAR) + '-01-01') AND startdato < DATEFROMPARTS(YEAR(GETDATE()), 1, 1) ORDER BY Arbejdssted, Startdato DESC
Jeg tænker, at den fejlmelding betyder at min analyse ikke var rigtig. Den er nok ikke gemt som datetime, og derfor får du en fejlmelding. Så derfor bør du nok i første omgang tilbageføre til det oprindelige.
Nu er jeg ikke selv superstiv i Excel, men måske kunne problemet stamme fra, at Excel foretrækker at få datoer i den engelske udgave. Altså "yyyy-MM-dd" eller "yyyy/MM/dd"? Jeg kan se at i SQL-kaldet beder du om dem efter den danske model: "dd-MM-yyyy". Det kan du jo prøve at fifle lidt med.
Ellers hvis det stadig bøvler, så prøv evt. at indføre en "echo $cell;" lige før eller efter denne linje: $sheet->setCellValue($column . $rowIndex, $cell);
Det vil kunne give dig et indtryk af, hvordan din variabel ser ud undervejs i processen. Og måske et bud på, hvad der går galt...
Uden at være sikker mener jeg at FORMAT laver en nvarchar type hvis ikke du selv definerer typen. Det vil gøre den til text i excel. Prøv med FORMAT(L.Startdato, 'dd-MM-yyyy') as date hvor date så bliver typen
Problemet er løst. Problematikken viste sig at være blanke felter der forårsagede konverteringsfejlen. Med en if sætning, blev det løst
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.