17. september 2024 - 14:48
Der er
8 kommentarer
Datoformat ved eksport til Excel
Hej
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
17. september 2024 - 15:11
#1
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")
18. september 2024 - 19:59
#5
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
19. september 2024 - 11:25
#6
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...