[Neapolis] ha scritto:
cgf ha scritto:
In pratica genero un file.txt con i dati richiesti
Bene.. gli darò una occhiata...
immagino che il .txt devi produrlo con dei "tabulatori" per separare un campo dall'altro... giusto ?
l'uso frequentemente che faccio con EPPlus non è esattamente quello di quello specchietto, devi costruirtelo praticamente tutto e foruna che non sono tante righe da riportare.
Lo trovo molto vantaggioso fare i reports... provo a spiegarlo, sembra complitato e contorto, ma in pratica si fa con un solo comando, sempre quello, cambia ovviamente la stored procedure che estrapola i dati da SQL ed il relativo
NomeStoredProcedure.txt dove sono contenute le infos per la formattazione ed eventuali operazioni da fare su righe/colonne. un esempio del file [io chiamo di formattazione] txt
Questo ad esempio è il venduto mensile (per quantità) degl'articoli o categorie selezionate, le colonne da 01 a 05 sono testo, non necessitano formattazione. Ottieni il totale mensile in fondo alla colonna, ed il progressivo di ciascun articolo/categoria a fine riga
Lista Venduto
Medium5
S
Tahoma
10
N0|06
N0|07
N0|08
N0|09
N0|10
N0|11
N0|12
N0|13
N0|14
N0|15
N0|16
N0|17
FO|05|SOMMACOL|
FO|06|SOMMACOL|
FO|07|SOMMACOL|
FO|08|SOMMACOL|
FO|09|SOMMACOL|
FO|10|SOMMACOL|
FO|11|SOMMACOL|
FO|12|SOMMACOL|
FO|13|SOMMACOL|
FO|14|SOMMACOL|
FO|15|SOMMACOL|
FO|16|SOMMACOL|
FO|00|TUTTEROW|RC[-12]+RC[-11]+RC[-10]+RC[-9]+RC[-8]+RC[-7]+RC[-6]+RC[-5]+RC[-4]+RC[-3]+RC[-2]+RC[-1]
DX|18
N0|18
dalla prima riga alla quarta sono fisse e mi indicano come si chiamerà il foglio, filtri S/N, il font ed il size
poi indico l'eventuale il formato di tutte o alcune colonne
ad esempio N0 08 significa che la colonna 08 è di tipo numerico con zero decimali
$N0dec = "#,##0;[RED]-#,##0"
p4 10 la colonna 10 è di tipo percentuale con 4 decimali
$P4dec = "0.0000%;[RED]-0.0000%"
DE 12 la colonna 12 data estesa
$DataE = "dd-mmm-yyyy"
07@SOMMACOL in fondo alla colonna 07 devo avere la somma della colonna
Tutto lo fa uno script powershell qui
switch ($formato)
{ "N0" { $frmt = $N0dec; break }
"N1" { $frmt = $N1dec; break }
"N2" { $frmt = $N2dec; break }
"N3" { $frmt = $N3dec; break }
"N4" { $frmt = $N4dec; break }
"N5" { $frmt = $N5dec; break }
"N6" { $frmt = $N6dec; break }
"P0" { $frmt = $P0dec; break }
"P1" { $frmt = $P1dec; break }
"P2" { $frmt = $P2dec; break }
"P3" { $frmt = $P3dec; break }
"P4" { $frmt = $P4dec; break }
"DT" { $frmt = $data ; break }
"DE" { $frmt = $dataE; break }
"SX" { $alig = "Left" ; break }
"DX" { $alig = "Right" ; break }
"CE" { $alig = "Center"; break }
"CC" { $alig = "CenterContinuous" ; break }
"FO" { if ($c) { $Lettera = $ABCD[$Colonna]
switch ($c) {
"MEDIACOL" { $CT = $Lettera+($RigaFine+1)
$SF="=SUM("+$ABCD[$colonna]+$RigaInizio+":"+$ABCD[$colonna]+$RigaFine+")/"+$RigaFine
break
}
"SOMMACOL" { $CT = $Lettera+($RigaFine+1)
$SF="=SUM("+$ABCD[$colonna]+$RigaInizio+":"+$ABCD[$colonna]+$RigaFine+")"
break
}
# Ultima colonna: Operazione [+ - * /] alla fine della riga es. (RC[-5]*RC[-4])+RC[-3]+RC[-2]+RC[-1]
"FINERIGA" { $CT = $ABCD[$ColonnaFine] + $Colonna
$SFR=$d
break
}
# Ultima colonna: Operazione su tutte le righe
"TUTTEROW" { $CT = $ABCD[$ColonnaFine] + "1"
$worksheet.Cells[$CT].Value = "Totali"
$worksheet.Cells[$CT].Style.Font.Bold = $true
$CT = $ABCD[$ColonnaFine] + $RigaInizio + ":" + $ABCD[$ColonnaFine] + $RigaFine
$SFR=$d
}
default { $SFR=""; $SF=""; break }
}
}
}
default { $frmt = "" ; $alig = "" ; break }
}
ed alla fine una sistematina finale
# Fit Column Size to Size of Content
$Worksheet.Cells[$Worksheet.Dimension.Address].AutoFitColumns()
e salva
# Save Excel File
$ExcelPackage.SaveAs($FileNameExcel)
Nel caso di lavoro schedulato viene inviato via mail a chi lo deve ricevere, ma se vuoi, in altre occasioni, puoi aprire direttamente (lo apri anche con LibreOffice)
# Open Excel File
Invoke-Item $FileNameExcel
Fatto uno fai presto farne altri, ad esempio il fatturato per cliente, cambi la riga 1, N0 in N2, lo chiami in altro modo, et violà, già fatto.
Puoi fare anche altro, anche inviare ordini a fornitore in automatico per riassortimento ad esempio.