oguruma
XLDnaute Occasionnel
Bonjour,
on suppose que l'on reçoive un fichier pas très bien finalisé comme par exemple
DOMAINE;APPLI;LIB_APP;CERTIF_1;CERTIF_2;CERTIF_3;OK;KO;TOTAL;COMMENT
Domaine_1;Appli_1_1;;16;21;25;57;;;
Domaine_1;Appli_1_2;;20;29;21;56;;;
Domaine_1;Appli_1_3;;16;20;20;49;;;
Domaine_1;Appli_1_4;;21;30;16;54;;;
Domaine_1;Appli_1_5;;22;17;15;45;;;
Domaine_1;Appli_1_6;;16;17;29;56;;;
Domaine_1;Appli_1_7;;29;18;17;59;;;
Domaine_1;Appli_1_8;;27;20;18;57;;;
Domaine_1;Appli_1_9;;22;29;27;64;;;
Domaine_1;Appli_1_10;;19;25;24;57;;;
Domaine_2;Appli_2_1;;17;21;29;66;;;
Domaine_2;Appli_2_2;;15;26;15;48;;;
Domaine_2;Appli_2_3;;25;23;17;51;;;
Celui comporte des lignes et colonnes vides
Le but étant d'obtenir
Pour cela 3 fonctions :
- une pour supprimer les lignes vides
- une pour supprimer les colonnes vides
- une pour supprimer les lignes et colonnes vides
Exemple d'utilisation
on suppose que l'on reçoive un fichier pas très bien finalisé comme par exemple
DOMAINE;APPLI;LIB_APP;CERTIF_1;CERTIF_2;CERTIF_3;OK;KO;TOTAL;COMMENT
Domaine_1;Appli_1_1;;16;21;25;57;;;
Domaine_1;Appli_1_2;;20;29;21;56;;;
Domaine_1;Appli_1_3;;16;20;20;49;;;
Domaine_1;Appli_1_4;;21;30;16;54;;;
Domaine_1;Appli_1_5;;22;17;15;45;;;
Domaine_1;Appli_1_6;;16;17;29;56;;;
Domaine_1;Appli_1_7;;29;18;17;59;;;
Domaine_1;Appli_1_8;;27;20;18;57;;;
Domaine_1;Appli_1_9;;22;29;27;64;;;
Domaine_1;Appli_1_10;;19;25;24;57;;;
Domaine_2;Appli_2_1;;17;21;29;66;;;
Domaine_2;Appli_2_2;;15;26;15;48;;;
Domaine_2;Appli_2_3;;25;23;17;51;;;
Celui comporte des lignes et colonnes vides
Le but étant d'obtenir
Pour cela 3 fonctions :
- une pour supprimer les lignes vides
- une pour supprimer les colonnes vides
- une pour supprimer les lignes et colonnes vides
PowerQuery:
let fnDeleteEmptyRows = (pSource as any) =>
let
Source=if pSource is table
then pSource
else Excel.CurrentWorkbook(){[Name=pSource]}[Content],
LST_NULL={"", null},
LST_NULL_EMPTY={""},
//********************************************************************************************************
// On va sélectionner les enregistrements non vides
//********************************************************************************************************
TBL_DELETE_EMPTY_ROWS = Table.SelectRows(Source,
// On prépara la sélection
(pElemX) => not List.IsEmpty(
// On supprimera ceux qui ne correspondent pas à la transformation soit ceux qui sont vides
List.RemoveMatchingItems(
List.Transform(
// On réitère l'opération par un second nettoyage des vides
List.RemoveMatchingItems(Record.FieldValues(pElemX),LST_NULL),
(pElemY) => try Text.Clean(Text.Trim(pElemY)) otherwise pElemY),
LST_NULL_EMPTY)
)
)
in
TBL_DELETE_EMPTY_ROWS
in
fnDeleteEmptyRows
PowerQuery:
let fnDeleteEmptyColumns = (pSource as any)=>
let
Source=if pSource is table
then pSource
else Excel.CurrentWorkbook(){[Name=pSource]}[Content],
STR_EMPTY="",
LST_Columns=Table.ColumnNames(Source),
//********************************************************************************************************
// On va sélectionner les colonnes non vides
//********************************************************************************************************
TBL_DELETE_EMPTY_COLUMNS = Table.SelectColumns(Source ,
// Pour les colonnes on procède via des listes - La suppression est verticale
// Ici les sélection se font en mode liste et non row comme pour les lignes
List.Select(
LST_Columns,
// On ne retient que les colonnes non Null
(ElemX) => List.NonNullCount(List.Transform(Table.Column(Source, ElemX),
(ElemY) => try if Text.Clean(Text.Trim(ElemY)) = STR_EMPTY then null else ElemY otherwise ElemY )) > 0 ))
in
TBL_DELETE_EMPTY_COLUMNS
in
fnDeleteEmptyColumns
PowerQuery:
let fnDeleteEmptyRowsColumns = (pSource as any) =>
let
Source=if pSource is table
then pSource
else Excel.CurrentWorkbook(){[Name=pSource]}[Content],
TBL_Source_1=fnDeleteEmptyRows(Source),
TBL_Source_2=fnDeleteEmptyColumns(TBL_Source_1)
in
TBL_Source_2
in
fnDeleteEmptyRowsColumns
Exemple d'utilisation
PowerQuery:
let
TBL_DELETE_EMPTY_ROWS = fnDeleteEmptyRows(TBL_SRC_Traitements)
in
TBL_DELETE_EMPTY_ROWS
let
TBL_DELETE_EMPTY_ROWS = fnDeleteEmptyColumns(TBL_SRC_Traitements)
in
TBL_DELETE_EMPTY_ROWS
let
TBL_DELETE_EMPTY_ROWS = fnDeleteEmptyRowsColumns(TBL_SRC_Traitements)
in
TBL_DELETE_EMPTY_ROWS