Importera Ei nätavgifter — XLSX-parsing

Energimarknadsinspektionens datakälla, struktur och fällor.

Uppdaterad 2026-05-19

Datakälla

Energimarknadsinspektionen publicerar årligen tre XLSX-filer med nätavgifter per nätägare:

  1. Hushållskunder (lägenhet, villa 16A-25A)
  2. Större säkringskunder (35-200A)
  3. Effektkunder (med effekttariff)

URL: https://ei.se/om-oss/statistik-och-oppna-data/natavgifter---elnat

Format

Wide-format med multi-header: - Rad 1: Typkund (t.ex. "Villa 16A, 5 000 kWh/år") - Rad 2: NT-kod (NT1610, NT2010 osv) - Rad 3: Metric (Myndighetsavgift, Fast avgift, Rörlig, Total, Antal uttagspunkter) - Rad 4: År (2026, 2025, 2024, 2023, 2022) - Rad 5+: Datarader, en per nätägare/REL-koncession

Vidare: - Typkund 1 & 2 (Lägenhet 16A, Villa 16A): 5 metrics × 5 år = 25 kolumner - Typkund 3-6 (Villa 20A+): 6 metrics × 5 år (har Rörlig 1 + Rörlig 2)

Parsing-strategi

Använd openpyxl med data_only=True:

import openpyxl
wb = openpyxl.load_workbook("file.xlsx", read_only=True, data_only=True)
ws = wb[wb.sheetnames[0]]
for i, row in enumerate(ws.iter_rows(values_only=True)):
    if i < 4: continue  # skip headers
    re_namn = row[0]   # REL00018
    company = row[1]
    # Sen kolumn-offset per typkund × år

Identifiera kolumn-offset

För 2026 (första året i varje typkund-block):

Typkund Myndighet Fast Rörlig Total Punkter
Lägenhet 16A 2000 D (4) I (9) N (14) S (19) X (24)
Villa 16A 5000 AC (29) AH (34) AM (39) AR (44) AW (49)
Villa 20A 10000 BB (54) BG (59) BL (64) [+BQ=Rörlig2 (69)] BV (74) CA (79)

För andra år (2025=offset+1, 2024=offset+2 osv).

Gotcha: stora aktörer som Ellevio AB

Ellevio AB (EDIEL 14900) har data noll i top-level-raden. Anledning: deras taxor rapporteras per koncession (REL00509, REL00510 osv) — inte aggregerat. Sammanfoga manuellt eller använd fuzzy-match mot grid_owners-namn.

Mappa till EDIEL-ID

REL-koden är Ei:s identifierare för en nätkoncession, inte samma som EDIEL-ID. Bästa fuzzy-match:

UPDATE ei_grid_tariffs t SET matched_ediel_id = g.ediel_id
FROM grid_owners g
WHERE similarity(lower(t.company_name), lower(g.name)) > 0.7
  AND t.matched_ediel_id IS NULL;

Sync-frekvens

Filerna uppdateras ungefär 1 gång/år (efter 1 januari när nya avgifter offentliggjorts). Veckosync räcker — eller manuell vid känd uppdatering.