Database
 sql >> डेटाबेस >  >> RDS >> Database

Apache POI का उपयोग करके जावा प्रोग्राम से एक्सेल दस्तावेज़ कैसे बनाएं?

अपाचे पीओआई जावा कोड का उपयोग करके एमएस ऑफिस और ओपन ऑफिस फाइलों को पढ़ने, लिखने और हेरफेर करने के लिए उपयोग की जाने वाली एक लोकप्रिय ओपन सोर्स लाइब्रेरी है। लाइब्रेरी अपाचे सॉफ्टवेयर फाउंडेशन . द्वारा अनुरक्षित कई ओपन सोर्स उत्पादों में से एक है (एएसएफ) ने जावा समुदाय में योगदान दिया। पुस्तकालय में ओपन ऑफिस एक्सएमएल मानकों और माइक्रोसॉफ्ट ओएलई 2 के आधार पर फ़ाइल स्वरूपों को डीकोड करने के लिए कक्षाएं और विधियां हैं। यद्यपि पुस्तकालय Word, Excel स्प्रेडशीट और PowerPoint फ़ाइलों में हेरफेर करने में सक्षम है, यह आलेख मुख्य रूप से स्प्रेडशीट दस्तावेज़ों पर केंद्रित है, केवल इसे संक्षिप्त बनाने के लिए।

JAVA सीखें और आज ही अपना निःशुल्क परीक्षण शुरू करें!

अपाचे POI लाइब्रेरी

दिलचस्प बात यह है कि अपाचे पीओआई नाम में, पीओआई का अर्थ है "खराब ओफ़्फ़ुसेशन इंप्लीमेंटेशन" और लाइब्रेरी का लक्ष्य ऑफिस ओपन एक्सएमएल मानकों (ओओएक्सएमएल) और माइक्रोसॉफ्ट के ओएलई 2 कंपाउंड दस्तावेज़ प्रारूप के आधार पर विभिन्न फ़ाइल स्वरूपों में हेरफेर करने के लिए जावा एपीआई प्रदान करना है। (ओएलई2)। संक्षेप में, यह जावा कोड का उपयोग करके एमएस एक्सेल, एमएस वर्ड और एमएस पावरपॉइंट फाइलों को पढ़ने और लिखने में सक्षम बनाता है। अधिकांश Microsoft Office फ़ाइलें—जैसे XLS, DOC, PPT, और MFC क्रमांकन API-आधारित फ़ाइल स्वरूप-OLE2 मानक पर आधारित हैं। OLE, मूल रूप से, एक मालिकाना तकनीक है विकसित Microsoft द्वारा, और वस्तुओं को जोड़ने और कंटेनर दस्तावेज़ों में वस्तुओं को एम्बेड करने के लिए प्रारूप प्रदान करता है। पहले प्रारूप को OLE1.0 प्रारूप कहा जाता है जहां लिंक किए गए ऑब्जेक्ट और एम्बेडेड ऑब्जेक्ट डेटा को कंटेनर दस्तावेज़ के भीतर बाइट्स के अनुक्रम के रूप में रखा जाता है। दूसरा संस्करण, OLE2.0 प्रारूप, OLE कंपाउंड फ़ाइल प्रौद्योगिकी (MS-CFB) का लाभ उठाता है जहाँ लिंक की गई वस्तु या एम्बेडेड ऑब्जेक्ट डेटा OLE कंपाउंड फ़ाइल स्ट्रीम ऑब्जेक्ट के रूप में इस संग्रहण में समाहित है। इस पर अधिक विवरण के लिए OLE1.0 और OLE2.0 प्रारूप देखें। Apache POI लाइब्रेरी POIFS नामक OLE2 फ़ाइल सिस्टम और HPSF नामक OLE2 दस्तावेज़ गुण के लिए लाइब्रेरी API प्रदान करती है।

अपाचे पीओआई घटक

