Læs en CSV-fil ind i en SharePoint-liste med Power Automate
En CSV-fil lagt i et dokumentbibliotek bliver til listeelementer — én række ad gangen — med split, skip og Parse JSON og uden premiumhandlinger.
Power Automate har ingen handling, der læser en CSV-fil. Filens indhold er bare tekst, så den kan deles op i linjer og felter med udtryk, og hver linje kan blive til et element på en liste. Det kræver kun standardhandlinger.
Opsætning#
- Et dokumentbibliotek, fx
CSVDropoff, hvor filerne lægges. Det får en valgkolonneStatusmed værdierne Ny, I gang og Færdig. - En liste, fx
CSVTasks, hvor rækkerne ender. Den får en kolonne for hvert felt i filen.
Flowet#
Flowet starter, når der kommer en fil i biblioteket, og henter filens indhold med Get file content. Resten er en række Compose-handlinger, hvis navne går igen i udtrykkene.
CSV gør indholdet til tekst:
trim(base64ToString(outputs('Get_file_content')?['body']['$content']))
Newline er et linjeskift. Det skrives ved at trykke Enter i feltet, eller som udtryk:
decodeUriComponent('%0A')
SplitNewLine deler teksten op i linjer:
split(outputs('CSV'),outputs('Newline'))
CSVData springer overskriftslinjen over:
skip(outputs('SplitNewLine'),1)
Derefter en Apply to each over @{outputs('CSVData')}. Inde i løkken deler SplitBySemiColon linjen op i felter:
split(Item(),';')
JSON bygger et objekt af felterne:
{
"ISIN": "@{outputs('SplitBySemiColon')?[0]}",
"SecuritiesAccountNumber": "@{outputs('SplitBySemiColon')?[1]}",
"Paydate": "@{outputs('SplitBySemiColon')?[2]}",
"QuantityOfShares": "@{outputs('SplitBySemiColon')?[3]}",
"DividendCurrency": "@{outputs('SplitBySemiColon')?[4]}",
"GrossAmount": "@{outputs('SplitBySemiColon')?[5]}",
"TaxRate%": "@{outputs('SplitBySemiColon')?[6]}",
"TaxAmount": "@{outputs('SplitBySemiColon')?[7]}",
"NetAmount": "@{outputs('SplitBySemiColon')?[8]}"
}
Parse JSON (her kaldet CompleteJSON) tager @{outputs('JSON')} med dette skema:
{
"type": "object",
"properties": {
"ISIN": { "type": "string" },
"SecuritiesAccountNumber": { "type": "string" },
"Paydate": { "type": "string" },
"QuantityOfShares": { "type": "string" },
"GrossAmount": { "type": "string" },
"DividendCurrency": { "type": "string" },
"TaxRate%": { "type": "string" },
"TaxAmount": { "type": "string" },
"NetAmount": { "type": "string" }
}
}
Til sidst opretter Create item elementet på listen, med felterne fra Parse JSON:
@{body('CompleteJSON')?['ISIN']}
Når løkken er færdig, sætter en Update file properties filens Status til Færdig.
Det der driller#
- Windows-filer slutter linjerne med
\r\n. Deles der kun på\n, hænger\rpå det sidste felt i hver linje. Sættrim()om det sidste felt, eller del pådecodeUriComponent('%0D%0A'). - En tom sidste linje giver et tomt element.
trim()på hele indholdet fjerner den, og ellers kan en Filter array pålength(item())større end 0 luge den ud før løkken. - Semikolon i et felt ødelægger opdelingen.
splitkender ikke til anførselstegn, så en fil med tekstfelter i citationstegn og semikolon indeni skal renses først. - Alt er tekst. Skemaet siger
stringhele vejen. Tal og datoer omformes i Create item medfloat()ogformatDateTime(), og et decimalkomma skal byttes til punktum først. base64ToStringer kun nødvendig, når indholdet kommer som base64. Returnerer Get file content allerede teksten, fejler udtrykket, og så eroutputs('Get_file_content')?['body']nok.