Filtrer (vide) ligne dans le tableau pivot avec Excel Interop C #

J'ai un excel avec trois feuilles de calcul, des données brutes, un tableau pivot et un graphique pivot. Étant donné que datatables brutes seront mises à jour par code avec un nombre inconnu de lignes, j'ai sélectionné la colonne entière pour être la source de données. Lorsque le tableau pivot est actualisé, il obtient toujours des lignes vides dans datatables brutes; il y aura donc une rangée (vierge) dans le tableau pivot.

Je souhaite filterr la ligne (vierge) dans le même programme. Jusqu'à présent, j'ai lu le file Excel, mais je n'ai aucune idée de la façon de filterr juste la ligne (vide), merci.

Application exApp = new Application(); Workbook exWbk = exApp.Workbooks.Open(targetPath); PivotTable pivotTb = exWbk.Sheets[1].pivotWorkSheet.PicotTables("Report"); 

  1. Faites de la donnée brute une table au lieu d'une gamme standard. Cliquez n'importe où dans datatables et, à partir de l'onglet "Insérer" dans le ruban, select "Tableau", et Excel convertira automatiquement votre gamme en table.

Une table présente de nombreux avantages sur une gamme, dont la moindre est automatiquement taillée lorsque des lignes sont ajoutées ou supprimées. Si votre rafraîchissement automatique ne supprime en rien les lignes (juste le contenu), cela est résolu par quelque chose comme ceci (supposons que "Tableau 1" est le nom de votre table):

 Excel.ListObject lo = exWbk.Worksheets["Sheet1"].ListObjects["Table1"]; foreach (Excel.ListRow rw in lo.ListRows) { if (exApp.WorksheetFunction.CountA(rw.Range) == 0) rw.Delete(); } 
  1. Modifiez la source de données pour que votre table pivot soit la table (dans Excel – en permanence). Cela devrait supprimer toutes les lignes vierges.

  2. Actualisez votre table pivot

    pivotTb.RefreshTable();

Si vous ne souhaitez vraiment pas convertir votre gamme en table, puis je vous suggère de modifier dynamicment datatables source pour votre table pivot.

Voici un exemple de la façon dont vous pourriez changer dynamicment la gamme de votre table pivot, en utilisant A1: C8 comme plage d'exemple:

 Excel.Range r = exWbk.Worksheets["Sheet1"].Range["A1:C8"]; Excel.PivotCache pc = exWbk.PivotCaches().Create( Excel.XlPivotTableSourceType.xlDatabase, r); pivotTb.ChangePivotCache(pc); pivotTb.RefreshTable(); 

Il n'y a pas de suggestions sur la façon de définir la gamme utilisée, mais au cas où vous ne disposez pas d'un moyen:

Comment get la gamme de cellules occupées dans la feuille Excel