Files
ua-userscripts/scripts/peoplesoft-excel-download/README.md
T
Glenn Goossens 3ddac4fa8f README: verplaats dev-stub en naamgeving naar AGENTS.md
README is voor gebruikers; dev-workflow instructies horen daar niet
in. CLAUDE.md verwijst met @AGENTS.md naar het vendor-agnostische
bestand.
2026-09-01 16:59:23 +02:00

67 lines
3.2 KiB
Markdown

# peoplesoft-excel-download
Laat de knop *Downloaden naar Excel* in de grids van PeopleSoft weer doen wat hij belooft. Het
script vangt de klik op en bouwt zelf een `.xlsx` uit wat er in de tabel staat.
De grid-knop van PeopleSoft zelf levert een bestand op dat Excel niet wil of niet goed leest.
Deze aanpak omzeilt de server volledig: wat je op je scherm ziet is wat in het bestand komt.
[**Installeren**](https://raw.githubusercontent.com/glgoose/ua-userscripts/main/scripts/peoplesoft-excel-download/peoplesoft-excel-download.user.js)
· gebeurt er niets, zie de [installatie-uitleg](../../README.md).
## Gebruik
- Klik in een grid gewoon op *Downloaden naar Excel*. Er verschijnt rechtsonder een groene
melding met de bestandsnaam en het aantal rijen.
- De bestandsnaam bestaat uit de paginatitel, de naam van de grid en een tijdstempel, dus twee
exports van dezelfde pagina overschrijven elkaar niet.
- Getallen komen als getal in het bestand, niet als tekst. `1.234,56`, `€ 1.234,56`, `(1.234,56)`
en een min achteraan worden alle vier correct gelezen volgens de nl-BE-notatie, en negatief
blijft negatief.
- De kopregel wordt vastgezet en de kolombreedtes worden op de inhoud gezet.
- Bij een grid die je kan bewerken, wordt de waarde uit het invoerveld of de dropdown gelezen,
niet de opmaak eromheen.
## Hoe het werkt
- De klik wordt opgevangen in de **capture**-fase op `document`, want PeopleSoft hertekent de
pagina constant met AJAX. Een handler op de knop zelf zou dat niet overleven.
- De knop-id (`<GRID>$hexcel$<n>` of `$hdown$`) verraadt bij welke grid hij hoort, en daarmee
wordt de bijbehorende container gevonden.
- Een PeopleSoft flex-grid is soms in twee tabellen gesplitst, een vastgezet deel en een
scrollend deel, met dezelfde rijen. Het script leest alle tabellen en plakt de kolommen per
rij-index weer aan elkaar.
- Het schrijven gebeurt met [SheetJS](https://sheetjs.com/) 0.18.5, via `@require` van cdnjs.
Die bibliotheek zit dus niet in dit bestand, wat verklaart waarom Tampermonkey deze rij als
honderden kB toont.
- Is SheetJS niet geladen, dan valt het script terug op een CSV met puntkomma's en een BOM, wat
Excel in een Nederlandstalige omgeving zonder importwizard opent.
## Beperkingen
- **Alleen wat in de DOM staat.** Een grid die zijn rijen pagineert, exporteert de pagina die je
ziet. Zet de grid eerst op alle rijen.
- **Getalherkenning is heuristiek.** Iets dat op een getal lijkt maar tekst hoort te blijven,
zoals een code met punten erin, kan als getal in het bestand komen.
- **`@grant GM_info`** staat in de kop maar wordt in de code niet gebruikt. Het staat er nog
omdat het de uitvoeringscontext bepaalt en het script daarmee werkt; weghalen verandert die
context en is niet getest.
## Ontwikkelen
Eén bestand, geen build. De enige dependency komt via `@require` binnen.
Tijdens het ontwikkelen laad je het script via een dev-stub in plaats van een geplakte kopie,
zie [Ontwikkelen](../../AGENTS.md#dev-stub-vs-gebruik).
```sh
node --check peoplesoft-excel-download.user.js
```
De commentaren in dit bestand zijn in het Engels, de andere scripts in deze repo zijn in het
Nederlands.
## Licentie
[GPL-3.0-or-later](../../LICENSE).