Apache POI लाइब्रेरी MS Office के OLE2 कंपाउंड दस्तावेज़ों के साथ काम करने के लिए कक्षाएं और विधियाँ प्रदान करती है। यहां सबसे अधिक उपयोग किए जाने वाले का संक्षिप्त विवरण दिया गया है:

  • POIFS OLE2 दस्तावेज़ों के लिए:POIFS का अर्थ है खराब ओफ़्फ़ुसेशन इंप्लीमेंटेशन फ़ाइल सिस्टम . यह OLE2 कंपाउंड दस्तावेज़ को पोर्ट करने के लिए लाइब्रेरी में लागू किया गया मूल POI तत्व है। यह गैर-एक्सएमएल बाइनरी माइक्रोसॉफ्ट ऑफिस प्रारूप के लिए पढ़ने और लिखने की कार्यक्षमता का समर्थन करता है। POI लाइब्रेरी के सभी API इसी पर निर्मित होते हैं।
  • HSSF और XSSF:HSSF का अर्थ है भयानक स्प्रेड शीट प्रारूप . यह एक्सेल 97 फ़ाइल स्वरूप या .xls फ़ाइलों के लिए जावा कार्यान्वयन पोर्ट है। XSSF का अर्थ है XML स्प्रेड शीट प्रारूप और यह OOXML फ़ाइल स्वरूप या .xlsx फ़ाइल स्वरूप के लिए एक पोर्ट है।
  • HWPF और XWPF:HWPF का अर्थ है भयानक वर्ड प्रोसेसर प्रारूप . यह पुराने वर्ड 6 या वर्ड 95 फाइल फॉर्मेट के लिए सीमित रीड-ओनली पोर्ट है। XWPF का मतलब है XML वर्ड प्रोसेसर फॉर्मेट . यह Word 2007 .docx फ़ाइल स्वरूप के लिए जावा कार्यान्वयन पोर्ट है। दोनों कार्यान्वयन सीमित कार्यक्षमता का समर्थन करते हैं।
  • HSLF और XSLF:HSLF का अर्थ है भयानक स्लाइड लेआउट प्रारूप . XSLF का अर्थ है XML स्लाइड लेआउट प्रारूप . ये दोनों PowerPoint प्रस्तुतियों को पढ़ने, लिखने, बनाने और संशोधित करने की क्षमता प्रदान करते हैं जबकि HSLF PowerPoint 97 प्रारूप का समर्थन करता है और XSLF बाद के संस्करणों का समर्थन करता है।
  • एचपीएसएफ :HPSF का अर्थ है भयानक संपत्ति सेट प्रारूप . यह विशेष रूप से दस्तावेज़ गुणों के साथ काम करने के लिए उपयोग किया जाता है जैसे शीर्षक, श्रेणी, लेखक, संशोधन की तिथि और दस्तावेज़ के आगे सेट करना
  • HDGF और XDGF:HDGF का मतलब भयानक आरेख प्रारूप है . इस घटक में Visio बाइनरी फ़ाइल स्वरूप के साथ काम करने के लिए कक्षाएं हैं। यह Visio दस्तावेज़ों और VSD फ़ाइलों तक पहुँचने के लिए निम्न-स्तरीय, केवल-पढ़ने के लिए API प्रदान करता है। XDGF का अर्थ है XML आरेख प्रारूप . यह Visio XML फ़ाइल स्वरूप या VSDX फ़ाइलों के लिए है।
  • एचपीबीएफ :एचपीबीएफ का अर्थ है भयानक प्रकाशक प्रारूप . यह एमएस प्रकाशक फ़ाइल प्रारूप के साथ काम करने के लिए एक सीमित जावा पोर्ट है।

समरूप शब्द हास्यप्रद लगते हैं क्योंकि इन फाइल सिस्टमों को बंद किया जाना था और माइक्रोसॉफ्ट ने कोड को अस्पष्ट करने की पूरी कोशिश की ताकि उन्हें न केवल समझना मुश्किल हो बल्कि रिवर्स इंजीनियर को भी मुश्किल हो। लेकिन, अपाचे के डेवलपर्स ने इसे आसानी से हैक कर लिया और इसे सफलतापूर्वक रिवर्स इंजीनियर किया। शायद, बंद व्यवस्था की खुशी या घोर निंदा के निशान के रूप में, उन्होंने मजाक में उनका नाम इस तरह रखा।

HSSF और XSSF फाइलों के साथ काम करना

Apache लाइब्रेरी के HSSF और XSSF घटक HSSF और XSSF दस्तावेज़ीकरण के अनुसार स्प्रेडशीट दस्तावेज़ तक पहुँचने के तीन मॉडल प्रदान करते हैं। वे हैं:

  • विशेष जरूरतों के लिए निम्न-स्तरीय संरचनाएं
  • एक्सेल दस्तावेज़ों तक केवल पढ़ने के लिए एक्सेस के लिए इवेंटमॉडल एपीआई
  • Excel फ़ाइलें बनाने, पढ़ने और संशोधित करने के लिए उपयोगकर्ता मॉडल API

