From b47fb18816bbc7c9723290930ad3098fb60eeb4c Mon Sep 17 00:00:00 2001 From: MohamedHelmyKassab <137485958+MohamedHelmyKassab@users.noreply.github.com> Date: Tue, 19 Mar 2024 19:06:41 +0200 Subject: [PATCH] This PR is related to BAEL-6922 (#16171) * Update pom.xml * Add files via upload * This commit is related to BAEL-6922 This commit aims to add a test class named ExcelToJsonUnitTest that provides ways to convert Excel to JSON in Java. * Update ExcelToJsonUnitTest.java * Update ExcelToJsonUnitTest.java --- json-modules/json-conversion/pom.xml | 5 ++ .../exceltojson/ExcelToJsonUnitTest.java | 84 ++++++++++++++++++ .../src/test/resources/Book1.xlsx | Bin 0 -> 8878 bytes 3 files changed, 89 insertions(+) create mode 100644 json-modules/json-conversion/src/test/java/com/baeldung/exceltojson/ExcelToJsonUnitTest.java create mode 100644 json-modules/json-conversion/src/test/resources/Book1.xlsx diff --git a/json-modules/json-conversion/pom.xml b/json-modules/json-conversion/pom.xml index 9eebac16b4..624af3181a 100644 --- a/json-modules/json-conversion/pom.xml +++ b/json-modules/json-conversion/pom.xml @@ -29,6 +29,11 @@ jackson-databind ${jackson.version} + + org.apache.poi + poi-ooxml + 5.2.3 + com.google.guava guava diff --git a/json-modules/json-conversion/src/test/java/com/baeldung/exceltojson/ExcelToJsonUnitTest.java b/json-modules/json-conversion/src/test/java/com/baeldung/exceltojson/ExcelToJsonUnitTest.java new file mode 100644 index 0000000000..ec7e5ff841 --- /dev/null +++ b/json-modules/json-conversion/src/test/java/com/baeldung/exceltojson/ExcelToJsonUnitTest.java @@ -0,0 +1,84 @@ +package com.baeldung.exceltojson; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.json.JSONArray; +import org.junit.Test; + +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +import static org.junit.Assert.assertEquals; + +public class ExcelToJsonUnitTest { + public static String filePath = Objects.requireNonNull(ExcelToJsonUnitTest.class.getClassLoader().getResource("Book1.xlsx")).getFile(); + public String expectedJson = "[[\"C1\",\"C2\",\"C3\",\"C4\",\"C5\"]," + + "[\"1.0\",\"2.0\",\"3.0\",\"4.0\",\"5.0\"]," + + "[\"1.0\",\"2.0\",\"3.0\",\"4.0\",\"5.0\"]," + + "[\"1.0\",\"2.0\",\"3.0\",\"4.0\",\"5.0\"]," + + "[\"1.0\",\"2.0\",\"3.0\",\"4.0\",\"5.0\"]]"; + private Workbook workbook; + private Sheet sheet; + private InputStream inputStream; + + public ExcelToJsonUnitTest() throws IOException { + inputStream = new FileInputStream(filePath); + workbook = new XSSFWorkbook(inputStream); + sheet = workbook.getSheetAt(0); + } + + @Test + public void givenExcelFile_whenUsingApachePOIConversion_thenConvertToJson() { + JSONArray jsonArray = new JSONArray(); + + Row headerRow = sheet.getRow(0); + List headers = new ArrayList<>(); + for (Cell cell : headerRow) { + headers.add(cell.toString()); + } + jsonArray.put(headers); + + for (int i = 1; i <= sheet.getLastRowNum(); i++) { + Row row = sheet.getRow(i); + List rowData = new ArrayList<>(); + for (Cell cell : row) { + rowData.add(cell.toString()); + } + jsonArray.put(rowData); + } + + assertEquals(expectedJson, jsonArray.toString()); + } + + @Test + public void givenExcelFile_whenUsingJacksonConversion_thenConvertToJson() throws JsonProcessingException { + List> data = new ArrayList<>(); + + Row headerRow = sheet.getRow(0); + List headers = new ArrayList<>(); + for (Cell cell : headerRow) { + headers.add(cell.toString()); + } + data.add(headers); + + for (int i = 1; i <= sheet.getLastRowNum(); i++) { + Row row = sheet.getRow(i); + List rowData = new ArrayList<>(); + for (Cell cell : row) { + rowData.add(cell.toString()); + } + data.add(rowData); + } + + ObjectMapper objectMapper = new ObjectMapper(); + String json = objectMapper.writeValueAsString(data); + + assertEquals(expectedJson, json); + } +} diff --git a/json-modules/json-conversion/src/test/resources/Book1.xlsx b/json-modules/json-conversion/src/test/resources/Book1.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..592c78c8286ad0a41599375bd80720ef46672907 GIT binary patch literal 8878 zcmeHNg5`IWh@pFgL0U>AMN+!Eh6X7~=@1ZU5TxTbdhWfR z!#Tgd;NCsY?0M#UzO|m&d#`uBYu@##D?x2>NI*<%;uVn zu9wM5ZEj2rJX6mt;FmZduUoMeN0uKnw+T?G@RC&(Mw}EG^uD%dZTB9DG^Kq9-jfI+eg+Am2x|c`ge;H<|q#yc2X~1F|6WKbT5-zHf6@Xwp1md zb!1z~>&ui@6B1wn2Nd)VGzdb~_ADs;obtzz*AZpT?+8wDx0;TjQaA%p8hZb*y_Nng zVc*?P8-_3UkKSwra^F4x0PgM(0P25%Wvw*BzSz!4f%A;)C4yXF zYryr#`9+cF?S7imFT5p@cm%?9b)Kb=il0XTAregqHt1E+Uot;0gPW4l+AD=r)C**7Cyb^A zetwg`g(?0@NO^ZWg|Oev+btRH~}HM~cI8Q$Fjs9nYVhXdfqhaZ+;4E1-AfT`<=%n<+peHfKt z!*<5Yfx{E%YHtn%+W+LO5^YCd+7pr+v8`L=ZcpO0dYnlR8pjw*t=80wy=27%^n5+I zA-;SC?Y;H`E_&N$BV((@?C#zGs+iFux83xBrOBkDZp%Iy9-aYIe#~i0+Rfp$q3b%M zEGX|2nY47BY%`wY6!)*2)q!FeWuZo*D3#oRtgRO>3ZIc1=p-kV_ zs4BWi<@{LF1IPLDn(3q><(%vcMYl3NF&;)v0{c@ZsZ+fB*%(ev+6zOV@!vuI-lS9I6-5S;IIVBX4^%RF|dfv(QBlX zs$YwNbe|>3aulbKhMg@xc^&x9WKydCD#V?YVeU$xH#e+cMW951r}Q&?2VLROh3*kl z1tNT9%xnui_I8D1Xn3!tj>F{JCR)B(vDR@$Ea2ksjvmXEvo20JL)K=W!;fI4FoFJd zp@aSwjwScu3-D>t0+GJOh%zyY4^C5VnsLZV#pcD%C5P9QWYb;VY)^nq-sO|#4Tr_n zIZ5p3VM?HDWoF8&nXIoDH_oDn2VP~0hxnO-uenG3&8{mEdqZ$c(@f`5XNUYy7XSqV z=~?~JbnB{*P$R(fvN7bN88dXYis`{|KOp1IF7UPQ1yVb91unT6oS*KP9I%TFs+ZG@ zx^X`Po*Bp%V+@rx)3_*Bh)$6@CJ6U1HI(Zeji7(=gt4fL8*fA*^yfee(fiL{y zk!`$eW?5|8c~`s34dyA9=N(h3l|r6@VruD1;I~vl+&!p54)w~_8;5lyT#umaW@_~H zcxG9R_2zyhq8I@hg>;`t-715CqmDtw3P?SvwkU16++4RljV&VFXSBuv?S>e#muj`s>X?gIR8<~)B3G#Y1jk^p z#N=Zb44Yt_MFv2DgTe6++WIpn|4m_Vu!<4}>i_OhqN$?P&56^BejCQ=ndU)=I}75V z-PPW~Mj5DKo_|Ec6L7Lj&eCM8H?72h0EBoS4EK4Q@nL;I!2i*~`XK@j(Ffn*Ko|)) zd_0VRV!l^O1(rj?$J^cBDc(cJN_E3;6pQa?%Onu|dd|c^8kUn!D}B;94&k*M;dJM= zbNfX35thOSYu1A? z$-#^Dfxf9_*h&9AgR=rz{f}VbqK6CskihQvR|a>pv9bcWas2w=`kBhp;|+m1oH(J& zx^s8WFEU8_tx(Yln?mibboTNNVo1S+rh4;@h1-D#5{WgMCfSPA(a2ZAZio5{lr^-% z&L#$0pDYQq;ALkFQr#u*Zv3OT75!H7zkVcR`i3jgY8Y@=H)B|T^jLygp0h2>5yg1q zE%9TUeYrY>m!@Ppyx0vO`>(>tEmT;xJ>!CzT*G! zz-=+bmT!6|c#Go0*itQz*e+AFkD1CI*^*k%3bH2%G#O3e0UJDJD0q=t)xO&)&bo4~ zZ_0Eo1r{l+6pLp`AWB4s#EWIJ+6&zDGCK6gpL9Vo`(<7Wdjay$3~r$zcMo|hq~Sa? z&W+wpQH4o}3u`{@s%N>byE3Kz>?kqIJh$r>|G5vZ1sarn$h6lN06V(7yI-f9I5CFx zl#>LqY8Yn%Rdk`9vYZT+|7u8 zN~bLk`_9LP{QFyxrs+qK`l=v87MH0H(zzPCgV!cxlYXXeGja2qrJk`!=lz^Sab8%5 z%$DIKp=lKUoUlV~EpG!A3yz<#TqgZ->F4!}OEv#r#m27{@eX&Ob#me$elkV9g44m> z%G>HmKz`qjGw+BunNgunaJR&=&JV=md8&X@C!)5k^U9b=4cYaSc~`+1(xPV%Q5V2s zkZyYrtzYDOXqS1~oSFXhtpR^xpf9cGOVUi0@UG6wiMTpOy{@|X*7s+rZym2;VE8*s zDrGQtjbQr>PxJFn`Y)J(Y^)ruIDXB)5VEVU6iY6E*M{65NPWq^GgaCLt$JU;cpByC zWy#^XE}xi6<)KAgNQxdD3>DhIqn7ZfOh!7b3!|0~Le!&6z9vE7ubO>WDdVA}67#{! zA(mK`lLs1=dRe4b!V*xzZqj~1Z}u$_MZtRxwdgYo9PL(!n(dPVMC`sCO;!obRZs+} zngXL9F6lzc(UIKeqs#~eDV+WSS8PwPUSW?(BO4=U)CON0HM5_<8f^y}RZoiu;W@_1 zqY|UyXJi|Q6TA}4suFvxvr(!jMcPH~&%lATWMuX~I--9_KYb8e81M7EvpX&mvYW{7 zI+0K$JD9Y~6RgU$gUET8_%3jD!LH>Eri-XwQF06z>fLpxLh@Dfk zFh!{6+Kb1QMAj^)c?<|pc3guDn_0}veB%L#q(F;!42?2|4aA2kiI}dwjfvV|ZEGU~ zx5|OD3(+U#F9ouc0~1BQA~pa!qZWVCX1(7C(t z`%lDPoam{8BsRI|SK$kcI-T=$NVT^Qb?+cw6T;b-=w{-l`N7(*_VV+Pb?Hx`+lcj& z_Rl3v!~$=>%&Ku@-dyz%o3?nJ`is?TZ1nG~ft&_!PRq;hu3|^W0t2o$fy>u?X_q1< zbLYCt{ukSurU7cAB@NC!gY7qm+XW9zZf}ZB+i!YvT3HV(F&|EZ$b*v8-y@3zBl+wy z_I(+q@8!ymL5z{Cm;0gKgLSx%#`CaD&WKnH4=O0OQo3Q$H=U!$M)+gMk5QFkg=Vv) zFZ45<=ZVpqu)aai{yQT!#|4BaHGj7=mu*C^1|z_p=DUvp$`m{YJn1YVjLaJHfqiNy zMFZY*!2m7#j3~hEEgfKPs()G zL5D1^-*Wav*B@%Gb{Dut;lB{R1{BX&ua7AzJ1nTPygEtejDcv;=Ba(n4EkXp*^Yp* zhJ8h2$iS}2GzmMPe~~i#9SxS?BI&+d zqTp(PD6R;iYpn_ko^)U}L8jgk?ZRR#D}PsaAGdLw;O-pZWEy4b#)85gf)t5ZmzLD0 zE;SLNlk?6aZ?ls<5!n;C78FZP1s`zXk zwr%Jdo|?p}LL5m;776&|UddA7C>LMcKZ>G0DOso5ANLXO9huF0mnUwj+Znzrb4s#1 z*avLlkc6~UV&Ghb`t$S-rDVy!<$}O>$<%YAmt?i~DO= z+jE#saqHF&X+K``z4GCxRn};eu+jqgDc>OSNGiU>6{LS-MImfcEe`w^@m)r1%2R|+LJZZ}G!v%mMXgsAK!rB68es1L5c zR;$LcsV!>GND*ex>G5Kii+b9pX!T9D`rEeSWSZF40?7RH1Dja^uFljUzU+Oj>_)1P zSJ#=iFRYTyW#%npl!{Hm>?nJpS)ny5&sKhrcPRNXzUnNg#)uYTnksmrs-NIZX-t`} z6n(;O%`J?OwP0c`fxA^#=f3&T?xo7x?-FYlKe$Pcu(irs<+8FWRgp* z*}Rn;jVHDA4A)+TX|o|Xk6){TAj2IjD+)Gzi)sP_lY(MbEvkYR;w~{Us)dXuloR{; zuje@jrR4db+#?iD@{ATQLs)2WaugUp4K7g2+_uJt%XMbGZ6&i%_2P z(>j_e+Pe`-Wud(}-Di)&s$7PMxJJ|n(uQ~%XvU(2zS^!K>@b`12!iHA``rAYZO4UI zmpKN$BecU`hCq5U?@|M}{R6{Vth8NTJ<+k6bX+R8>TuuV`z)F5qZa--y@^;5hixKa zfMTMiXP&o2Ncf?_D`d!*0Y?yOOrij3N{wiA`OpLaqtdC-A9g#;qz&kz^b;&M*dZWl(fj}Dy{{i6J2}a z=5KNYDBr4O9Vg4`eWNv-mnf4uCCjz#&d6KGv&Mi}vM&QB?P4<@e47mFa%z3Z4=L5m znL9}Cl$GJgn_}ndGAJeIZ!R^P@lQ?WT?vg+bZrkRj*b?%{Z-oBm*%8%*NrP+G+h7_ z?lAu#V>ghugO%IQLN!-g1vt-%(TY72hy(JpYIb>pSQnXB7!1G2NljT%Y(5yS?oSdQ zFGPO2EH|sVmes{yll+#puuo3Yay(534fMR%wUnE}IFy7-dpn}o5z;P3)PX^_^P%X& zrwFU_ezvxO<#we~VYIp>uCF)}OlhkbZo^<4!~M6pr-}l~!FkiNn#gk140T*lI@6}{ z;BGTPhIrRd-;hwYJ7j6i;~F4Xa}e^RZ57;X5f&Q9Mto+Nhq;K7H7AR2kjclk zAa|ne6`i+j%~WkOyixW}YVt0_qEHIHL1rA_!d+fNs`H%oY`O){RtiJdd08yIpjKxj zTk{}k&>2J8AC*W=F;F*DKr#%uT%=a~Q!v^m>9^~)g`xcYk~>+h8L}D!KCy-@=e^Dc zI$8rgmAZW}%*}IvhOyUX-A5riW0a(e_`z#QI zn7!IW1vqaeeC@w+MI?+NjUx?BMDr6y4HovdWwx@YAr(`u+njrBwyO#pHjj;TBz&BR zm?+hGc7B=egaMzc#Z5CEklQvzJmVNWX+kuUGnx7CYv%E6|l) z*Vc{Pjk||FKDrur;0Y1GqNH9C!osns-t2Vwf!rCSU%QDH(uOcH>ZY5%$)p}0F$LmS zSgYphvcAACJ~!z^#4s^Emu$wOg9nyKpZ3ASlmI*f7?lr`sQ3^;DD3{;+JG=~v}!#N9Df zs9S&)UHge%@RkA9bsJIWu4}#h9|g4z_3WEMSV&*O-UR;&Z5uOJD@!eqtF4puuL!ps zQTbUCLsnZ?C_8ugN&{cfZ%G{@`UHK7;s2y;XU*c{OUK0C$96D6m^9Hx zD>$@5Rh6u?(7}tEnV05AljrQX23|BzH@@<8v9SQdAJ@>{NZOYfMr9@!%6&|>C(BMw z?^1CS&jL2cB+hJUYwUtff+ePG=_@Oc_%s`0y{>C{DAI8~*`kT8PYT+qQu}>q)50C@ zvX2k;VW9kb2~8;_M?wo*G%gIexBzN6OQ40iE6~}E!vg4P^+%VB;(wY1?9Bhakr*cm zlbdlMp7gg**F{~#&YXPaXJ z3x0&NhFVf6GJ&Z>cRD!kbQDaZ|5~#l;Z!(!jeRlQxHCn}fa|6IvYbDE)as_%;r_*z zyB;6G_O&jCy0$Za4c!pH9g4s~o$R6YJyTR<+VEMPiw|+H{@apmdPZ;A@#`EYKHs!y z==eixj#~?(1cz2mRd5lsJx1>awq<`0I5P!QobaCk2NS4qU~1TZ0?y3Y`Hy%*{9nAm zb}l_$@+V`49w1yk#8@O3T2#jfE-{zaJ*hB*i?6d*$+vi4MgOWKZufI+-Pq);&vx{> zuh*rt!Xm{J)05X@J?h~b*#t<4ES1$y9w}OEu*D&1FHgkh#N$^MHz#r1Z#$t-9x?RXI8AN$K@=_R(Q{ z$UD7Whz!dQwyB0HYNB08YqxEuUgo_;2L*aL>Smui;yg%KJb5IH|EluA{A5(En!LVv z&vn#e!25WIw-5`Vvl06<84fuF;>})~=kR8$6fT?n2)B0pk0yk>2ZfIMIgeBY=YxSy z+(raUQq(RPeJPtQJL5vNesqOe`^h(Z*`t_z_7;0KKW+Kp0!ej840BQx$bCg)xtLlJ zb~$z2&M9)ccGC6ZyN^Zy`-QPJ55w|p)h+tJ!xs+zF)Z!>^OFJh)51SIC!ntMR|kLX zVgA`cG7J-c>S*3Kyx-UPZQ25>x$bp&?i>GAh5l^{04SmTGX8%w>HB`}OOwAn1z`N= zNBm8wyzk|{a`W3u9;{;pTgrVM=e~pc)#h&p+{C{e{H{Iko8D*h-=>&kf0*9q_WK_G zN}9jz0f28X5C6$%|EAFU=6_9re>T^r{FC{=5~8{i66|yV05sSu2*%PR)IY!dA3n5N A761SM literal 0 HcmV?d00001