Générer des fichiers Excel simples
Dans les bureaux réels, nous avons souvent une exigence: nous exigeons que le rapport soit ouvert directement dans Excel. Il y a un tel besoin pendant les stages. Interrogez toutes les informations de la pièce jointe fournies par l'utilisateur en fonction de la ressource sélectionnée et générez Excel pour le téléchargement. Cependant, lors de l'interrogation, nous devons vérifier s'il y a une erreur dans les informations de la pièce jointe fournies par l'utilisateur (carte d'identité). Il y a une erreur de génération de message d'erreur Excel.
Le projet POI d'Apache est actuellement une interface HSSF relativement mature utilisée pour traiter les objets Excel. En fait, POI gère non seulement Excel, mais il peut également gérer Word, PowerPoint, Visio et même Outlook.
Ici, je vais d'abord présenter comment générer Excel en utilisant POI.
Tout d'abord, avant de générer Excel, nous devons comprendre l'organisation des fichiers Excel. Dans POI, il est compris comme suit: un fichier Excel correspond à un classeur, et un livre de travail se compose de plusieurs feuilles. Une feuille a plusieurs rangées et une ligne a généralement plusieurs cellules.
Pour les quatre noms ci-dessus, nous pouvons comprendre dans la figure ci-dessous
Pour générer Excel, POI fournit les objets de base suivants:
À partir de l'image ci-dessus et de la structure organisationnelle Excel, nous pouvons comprendre les étapes pour créer Excel.
1. Générer un objet de document HSShworkBook.
2. Générez la forme HSSFSheet via HSSFWorkBook.
3. Générer des lignes via HssFsheet
4. Générer la cellule HSSFCELL via HSSFrow.
Voici le code d'affichage:
Erreur de carte d'identité Bean (errorCondition.java)
classe publique ErrorCondition {nom de chaîne privée; // Nom Private String idcard; // Statut de chaîne privée de carte d'identité; // Message de chaîne privée d'erreur; // Message d'erreur ErrorCondition (String Name, String idcard, String Status, String Message) {this.name = name; this.idcard = idcard; this.status = statut; this.Message = message; } public String getName () {Nom de retour; } public void setName (string name) {this.name = name; } public String getIdCard () {return idcard; } public void setIdCard (String idcard) {this.idcard = idcard; } public String getStatus () {return status; } public void setStatus (String Status) {this.status = statut; } public String getMessage () {return message; } public void setMessage (Message de chaîne) {this.Message = message; }}Classe de traitement (exportorrorexcel.java)
classe publique ExporterRorexcel {public static void main (String [] args) {// étape 1 Créer un travail de travail hssfworkbook wb = new hssfworkbook (); // Étape 2 Créer une feuille HSSFSheet Sheet = WB.CreateTheet ("Message d'erreur de carte d'identité"); // Étape 3 Créer une ligne de ligne: ajouter 0 lignes d'en-tête de table hssfrow row = sheet.createrow (0); HSSFCELLSTYLE STYLE = WB.CreateCellStyle (); style.setAlignment (hssfCellStyle.align_center); // Centre // Étape 4: Créer la cellule HSSFCELL Cell = Row.CreateCell (0); // la première cellule Cell.SetCellValue ("nom"); // Définir la valeur Cell.SetCellStyle (style); // Centre de contenu CELLE = ROW.CREATECELL (1); // la deuxième cellule cell.setCellValue ("carte d'identité"); Cell.SetCellStyle (style); Cell = row.CreateCell (2); // la troisième cellule Cell.SetCellValue ("Statut d'erreur"); Cell.SetCellStyle (style); Cell = row.CreateCell (3); // la quatrième cellule Cell.SetCellValue ("Message d'erreur"); Cell.SetCellStyle (style); // La cinquième étape inserte la liste des données <ReurrCondition> list = exportorrorexcel.getErrCondition (); for (int i = 0; i <list.size (); i ++) {errorCondition errorCondition = list.get (i); // Créer une row = sheet.createrow (i + 1); // Créer une cellule et ajouter des données Row.CreateCell (0) .SetCellValue (errorCondition.getName ()); Row.CreateCell (1) .SetCellValue (errorCondition.getIdCard ()); Row.CreateCell (2) .SetCellValue (errorCondition.getStatus ()); row.CreateCell (3) .SetCellValue (errorCondition.GetMessage ()); } // Étape 6 Enregistrez le fichier Excel généré dans le chemin d'accès spécifié TRY {fileoutputStream fout = new FileOutputStream ("d: //errorcondition.xls"); wb.write (fout); fout.close (); } catch (ioException e) {e.printStackTrace (); } System.out.println ("Génération de fichiers Excel Succès avec succès ..."); } public static list <ReurCondition> getErrOrCondition () {list <rorrCondition> list = new ArrayList <ReurCondition> (); ErrorCondition R1 = new ErrorCondition ("Zhang San", "4306821989021611", "L", "Longueur Error"); ErrorCondition R2 = new ErrorCondition ("Li si", "430682198902191112", "x", "vérifier l'erreur"); ErrorCondition R3 = new ErrorCondition ("Wang Wu", "", "N", "Les informations sur la carte d'identité sont vides"); list.add (R1); list.add (R2); list.add (R3); Liste de retour; }} Grâce aux six étapes ci-dessus, vous pouvez générer des fichiers Excel à l'emplacement spécifié.
L'implémentation Java POI insère des images dans Excel
Faire le développement Web est inévitable pour gérer Excel. Aujourd'hui, le patron m'a donné une tâche - Export Excel. Ce que je pensais au début était assez simple, c'était juste rechercher, construire Excel et télécharger une réponse. Mais il y a une différence, c'est-à-dire que vous devez ajouter des images, c'est celle qui a été ajoutée depuis longtemps. Dans le même temps, aucune bonne information n'a été trouvée sur Internet, j'ai donc écrit ce billet de blog pour l'enregistrer pour le mien et mes amis de blog pour interroger et faire référence.
Il y a un objet HSSFPatriarch dans POI, qui est le meilleur gestionnaire de dessin. Sa méthode de création (Anchor, PictureIndex) peut insérer une image dans Excel. Vous devez donc insérer une image dans Excel et vous pouvez le faire en trois étapes. 1. Obtenez l'objet HSSFPatriarch, 2. Nouvel objet HSSFclientAchor, 3. Appelez simplement la méthode CreatePicture. L'implémentation est très facile à mettre en œuvre, mais il est toujours un peu difficile de bien le faire. Ici, nous insérons d'abord une image:
classe publique ExceLImageTest {public static void main (String [] args) {fileOutputStream fileout = null; BufferedImage Bufferimg = null; // Mettez d'abord la lecture dans l'image dans un bytearrayoutputStream pour générer bytearray try {bytearrayoutputStream bytearrayout = new bytearrayoutputStream (); BufferImg = imageo.read (nouveau fichier ("f: /picture/anounty/xiaozhao11.jpg")); ImageIo.Write (BufferImg, "JPG", ByteArrayout); Hssfworkbook wb = new hssfworkbook (); HSSFSheet Sheet1 = WB.CreateSheet ("Test Picture"); // Le directeur supérieur pour le dessin ne peut obtenir qu'une seule feuille (assurez-vous de faire attention à ce point) hssfpatriarch patriarch = sheet1.CreateDrawingPatriarch (); // L'ancre est principalement utilisée pour définir les attributs des images HSSFClientanchor Anchor = New HssfClientAchor (0, 0, 255, 255, (court) 1, 1, (court) 5, 8); anchor.setanchorType (3); // Insérez l'image Patriarch.CreatePicture (Anchor, WB.AddPicture (ByteArrayout.ToByTearray (), HssfworkBook.Picture_Type_JPEG)); fileout = new FileOutputStream ("d: / test excel.xls"); // Écrivez dans le fichier Excel wb.write (fichier); System.out.println ("--------"); } catch (exception e) {e.printStackTrace (); } enfin {if (fileout! = null) {try {fileout.close (); } catch (ioException e) {e.printStackTrace (); }}}}}}}}}} Voici les résultats après l'exécution:
Quant à savoir pourquoi ce résultat est principalement dû au constructeur HSSFClientanchor (0, 0, 255, 255, (court) 1, 1, (court) 5, 8). Permettez-moi d'expliquer ce constructeur ci-dessous: hssfclientanchor (int dx1, int dy1, int dx2, int dy2, court col1, int row1, court col2, int row2); Les significations de chaque paramètre sont les suivantes:
Ici, DX1 et DY1 définissent la position de départ de l'image à la cellule débutante, et DX2 et DY2 définissent la position finale de la cellule d'extrémité. Col1 et Row1 définissent la cellule de départ, Col2 et Row2 définissent la cellule d'extrémité.
Ce qui suit est créé avec deux constructeurs différents. À partir de cette image, nous pouvons clairement voir la signification et les différences des huit paramètres ci-dessus.
Ce qui précède consiste à insérer une image, alors qu'en est-il de l'insertion de plusieurs images? En fait, c'est très simple. Construisez plusieurs différents objets HSSFClientanchor et contrôlez ces huit paramètres, comme suit:
HSSFClientanchor Anchor1 = nouveau HSSFClientanchor (0, 0, 1023,100, (court) 1, 1, (court) 5, 8); HSSFClientanchor Anchor2 = nouveau HSSFClientanchor (0, 0, 1023,100, (court) 1, 9, (court) 5, 16); // Insérez l'image Patriarch.CreatePicture (Anchor1, WB.AddPicture (ByteArrayout.ToByTearray (), HssfworkBook.Picture_Type_JPEG)); Patriarch.CreatePicture (Anchor2, WB.AddPicture (Bytearrayout.ToByteArray (), hssfworkbook.picture_type_jpeg));
Le reste du code est le même et les résultats suivants sont obtenus: