Како читати / писати податке из Екцел датотеке: ПОИ тачке селена

Датотека ИО је критични део сваког софтверског процеса. Често стварамо датотеку, отварамо је и нешто ажурирамо или бришемо на нашим рачунарима. Исти је случај са Селениум Аутоматион. Потребан нам је поступак за манипулисање датотекама помоћу селена.

Јава нам пружа различите класе за манипулацију датотекама помоћу селена. У овом упутству научићемо како можемо читати и писати у Екцел датотеци уз помоћ Јава ИО пакета и Апацхе ПОИ библиотеке.

Апацхе ПОИ у селену

Апацхе: ПОИ у Селен је широко се користи АПИ за селена података погон тестирање. То је ПОИ библиотека написана на Јави која корисницима даје АПИ за манипулисање Мицрософт документима попут .клс и .клск. Корисници могу лако креирати, мењати и читати / писати у екцел датотеке. ПОИ је скраћеница од „Лоша примјена замућења“.

  • Како се рукује Екцел датотеком помоћу ПОИ (Мавен ПОМ Депенденци)
  • Класе и интерфејси у ПОИ
  • Операција читања / писања
  • Читање података из Екцел датотеке
  • Напишите податке у Екцел датотеку
  • Екцел манипулација помоћу ЈКСЛ АПИ-ја

Извоз Екцел-а

Како се рукује Екцел датотеком помоћу ПОИ (Мавен ПОМ Депенденци)

За читање и писање Екцел датотеке на Јави, Апацхе пружа врло познату ПОИ библиотеку. Ова библиотека је довољно способна за читање и писање КСЛС и КСЛСКС формата датотека програма Екцел.

ПОИ библиотека омогућава читање КСЛС датотека, имплементацију ХССФ-а .

Да бисте прочитали КСЛСКС, КСССФ имплементација ПОИ библиотеке ће бити избор. Проучимо ове примене детаљно.

Ако у свом пројекту користите Мавен, зависност од Мавена ће бити

<зависност><гроупИд> орг.апацхе.пои <артифацтИд> пои <версион> 4.1.1 

Или можете једноставно преузети најновију верзију ПОИ теглица са хттп://пои.апацхе.орг/довнлоад.хтмл и преузети најновију зип датотеку

Када преузмете зип датотеку за ову теглу, морате да је распакујете и додате све ове тегле на пут предавања вашег пројекта.

Класе и интерфејси у ПОИ:

Класе и интерфејси у Апацхе ПОИ

Следи листа различитих Јава интерфејса и класа у ПОИ за читање КСЛС и КСЛСКС Филе-

  • Радна свеска: Класе КСССФВоркбоок и ХССФВоркбоок имплементирају овај интерфејс.
  • КСССФВоркбоок : Је ли класа представљање КСЛСКС датотеке.
  • ХССФВоркбоок : Представља класу КСЛС датотеке.
  • Лист : Класе КСССФСхеет и ХССФСхеет имплементирају овај интерфејс.
  • КСССФСхеет : Да ли је класа која представља лист у КСЛСКС датотеци.
  • ХССФСхеет : Да ли је класа која представља лист у КСЛС датотеци.
  • Ред : Класе КСССФРов и ХССФРов имплементирају овај интерфејс.
  • КСССФРов : Да ли је класа која представља ред у листу КСЛСКС датотеке.
  • ХССФРов : Да ли је класа која представља ред у листу КСЛС датотеке.
  • Ћелија : Класе КСССФЦелл и ХССФЦелл имплементирају овај интерфејс.
  • КСССФЦелл : Да ли је класа која представља ћелију у низу КСЛСКС датотеке.
  • ХССФЦелл: Да ли је класа која представља ћелију у низу КСЛС датотеке.

Операција читања / писања-

За наш пример, у наставку ћемо размотрити дати формат датотеке Екцел

Читање података из Екцел датотеке

Комплетан пример: Овде покушавамо да читамо податке из програма Екцел у селенијуму:

