Comment mettre à jour le tableau croisé dynamique de la source de données à l'aide de C#?
Je voudrais savoir comment mettre à jour un tableau croisé dynamique de la source de données. Je suis à l'aide de Microsoft.Office.Interop.Excel
et le ciblage des utilisateurs avec Excel 2010.
Je suis actuellement en mesure d'actualiser le tableau croisé dynamique qui fonctionne très bien, cependant lorsque plusieurs lignes sont ajoutées je veux inclure ces lignes dans le tableau croisé dynamique de la source de données. Par exemple, le tableau croisé dynamique de la source de données dans Excel est DataSourceWorksheet!$A$2:$U$26
et je voudrais qu'il soit changé à DataSourceWorksheet!$A$2:$U$86
(plus de 60 lignes) après ma mise à jour/actualiser fichier excel code a exécuter.
Voici une version simplifiée de mon code
Application excelApplication = new Application();
Workbooks workbooks = excelApplication.Workbooks;
wrkBook = workbooks.Open(EXCEL_DOCUMENT_PATH, Missing.Value, false, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, true, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value);
/* update data source worksheet code here (omitted for example) */
Worksheet pivotWorkSheet = (Worksheet)wrkBook.Sheets[PIVOT_SHEET_NAME];
PivotTable pivot = (PivotTable)pivotWorkSheet.PivotTables(pivotTableName);
/* I would like to update the pivot tables data source here...
I could use Range object from data source worksheet...
Basically just want to tell pivot table, use these cells now... */
pivot.RefreshTable();
/* cleanup code here (omitted for example) */
Une solution qui peut fonctionner, ce serait juste régénérer le tableau croisé dynamique en utilisant à nouveau wrkBook.PivotTableWizard( ... )
. Toutefois, cela ne fonctionnera pas pour ma situation puisque les utilisateurs préfèrent modifier leur tableau croisé dynamique en modifiant les champs sélectionnés, des lignes, des colonnes, etc. Il a juste besoin d'être mis à jour lorsque les données de la feuille de calcul source des changements.
Ouais, je ne suis pas sûr non plus, ce n'est pas le genre de chose que j'ai trouvé facilement sur MSDN ou dans d'autres ressources similaires.
OriginalL'auteur Joel Briggs | 2011-11-21
Vous devez vous connecter pour publier un commentaire.
très simple..
C'est tout..
N'oubliez pas de toujours nous avons besoin de donner de Ligne et de Colonne.
E. g.
je.e
"SheetName!R1C1:R12C13"
comme ça.Si vous donnez
"SheetName!$A$1:$Q$18"
comme ça, ça ne fonctionnera pas.OriginalL'auteur Palanivel
La solution à ce problème serait d'utiliser un Dynamique De La Plage Nommée dans excel pour les données de Tableau croisé dynamique de la source. La Dynamique de la Plage nommée formule utilise une combinaison de la La fonction OFFSET et la La fonction NBVAL comme suit:
La formule ci-dessus entraînera dans une plage de cellules dans A2:A1000 qui disposent de données. Dans mon cas, j'ai tenu plus d'une colonne et j'ai une plus grande gamme de lignes à "vérifier" pour les données.
Maintenant en C# pour créer une plage nommée, j'ai utilisé les éléments suivants:
et ensuite de spécifier le nom de la gamme comme la source de données lors de la création du nouveau tableau croisé dynamique j'ai tout simplement passer la chaîne de valeur de la plage de nom dans la méthode PivotTableWizard:
Maintenant, lorsque des lignes sont ajoutées ou supprimées dans la DataSourceWorkSheet le tableau croisé dynamique ne faire référence aux cellules avec des valeurs de données à l'aide de la Plage Nommée. Actualisation du tableau croisé dynamique maintenant tout fonctionne comme prévu, en appelant RefreshTable:
Dans l'ensemble, ce serait se passe à l'intérieur d'une méthode pour créer un nouveau classeur excel ou mettre à jour un classeur existant. L'appel de cette méthode pour un classeur existant repose sur le fait que les existants de tableau croisé dynamique a été créé à l'aide d'une dynamique d'une plage nommée et sera mis à jour en conséquence.
OriginalL'auteur Joel Briggs