Войти
 
 
   
 
  
Новости Notes.ру Библиотека Биржа труда Вопрос - ответ Форум Регистрация Поиск О проекте
Разделы
О Notes
Советы
Шаблоны и примеры
Литература
Презентации
 
Java: внутри файла MS Excel 2007. Часть четвёртая   В публикуемой сегодня части статьи заканчивается описание процедур загрузки электронной таблицы и начинается описание самого интересного - каким образом получить данные, хранящиеся в ячейках таблицы
Шаблоны и примеры Читать статью
 
Java: внутри файла MS Excel 2007. Часть третья   В предлагаемой вниманию читателя третьей части статьи о структуре файла электронной таблицы Microsoft Excel формата 2007 речь идёт о коде Java, "разархивирующем" файловый поток и формирующем объекты, с которыми предстоит взаимодействовать при дальнейшей обработке данных электронной таблицы
Шаблоны и примеры Читать статью
 
Java: внутри файла MS Excel 2007. Часть вторая   В настоящем материале автор постарается систематизировать свои знания о том, как устроено хранение данных электронной таблицы, и презентовать небольшую Java-библиотеку, предоставляющую возможность чтения данных и заполнения файла электронной таблицы Microsoft Excel
Шаблоны и примеры Читать статью
 


Шаблоны и примеры

Главная   Библиотека   Шаблоны и примеры

Java: внутри файла MS Excel 2007. Часть первая

Николай Норкин

г. Киров

notesnet@notesnet.ru

В последнее время автору довелось реализовывать проекты, в которых большое место доставалось интеграционной стороне, в частности, данные для приложений Domino необходимо было черпать из присылаемых отчётов в формате MS Excel. Также по данным баз Domino приходилось готовить отчёты в виде электронных таблиц

В одной из предыдущих публикаций рассказывалось, каким образом можно формировать отчёт в электронной таблице Microsoft Excel (см. статью Java в Domino. Небольшой пример обработки потока). В настоящем материале автор постарается систематизировать свои знания о том, как устроено хранение данных электронной таблицы, и презентовать небольшую Java-библиотеку, предоставляющую возможность чтения данных (это реализовывалось в первую очередь) и заполнения файла электронной таблицы Microsoft Excel

Внутри файла Microsoft Excel

Файл электронной таблицы формата XLSX (Microsoft Excel 2007-2010 Open XML Spreadsheet) представляет собой ZIP-сжатый архив, который содержит набор отдельных файлов, в соответствии с Office Open XML стандартом, который был введен в Microsoft Office 2007

На писунке показан файл формата xlsx, открытый в одном из архиваторов. Выделены xml-файлы, о которых в дальнейшем пойдёт речь

Файл xl/worksheets/sheetX.xml

Сразу направимся к самому информативному файлу, представляющему объект листа книги Excel. И оценим, каким образом его можно прочитать, - в первую очередь, достать находящиеся на листе данные

Вот небольшой фрагмент такого файла

<?xml version="1.0" encoding="UTF-8"?>
<worksheet
xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"
xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
<sheetPr>
<pageSetUpPr fitToPage="1"/>
</sheetPr>
<dimension ref="A2:M48"/>
<sheetViews>
<sheetView tabSelected="1" workbookViewId="0" zoomScaleNormal="100">
<pane activePane="bottomRight" state="frozen" topLeftCell="B4" xSplit="1" ySplit="3"/>
<selection activeCell="B1" pane="topRight" sqref="B1"/>
<selection activeCell="A4" pane="bottomLeft" sqref="A4"/>
<selection activeCell="F4" pane="bottomRight" sqref="F4"/>
</sheetView>
</sheetViews>
<sheetFormatPr defaultRowHeight="15"/>
<cols>
<col customWidth="1" max="1" min="1" width="37"/>
<col customWidth="1" hidden="1" max="2" min="2" width="22.42"/>
<col customWidth="1" hidden="1" max="3" min="3" width="20.28"/>
<col customWidth="1" hidden="1" max="4" min="4" width="20"/>
<col customWidth="1" hidden="1" max="5" min="5" width="16.7"/>
<col customWidth="1" max="6" min="6" width="13.42"/>
<col customWidth="1" max="7" min="7" width="12.14"/>
<col customWidth="1" max="8" min="8" width="9"/>
<col customWidth="1" max="9" min="9" width="10.85"/>
<col customWidth="1" max="10" min="10" width="13.28"/>
<col customWidth="1" max="11" min="11" width="12.71"/>
<col customWidth="1" max="12" min="12" width="9"/>
<col customWidth="1" max="13" min="13" width="11.14"/>
</cols>
<sheetData>
<row customHeight="1" ht="30" r="2" spans="1:13">
<c r="A2" s="9" t="s"><v>0</v></c>
<c r="B2" s="9" t="s"><v>54</v></c>
<c r="C2" s="9" t="s"><v>55</v></c>
<c r="D2" s="9" t="s"><v>56</v></c>
<c r="E2" s="9" t="s"><v>57</v></c>
<c r="F2" s="11" t="s"><v>52</v></c>
<c r="G2" s="12"/>
<c r="H2" s="13" t="s"><v>49</v></c>
<c r="I2" s="14" t="s"><v>48</v></c>
<c r="J2" s="11" t="s"><v>53</v></c>
<c r="K2" s="12"/>
<c r="L2" s="13" t="s"><v>49</v></c>
<c r="M2" s="14" t="s"><v>48</v></c>
</row>
<row customHeight="1" ht="31.5" r="3" spans="1:13">
<c r="A3" s="15"/>
<c r="B3" s="10"/>
<c r="C3" s="10"/>
<c r="D3" s="10"/>
<c r="E3" s="10"/>
<c r="F3" s="8" t="str"><v>24.12.2021-06.01.2022</v></c>
<c r="G3" s="8" t="str"><v>07.01.2022-20.01.2022</v></c>
<c r="H3" s="13"/>
<c r="I3" s="14"/>
<c r="J3" s="8" t="str"><v>07.01.2022-13.01.2022</v></c>
<c r="K3" s="8" t="str"><v>14.01.2022-20.01.2022</v></c>
<c r="L3" s="13"/>
<c r="M3" s="14"/>
</row>
<row customFormat="1" r="4" s="5" spans="1:13">
<c r="A4" s="1" t="s"><v>1</v></c>
<c r="B4" s="3"><v>1</v></c>
<c r="C4" s="3"><v>0</v></c>
<c r="D4" s="3"><v>1</v></c>
<c r="E4" s="3"><v>4</v></c>
<c r="F4" s="3"><f>B4+C4</f><v>1</v></c>
<c r="G4" s="3"><f>D4+E4</f><v>5</v></c>
<c r="H4" s="3"><f>G4-F4</f><v>4</v></c>
<c r="I4" s="4"><f>IF(F4=0, 0,(G4-F4)/F4*100)</f><v>0</v></c>
<c r="J4" s="3"><f>D4</f><v>0</v></c>
<c r="K4" s="3"><f>E4</f><v>0</v></c>
<c r="L4" s="3"><f>K4-J4</f><v>0</v></c>
<c r="M4" s="4"><f>IF(J4=0,0,(K4-J4)/J4*100)</f><v>0</v></c>
</row>
<row customFormat="1" r="5" s="5" spans="1:13">
<c r="A5" s="1" t="s"><v>2</v></c>
<c r="B5" s="3"><v>3</v></c>
<c r="C5" s="3"><v>2</v></c>
<c r="D5" s="3"><v>5</v></c>
<c r="E5" s="3"><v>3</v></c>
<c r="F5" s="3"><f ref="F5:F47" si="0" t="shared">B5+C5</f><v>0</v></c>
<c r="G5" s="3"><f ref="G5:G47" si="1" t="shared">D5+E5</f><v>0</v></c>
<c r="H5" s="3"><f ref="H5:H48" si="2" t="shared">G5-F5</f><v>0</v></c>
<c r="I5" s="4"><f ref="I5:I47" si="3" t="shared">IF(F5=0, 0,(G5-F5)/F5*100)</f><v>0</v></c>
<c r="J5" s="3"><f ref="J5:J47" si="4" t="shared">D5</f><v>0</v></c>
<c r="K5" s="3"><f ref="K5:K47" si="5" t="shared">E5</f><v>0</v></c>
<c r="L5" s="3"><f ref="L5:L48" si="6" t="shared">K5-J5</f><v>0</v></c>
<c r="M5" s="4"><f ref="M5:M47" si="7" t="shared">IF(J5=0,0,(K5-J5)/J5*100)</f><v>0</v></c>
</row>
        </sheetData>
        <mergeCells count="11">
                    <mergeCell ref="D2:D3"/>
                    <mergeCell ref="E2:E3"/>
                    <mergeCell ref="J2:K2"/>
                    <mergeCell ref="L2:L3"/>
                    <mergeCell ref="M2:M3"/>
                    <mergeCell ref="A2:A3"/>
                    <mergeCell ref="F2:G2"/>
                    <mergeCell ref="I2:I3"/>
                    <mergeCell ref="H2:H3"/>
                    <mergeCell ref="B2:B3"/>
                    <mergeCell ref="C2:C3"/>
        </mergeCells>
        <phoneticPr fontId="4" type="noConversion"/>
        <pageMargins bottom="0.35" footer="0.31" header="0.31" left="0.31" right="0.31" top="0.35"/>
        <pageSetup orientation="portrait" paperSize="9" r:id="rId1" scale="75"/>
</worksheet>

Видно, что данные, интересующие нас, собраны в разделе sheetData построчно (подраздел row) в xml-элементах ячеек (c)

Атрибут r задаёт индекс строки и ячейки

Искомые данные в ячейках размещены внутри xml-элемента v (в большинстве случаев, автор сталкивался с файлом, где значения строковых переменных содержались инлайн в элементах is\t внутри элемента c)

Раз уж зашла речь о текстовых строках, то они могут храниться в отдельном xml-описании (файл xl/sharedStrings.xml архива), на что указывает атрибут t со значанием s xml-элемента c (ячейки). Смотри в примере выше описание ячейки A4. Значение 1 в элементе v для этой ячейки означает расположение (порядок) элемента si в файле описания строк  xl/sharedStrings.xml

Атрибут t элемента c со значением str или inlineStr описывает, что текстовое значение хранится непосредственно внутри элемента ячейки (Как в описании ячейки F3)

Далее разговор пойдёт о том, как интерпретировать другие значения ячеек листа MS Excel

Продолжение. Часть вторая

Ссылки

Java: внутри файла MS Excel 2007. Часть вторая

Java: внутри файла MS Excel 2007. Часть третья

Java: внутри файла MS Excel 2007. Часть четвёртая

Java в Domino. Небольшой пример обработки потока
 
  Опубликовано — 01/24/2022 |    



Добавить комментарий
Имя * :
e-mail
Комментарий * :
Код подтверждения * :


Мероприятия
Пресс-релизы
Биржа труда
Последнее на форуме
 
А так же:
Lotus notes и ЭЦП
29.09.2017 17:16:14
Как удалить профиль?
16.04.2016 00:08:51
Скопировать в буфер поле документа
24.05.2015 08:55:52
 
© LOGOSPHERE.RU