пакет екцелЕкпортАндФилеИО;импорт јава.ио.Филе;импорт јава.ио.ФилеИнпутСтреам;импорт јава.ио.ИОЕкцептион;импорт орг.апацхе.пои.хссф.усермодел.ХССФВоркбоок;импорт орг.апацхе.пои.сс.усермодел.Ров;импорт орг.апацхе.пои.сс.усермодел.Схеет;импорт орг.апацхе.пои.сс.усермодел.Воркбоок;импорт орг.апацхе.пои.кссф.усермодел.КСССФВоркбоок;јавна класа РеадГуру99ЕкцелФиле {јавна празнина реадЕкцел (Стринг филеПатх, Стринг филеНаме, Стринг схеетНаме) баца ИОЕкцептион {// Стварање објекта класе Филе за отварање клск датотекеДатотека датотеке = нова датотека (филеПатх + "\\" + филеНаме);// Створимо објекат класе ФилеИнпутСтреам за читање екцел датотекеФилеИнпутСтреам инпутСтреам = нови ФилеИнпутСтреам (датотека);Радна свеска гуру99Воркбоок = нулл;// Пронађите екстензију датотеке тако што ћете поделити име датотеке у подниз и добити само име екстензијеСтринг филеЕктенсионНаме = филеНаме.субстринг (филеНаме.индекОф ("."));// Провери стање да ли је датотека клск датотекаиф (филеЕктенсионНаме.екуалс (". клск")) {// Ако је датотека клск, онда креирајте објекат класе КСССФВоркбоокгуру99Воркбоок = нова КСССФВоркбоок (инпутСтреам);}// Провери стање да ли је датотека клс датотекаиначе ако (филеЕктенсионНаме.екуалс (". клс")) {// Ако је датотека клс, онда креирајте објекат класе ХССФВоркбоокгуру99Воркбоок = нова ХССФВоркбоок (инпутСтреам);}// Читање листа у радној свесци под његовим називомЛист гуру99Схеет = гуру99Воркбоок.гетСхеет (листНаме);// Пронађи број редова у екцел датотециинт ровЦоунт = гуру99Схеет.гетЛастРовНум () - гуру99Схеет.гетФирстРовНум ();// Направите петљу преко свих редова екцел датотеке да бисте је прочиталифор (инт и = 0; и <ровЦоунт + 1; и ++) {Ред реда = гуру99Схеет.гетРов (и);// Стварање петље за испис вредности ћелија у низуза (инт ј = 0; ј <ров.гетЛастЦеллНум (); ј ++) {// Штампање Екцел података у конзолиСистем.оут.принт (ров.гетЦелл (ј) .гетСтрингЦеллВалуе () + "||");}Систем.оут.принтлн ();}}// Главна функција позива функцију реадЕкцел за читање података из екцел датотекепублиц статиц воид маин (Стринг ... стрингови) баца ИОЕкцептион {// Стварање објекта класе РеадГуру99ЕкцелФилеРеадГуру99ЕкцелФиле објЕкцелФиле = нови РеадГуру99ЕкцелФиле ();// Припремите путању до екцел датотекеСтринг филеПатх = Систем.гетПроперти ("усер.дир") + "\\ срц \\ екцелЕкпортАндФилеИО";// Позовите метод читања датотеке класе за читање податакаобјЕкцелФиле.реадЕкцел (филеПатх, "ЕкпортЕкцел.клск", "ЕкцелГуру99Демо");}}

Напомена: Овде не користимо Тестнг фрамеворк. Покрените класу као Јава апликацију користећи функцију реад екцел у Селенијуму као што је приказано у горњем примеру.

Напишите податке у Екцел датотеку

Комплетан пример: Овде покушавамо да запишемо податке из Екцел датотеке додавањем новог реда у Екцел датотеку

пакет екцелЕкпортАндФилеИО;импорт јава.ио.Филе;импорт јава.ио.ФилеИнпутСтреам;импорт јава.ио.ФилеОутпутСтреам;импорт јава.ио.ИОЕкцептион;импорт орг.апацхе.пои.хссф.усермодел.ХССФВоркбоок;импорт орг.апацхе.пои.сс.усермодел.Целл;импорт орг.апацхе.пои.сс.усермодел.Ров;импорт орг.апацхе.пои.сс.усермодел.Схеет;импорт орг.апацхе.пои.сс.усермодел.Воркбоок;импорт орг.апацхе.пои.кссф.усермодел.КСССФВоркбоок;јавна класа ВритеГуру99ЕкцелФиле {публиц воид вритеЕкцел (Стринг филеПатх, Стринг филеНаме, Стринг схеетНаме, Стринг [] датаТоВрите) баца ИОЕкцептион {// Стварање објекта класе Филе за отварање клск датотекеДатотека датотеке = нова датотека (филеПатх + "\\" + филеНаме);// Створимо објекат класе ФилеИнпутСтреам за читање екцел датотекеФилеИнпутСтреам инпутСтреам = нови ФилеИнпутСтреам (датотека);Радна свеска гуру99Воркбоок = нулл;// Пронађите екстензију датотеке тако што ћете поделити име датотеке у подниз и добити само име екстензијеСтринг филеЕктенсионНаме = филеНаме.субстринг (филеНаме.индекОф ("."));// Провери стање да ли је датотека клск датотекаиф (филеЕктенсионНаме.екуалс (". клск")) {// Ако је датотека клск, онда креирајте објекат класе КСССФВоркбоокгуру99Воркбоок = нова КСССФВоркбоок (инпутСтреам);}// Провери стање да ли је датотека клс датотекаиначе ако (филеЕктенсионНаме.екуалс (". клс")) {// Ако је датотека клс, онда креирајте објекат класе КСССФВоркбоокгуру99Воркбоок = нова ХССФВоркбоок (инпутСтреам);}// Читање Екцел листа по имену листаЛист листа = гуру99Воркбоок.гетСхеет (листНаме);// Добијање тренутног броја редова у екцел датотециинт ровЦоунт = схеет.гетЛастРовНум () - схеет.гетФирстРовНум ();// Добијте први ред са листаРед реда = схеет.гетРов (0);// Креирајте нови ред и додајте га на крају листаРед невРов = схеет.цреатеРов (ровЦоунт + 1);// Стварање петље преко ћелије новоствореног редаза (инт ј = 0; ј <ров.гетЛастЦеллНум (); ј ++) {// Попуњавање података у редуЋелија ћелије = невРов.цреатеЦелл (ј);целл.сетЦеллВалуе (датаТоВрите [ј]);}// Затвори улазни токинпутСтреам.цлосе ();// Стварање објекта класе ФилеОутпутСтреам за креирање података за писање у екцел датотециФилеОутпутСтреам оутпутСтреам = нови ФилеОутпутСтреам (датотека);// уписујемо податке у екцел датотекугуру99Воркбоок.врите (оутпутСтреам);// затварање излазног токаоутпутСтреам.цлосе ();}публиц статиц воид маин (Стринг ... стрингови) баца ИОЕкцептион {// Направите низ података са истим редоследом којим очекујете да ће бити попуњен у екцел датотециСтринг [] валуеТоВрите = {"Господин Е", "Ноида"};// Стварање објекта тренутне класеВритеГуру99ЕкцелФиле објЕкцелФиле = нови ВритеГуру99ЕкцелФиле ();// Напишите датотеку користећи име датотеке, име листа и податке које треба попунитиобјЕкцелФиле.вритеЕкцел (Систем.гетПроперти ("усер.дир") + "\\ срц \\ екцелЕкпортАндФилеИО", "ЕкпортЕкцел.клск", "ЕкцелГуру99Демо", валуеТоВрите);}}

Екцел манипулација помоћу ЈКСЛ АПИ-ја

ЈКСЛ је такође још једна позната тегла за читање Екцел датотека на Јави и писање датотека. Данас се ПОИ користи у већини пројеката, али пре ПОИ, ЈКСЛ је био само Јава АПИ за Екцел манипулацију. То је врло мали и једноставан АПИ за изврсно читање у селенијуму.

САВЕТИ: Мој предлог је да се ЈКСЛ не користи у било ком новом пројекту, јер библиотека није у активном развоју од 2010. године и недостаје функција у поређењу са ПОИ АПИ-јем.

Преузми ЈКСЛ:

Ако желите да радите са ЈКСЛ-ом, можете га преузети са ове везе

хттпс://соурцефорге.нет/пројецтс/јекцелапи/филес/јекцелапи/2.6.12/

Такође можете добити демо пример у овој зипованој датотеци за ЈКСЛ.

Неке од карактеристика:

  • ЈКСЛ може да чита Екцел датотеку у програму Селениум за радне свеске 95, 97, 2000, КСП, 2003.
  • Можемо да радимо са енглеским, француским, шпанским, немачким.
  • Могуће је копирање графикона и уметање слика у Екцел

Недостатак:

  • Можемо писати Екцел 97 и новије верзије (писање у програму Екцел 95 није подржано).
  • ЈКСЛ не подржава КСЛСКС формат екцел датотеке.
  • Ствара табелу у Екцел 2000 формату.

Резиме:

  • Екцел датотека се може читати Јава ИО операцијом. За то треба да користимо Апацхе ПОИ Јар .
  • У Екцел датотеци постоје две врсте радне свеске, КСЛСКС и КСЛС датотеке.
  • ПОИ има различите интерфејсе Воркбоок, Схеет, Ред, Целл.
  • Ови интерфејси се имплементирају одговарајућим КСЛС ( ХССФВоркбоок, ХССФСхеет, ХССФРов, ХССФЦелл ) и КСЛСКС ( КСССФВоркбоок, КСССФСхеет, КСССФРов, КСССФЦелл ) манипулације датотеке класе.
  • ЈКСЛ је још један АПИ за руковање Екцел-ом у селенијуму.
  • ЈКСЛ не може да ради са КСЛСКС форматом екцела.

Занимљиви Чланци...