2017-10-18 13 views
9

Nous essayons de créer un tableau de bord Excel par défaut que nos utilisateurs peuvent télécharger. Lors du téléchargement de la feuille Excel, nous voulons remplir une feuille dans le fichier avec leurs données.Impossible d'enregistrer la feuille Excel après l'ajout de données si le classeur contient une table pivotante

Nous utilisons EPPlus pour la manipulation de la feuille Excel.

En bref, la structure de la feuille est la suivante:

  1. Sheet A avec des éléments d'information (tableaux de pivotement, les arbres de pivotement et trancheuses)
  2. Sheet B qui contient l'ensemble des données
  3. A nommé plage définie comme =OFFSET(Data!$A$1;0;0;COUNTA(Data!$A:$A);COUNTA(Data!$1:$1)) qui s'adapte simplement à la taille de l'ensemble de données que nous insérons dans cette feuille
  4. Quelle que soit la plage nommée contient j'ai chargé dans Power Query et ajouté aux classeurs Data Model
  5. Tous les éléments de reporting de Sheet A est configuré pour charger des données à partir du modèle de données

Dans l'ensemble, cela fonctionne très bien aussi longtemps que nous bourrer manuellement Sheet B avec nos données. Lorsque nous essayons d'utiliser EPPlus pour remplir les données que nous obtenons une erreur lorsque vous essayez d'enregistrer le fichier:

The cachesource is not a worksheet 

Par tâtonnement, nous avons dépouillé la feuille de ses parties pour isoler la cause du problème . Nous avons soupçonné que cela aurait pu être les trancheurs, l'utilisation de Power Query/Data Model ou l'astuce avec la plage nommée. Cependant, aucun de ces problèmes ne semble être le problème: si nous supprimons tous les tableaux croisés dynamiques de la feuille, nous pouvons sauvegarder le classeur. Surprenant pour moi, nous sommes en mesure d'utiliser très bien les tableaux croisés dynamiques, ce sont seulement les tableaux qui causent le problème.

Des suggestions sur la façon d'éviter ce problème avec EPPlus? Pour l'instant, nous avons continué sans l'utilisation de tableaux croisés dynamiques nous aimerions les faire revenir à un moment donné :)

+1

Basé sur https://github.com/pruiz/EPPlus/blob/master/EPPlus/Table/PivotTable/ExcelPivotCacheDefinition.cs (et le message d'erreur) avez-vous essayé d'avoir la cachesource comme feuille de calcul? – mjwills

+0

Pour être honnête, je n'ai pas la moindre idée de ce que cela signifie ou comment le faire :) –

+0

@mjwills J'ai googlé un peu et trouvé quelques astuces pour désactiver le cache de tableau croisé dynamique. Je ne trouve rien à propos de changer le type de cache n'importe où. L'astuce devrait être de décocher les « données source Enregistrer avec le fichier » mais cette option semble être grisés dans notre cas lorsque le tableau croisé dynamique chargement du modèle de données. –

Répondre

1

Erreur - "The cachesource is not a worksheet" peut être due à la reconnaissance des données source dans la plage par Excel comme plage de feuille de travail.

Vous pouvez modifier les données sauvegardées dans la plage dans la feuille B sous forme de tableau, en utilisant ws.ListObjects.Add. Chaque fois que le tableau croisé dynamique est actualisé, il doit automatiquement prendre toutes les données dans la table.

Veuillez également cocher une autre alternative disponible à partir d'une question connexe - Définir une table plutôt qu'une plage comme PivotTable 'cacheSource', si cela peut vous aider.

+0

Merci pour vos commentaires @IITC Puis-je vous ai élaborer un peu sur le « Vous pouvez modifier les données sous-évaluées dans la gamme en feuille B [...] » Je ne suis pas sûr que je suis tout à fait vous. En ce qui concerne la modification de la source de cache, je ne pense pas que ce soit possible avec ma configuration. Comme mentionné dans un de mes commentaires ci-dessus, j'utilise Power Query et son Cube/Data Model OLAP pour raccorder tous les tableaux et tableaux croisés dynamiques. Cela semble limiter considérablement mes options. –

0

Il existe de nombreux issues related with cache lors de la manipulation de données Pivot. Une fois je l'ai regardé pour this other bounty here.

In doit être le même avec EPPlus. Vous devez gérer le cache de données Pivot manuellement, comme fait here.

Et voici le gars donne complete solution for handling filters with EPPlus.

Espérons que ça aide.

+0

Merci pour vos commentaires J. Chomel, permettez-moi de jeter un oeil sur les liens que vous fournissez et enquêter à leur sujet un peu. –