L'écriture des données dans excel(xlsx) fiche d'avoir une table
Je suis en train d'écrire dynamique de données dans une feuille excel (xlsx) ayant une table déjà créée, sur la base duquel nous avons tracer un graphique dans excel lui-même, à l'aide d'une macro.
Je suis à l'aide de POI pour écrire les données.
Le tableau dans la feuille a été fixé à 10 lignes. Quand j'écris de données de plus de 10 lignes, le tableau ne pas obtenir étendue.Ainsi, le graphique tracé contient les données correspondant à 10 lignes seulement.
Comment puis-je écrire des données, de sorte que les données augmente toujours le tableau du nombre de lignes de données?
Vous ne pouvez pas être en mesure d'ajouter une image, mais si vous le télécharger à un public de partage de fichiers de site, vous pouvez inclure l'URL de l'image dans votre question. Quelqu'un pourrait même modifier vos question pour inclure l'image pour vous.
OriginalL'auteur NiteshGoel | 2015-01-29
Vous devez vous connecter pour publier un commentaire.
Vous devez créer un
XSSFTable
objet desheet.createTable();
.Voici un exemple que j'ai trouvé à http://thinktibits.blogspot.co.il/2014/09/Excel-Insert-Format-Table-Apache-POI-Example.html - assurez-vous que la table créée couvre toutes les lignes/colonnes dynamiquement place dans le fichier.
Je ne suis pas sûr que vous pouvez réellement modifier la table elle-même que c'est quelque chose qui est assez peu convivial, même dans Excel lui-même. Il serait probablement préférable de supprimer le tableau (définition) dans le fichier et de le créer encore une fois basé sur les données que vous y mettez.
Comment faire pour supprimer la définition de la table alors ? J'ai essayé de l'enlever de la feuille, mais n'a pas trouvé de méthode dans la XSSFSheet feuille.
Aussi, depuis la table existe déjà dans la feuille, il me faudra d'abord aller chercher la table, puis l'enlever. CTTableStyleInfo - je ne reçois pas cette classe, pour définir les rayures de style.
PI fournit en fait la méthode pour supprimer la table-feuille.getTables().removeAll(de la feuille.getTables()) -- mais il ne semble pas fonctionner, donc peut-être que vous devriez jeter un oeil au message suivant - où quelqu'un explique/répond à une question sur l'ajout de colonnes à une table existante: tinyurl.com/qhf3cfu
OriginalL'auteur Ofer Lando
Alors que cette question est un peu daté, il m'a coûté plus de 4 heures pour comprendre cela, alors j'ai pensé à poster, ça pourrait aider. Cela modifie une table existante au lieu d'en créer une nouvelle.
Un mot d'avertissement: tous les
unsetX
méthodes deCTTable
va jeterIndexOutOfBoundsException
s si la propriété n'existe pas dans la table, de sorte qu'ils doivent être try-catch-ed. Une alternative mentionnée par @Gagravarr dans les commentaires est d'utiliserisSetX
d'abord, puis il n'y a pas besoin detry
ing.Si cela ne fonctionne pas, alors vous avez probablement un tas d'autres trucs ensemble de votre table. Malheureusement, le XML de bas niveau de stuff (encapsulé dans tous les CT des objets) est très mal documenté, puisque c'est apparemment auto-générée à partir de la spécification, de sorte que l'API est assez opaque. Les dents-du processus de rectification je passe par comprendre ce qu'il faut utiliser pour décompresser le .xlsx, regardez le XML je besoin de s'adapter, de comprendre d'où il vit dans mon XSSFSheet et comment j'ai besoin de le régler, puis aller à la chasse pour le CT-méthodes, depuis le XSSF-API n'a pas vraiment vous permettre de faire tout ce que beaucoup. De cette façon, vous pouvez créer à peu près tout ce que vous seriez en mesure de créer dans Excel, et même les modifier certaines des choses que vous ne pouvez pas y - si vous avez le temps et les nerfs.
try {unsetX}
, pourquoi ne pas utiliser leisSetX
tout d'abord des méthodes?Oh oui, n'avait pas pensé à ça - bon point.
OriginalL'auteur G. Bach