सीमित ईवेंटमॉडल API का उपयोग केवल स्प्रेडशीट डेटा पढ़ने के लिए किया जा सकता है। ये एपीआई org.apache.poi.hssf.eventusermodel में स्थित हैं पैकेज और org.apache.poi.xssf.eventusermodel पैकेज, जहां पहले वाले का उपयोग .xls . से डेटा पढ़ने के लिए किया जाता है फ़ाइल प्रारूप और दूसरे का उपयोग .xlsx . से डेटा पढ़ने के लिए किया जाता है फ़ाइल प्रारूप।

उपयोगकर्ता मॉडल अधिक लचीला और उपयोग में आसान है; यह एक्सेल स्प्रेडशीट दस्तावेज़ को पढ़, लिख, बना और संशोधित कर सकता है। लेकिन, इसमें निम्न-स्तरीय इवेंटमॉडल की तुलना में बहुत अधिक मेमोरी फ़ुटप्रिंट है।

साथ ही, XSSF के साथ नए OOXML-आधारित फ़ाइल स्वरूप तक पहुँचने और हेरफेर करने से पुरानी HSSF समर्थित बाइनरी फ़ाइलों की तुलना में बहुत अधिक मेमोरी फ़ुटप्रिंट है।

POI 3.5 के बाद से, HSSF और XSSF मॉडल को SS मॉडल में जोड़ दिया गया है, बल्कि दोनों मॉडलों के लिए काम करने के लिए इसमें बदलाव किया गया है। यह वास्तविक परिवर्तन की तुलना में नाम का अधिक परिवर्तन है। एक तरह से हम कह सकते हैं कि SS=HSSF+XSSF।

डेटाबेस तालिका डेटा को एक्सेल स्प्रेडशीट में माइग्रेट करना

यहां, हम कुछ डेटाबेस डेटा को एक्सेल शीट में माइग्रेट करने के लिए एक सरल उपयोगिता प्रोग्राम तैयार करेंगे। इसे अन्य तरीकों से काम करने के लिए भी ट्वीक किया जा सकता है, जैसे कि एक्सेल डेटा को डेटाबेस टेबल पर माइग्रेट करना। इसे पाठक के लिए एक अभ्यास के रूप में छोड़ दिया गया है। कार्यक्रम सरल और आत्म-व्याख्यात्मक है। किसी भी वर्ग या विधियों के बारे में विस्तृत जानकारी के लिए Apache POI Documentation पर जाएं। निम्नलिखित उदाहरण को आजमाने के लिए, हमने जो प्रयोग किया है वह इस प्रकार है:

  • JDK 8
  • एमएस एक्सेल 2007
  • इंटेलिज आईडिया आईडीई
  • अपाचे पीओआई 3.17
  • अपाचे डर्बी 10.14

परियोजना की स्थापना के लिए उपयुक्त दस्तावेजों और सहायता फाइलों पर जाएं। हमारे द्वारा उपयोग की गई मावेन pom.xml फ़ाइल की सामग्री यहां दी गई है।

<project 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>

   <groupId>com.mano.examples</groupId>
   <artifactId>apache-poi-demo</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>jar</packaging>

   <name>apache-poi-demo</name>
   <url>http://maven.apache.org</url>

   <properties>
      <project.build.sourceEncoding>
         UTF-8
      </project.build.sourceEncoding>
   </properties>

   <build>
      <plugins>
         <plugin>
            <artifactId>
               maven-compiler-plugin
            </artifactId>
            <version>3.7.0</version>
            <configuration>
               <source>1.8</source>
               <target>1.8</target>
            </configuration>
         </plugin>
      </plugins>
   </build>

   <dependencies>
      <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>3.8.1</version>
         <scope>test</scope>
      </dependency>

      <!-- https://mvnrepository.com/artifact
         /org.apache.maven.plugins/maven-compiler-plugin -->
      <dependency>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-compiler-plugin</artifactId>
         <version>3.7.0</version>
      </dependency>

      <!-- https://mvnrepository.com/artifact/
         org.apache.poi/poi -->
      <dependency>
         <groupId>org.apache.poi</groupId>
         <artifactId>poi</artifactId>
         <version>3.17</version>
      </dependency>

      <!-- https://mvnrepository.com/artifact/
         org.apache.poi/poi-ooxml -->
      <dependency>
         <groupId>org.apache.poi</groupId>
         <artifactId>poi-ooxml</artifactId>
         <version>3.17</version>
      </dependency>

      <!-- https://mvnrepository.com/artifact/
         org.apache.derby/derby -->
      <dependency>
         <groupId>org.apache.derby</groupId>
         <artifactId>derby</artifactId>
         <version>10.14.1.0</version>
         <scope>test</scope>
      </dependency>

      <!-- https://mvnrepository.com/artifact/
         org.apache.derby/derbyclient -->
      <dependency>
         <groupId>org.apache.derby</groupId>
         <artifactId>derbyclient</artifactId>
         <version>10.14.1.0</version>
      </dependency>

   </dependencies>
</project>

लिस्टिंग 1: pom.xml

उपयोगिता कार्यक्रम चलाने से पहले कुछ डमी रिकॉर्ड के साथ एक डेटाबेस तालिका बनाई जाती है। यहाँ उस फ़ाइल का कोड है।

package com.mano.examples;

import java.sql.*;


public class DummyDatabase {

   public static void createDummyDatabase()
         throws SQLException {
      Connection con=DriverManager.getConnection
         ("jdbc:derby:D:/temp/dummy;create=true");
      Statement stmt=con.createStatement();
      stmt.executeUpdate("drop table semester2");
      stmt.executeUpdate("CREATE TABLE semester2(STUDENT_ID int,
         CARCH INT, DCE INT, WEBTECH INT, JAVA INT, SAD_MIS INT,
         PRIMARY KEY(STUDENT_ID))");

      // Insert 2 rows
      stmt.executeUpdate("insert into semester2
         values (23567932,56,78,97,58,85)");
      stmt.executeUpdate("insert into semester2
         values (47250001,96,34,75,68,12)");
      stmt.executeUpdate("insert into semester2
         values (99568955,45,68,69,78,29)");
      stmt.executeUpdate("insert into semester2
         values (89376473,75,23,56,89,47)");
      stmt.executeUpdate("insert into semester2
         values (29917740,85,78,55,15,48)");
      stmt.executeUpdate("insert into semester2
         values (85776649,23,56,78,25,69)");
      stmt.executeUpdate("insert into semester2
         values (38846455,68,95,78,53,48)");
      stmt.executeUpdate("insert into semester2
         values (40028826,63,56,48,59,75)");
      stmt.executeUpdate("insert into semester2
         values (83947759,85,54,69,36,89)");
      stmt.executeUpdate("insert into semester2
         values (92884775,78,59,25,48,69)");
      stmt.executeUpdate("insert into semester2
         values (24947389,12,10,14,54,68)");
      stmt.executeUpdate("insert into semester2
         values (77399465,44,33,26,88,77)");

      // Query
      ResultSet rs = stmt.executeQuery
      ("SELECT * FROM semester2");

      // Print out query result
      while (rs.next()) {
         System.out.printf
               ("%dt%dt%dt%dt%dt%dn",
            rs.getLong("STUDENT_ID"),
            rs.getInt("CARCH"),
            rs.getInt("DCE"),
            rs.getInt("WEBTECH"),
            rs.getInt("JAVA"),
            rs.getInt("SAD_MIS"));
      }
      stmt.close();
      con.close();
   }
}

लिस्टिंग 2: DummyDatabase.java.

यह वह उपयोगिता कार्यक्रम है जिसके बारे में हम बात कर रहे हैं। कोड बड़ी जल्दबाजी में लिखा गया था और संरचना बहुत सुंदर नहीं थी। हालाँकि, यह काम करता है। जैसा आप उचित समझें, उसका पुनर्गठन करें या उसमें बदलाव करें।

package com.mano.examples;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;


import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.*;

public class SSFile {

   private static String[] header={"STUDENT_ID",
      "CARCH", "DCE", "WEBTECH", "JAVA",
      "SAD_MIS", "TOTAL", "AVERAGE"};

   public static void databaseToExcel(File file)
         throws IOException, SQLException {
      Workbook workbook = null;
      if (file.getName().endsWith(".xls"))
         workbook = new HSSFWorkbook();
      else if (file.getName().endsWith(".xlsx"))
         workbook = new XSSFWorkbook();
      else {
         System.out.println("Invalid filename!");
         return;
      }
      Sheet sheet = workbook.createSheet();
      Connection con = DriverManager.getConnection
         ("jdbc:derby:D:/temp/dummy;create=true");
      Statement stmt = con.createStatement();
      ResultSet rs = stmt.executeQuery("SELECT * FROM semester2");



      Row rr = sheet.createRow(0);
      for(int i=0;i<header.length;i++){
         createHeaderCell(rr, (short) i, header[i]);
      }

      int i = 1;
      while (rs.next()) {
         rr = sheet.createRow(i++);
         for(int j=0;j<header.length-2;j++){
            createDataCell(rr, (short) j,
               rs.getLong(header[j]));
         }
      }
      rr = sheet.getRow(1);
      Cell total = rr.createCell(6);
      total.setCellType(CellType.FORMULA);
      total.setCellFormula("SUM(B2:F2)");
      Cell avg = rr.createCell(7);
      avg.setCellType(CellType.FORMULA);
      avg.setCellFormula("AVERAGE(B2:F2)");

      FileOutputStream outFile = new
         FileOutputStream(file);
      workbook.write(outFile);
      outFile.flush();
      outFile.close();
      stmt.close();
      con.close();
   }

   private static void createHeaderCell(Row row,
         short col, String cellValue) {
      Cell c = row.createCell(col);
      c.setCellValue(cellValue);
   }

   private static void createDataCell(Row row,
         short col, Number cellValue) {
      Cell c = row.createCell(col);
      c.setCellType(CellType.NUMERIC);
      c.setCellValue(cellValue.doubleValue());
   }
}

लिस्टिंग 3: SSFile.java

यह वह नियंत्रण कक्ष है जिससे उपयोगिता कार्यक्रम लागू किया जाता है।

package com.mano.examples;

import java.io.File;
import java.io.IOException;
import java.sql.SQLException;

public class App
{
   public static void main( String[] args )
         throws IOException,SQLException{
      // DummyDatabase.createDummyDatabase();
      SSFile.databaseToExcel(new
         File("d://temp//test1.xls"));
   }
}

सूची 4 :ऐप.जावा

दौड़ने से पहले...

सुनिश्चित करें कि test1.xls या test1.xlsx फ़ाइलें d://temp . में मौजूद नहीं हैं प्रोग्राम चलाने से पहले निर्देशिका क्योंकि प्रोग्राम न तो ओवरराइट करता है और न ही उस निर्देशिका में उसी नाम से फ़ाइल की जाँच करता है जहाँ फ़ाइल बनाई जानी चाहिए। हर बार प्रोग्राम चलाने पर इसे सुनिश्चित करें; अन्यथा, कोड एक बुरा त्रुटि संदेश देता है। हालाँकि, आप कुछ जाँच करने के लिए कोड में बदलाव कर सकते हैं।

निष्कर्ष

स्प्रेडशीट के साथ काम करने का एक और विकल्प है, जैसा कि अपाचे पीओआई दस्तावेज़ीकरण कोकून सीरिएलाइज़र के माध्यम से सुझाता है, हालांकि यह अभी भी अप्रत्यक्ष रूप से एचएसएसएफ का उपयोग करता है। कोकून किसी भी एक्सएमएल डेटा स्रोत को स्टाइल शीट लागू करके और सीरिएलाइज़र नामित करके क्रमबद्ध कर सकता है। HSSF और XSSF मॉडल काफी शक्तिशाली हैं और एक्सेल दस्तावेज़ के विभिन्न पहलुओं से निपटने के लिए कई वर्ग और विधियाँ प्रदान करते हैं। इस लेख ने अपाचे पीओआई के साथ हम क्या कर सकते हैं इसकी एक झलक देने की कोशिश की। खुले और बंद सिस्टम के बीच पुल करने के लिए हमें अक्सर एक उपयोगिता कार्यक्रम लिखने की आवश्यकता होती है। Apache POI निश्चित रूप से अपनी तरह के एक उद्देश्य के रूप में हमारे उद्देश्य की पूर्ति कर सकता है।

संदर्भ

  • अपाचे पीओआई - माइक्रोसॉफ्ट दस्तावेज़ों के लिए जावा एपीआई
  • पीओआई-एचएसएसएफ और पीओआई-एक्सएसएसएफ - माइक्रोसॉफ्ट एक्सेल प्रारूप फाइलों तक पहुंचने के लिए जावा एपीआई

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. आखिर डीटीयू क्या है?

  2. ASPState में संभावित संवर्द्धन

  3. शुरुआती के लिए SQL COUNT ()

  4. स्थानीयकरण-तैयार प्रणाली कैसे डिज़ाइन करें

  5. Catcon.pl . के साथ मल्टीटेनेंट वातावरण में SQL स्क्रिप्ट चलाएँ