Войти
 
 
   
 
  
Новости 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

Часть первая

Часть вторая

Часть четвёртая

Начало работы с файлом электронной таблицы Microsoft Excel

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

С процессом "разархивирования" потока, представляющего таблицу MS Excel, при помощи пакета java.util.zip, наш читатель также мог встретиться на страницах проекта. Тем не ненее, повторим код, обрабатывающий архивные файлы

public void init(java.io.InputStream stream) {

try {

java.util.zip.ZipInputStream zip = new java.util.zip.ZipInputStream(stream);

java.util.zip.ZipEntry entry;

String name;

while ((entry = zip.getNextEntry()) != null) {

name = entry.getName();

java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(1024);

byte[] buf = new byte[1024];

  int len = zip.read(buf);

    while (len > 0) {

    baos.write(buf, 0, len);

    len = zip.read(buf);

  }

в этом месте получен доступ к имени файла в архиве (включая путь) в переменной name и содержимому файла в потоке baos

}

}

catch (Exception e) {}

}

В зависимости от имени файла, вызываются различные процедуры загрузки

if (name.equals("xl/sharedStrings.xml")) this.initStrings(baos.toByteArray());

if (name.equals("xl/workbook.xml")) this.parseWorkbook(baos.toByteArray());

if (name.equals("xl/_rels/workbook.xml.rels")) this.parseRelations(baos.toByteArray());

if (name.equals("xl/styles.xml")) this.parseStyles(baos.toByteArray());

if (name.startsWith("xl/worksheets/sheet")) this.loadWorksheet(name, baos.toByteArray());

Строки из файла xl/sharedStrings.xml размещаются в объекте вектора stringContent

protected void initStrings(byte[] content) {

try {

org.w3c.dom.Document document = this.stringToDocument(content);

this.stringContent = new java.util.Vector();

org.w3c.dom.NodeList nodes = document.getElementsByTagName("sst");

try {

org.w3c.dom.Element root = (org.w3c.dom.Element) nodes.item(0);

this.stringTotal = Long.parseLong(root.getAttribute("count"));

}

catch (Exception e) {}

nodes = document.getElementsByTagName("si");

for (int i = 0; i < nodes.getLength(); i++) { // шпарим по списку

org.w3c.dom.Node string = nodes.item(i); // получаем ентри списка

this.stringContent.add(string.getTextContent());

}

}

catch (Exception e) {}

}

Из значений файла xl/styles.xml формируются вектор numberFormats, состоящий из значений атрибутов numFmtId элементов раздела cellXfs, связывающих атрибут формата ячейки и формат значений, и объект java.util.HashMap numberFormatMap, содержащий описание непредустановленных форматов значений ячеек - из раздела numFmts (подробнее это рассматривалось в предыдущей части материала)

protected void parseStyles(byte[] content) {

try {

org.w3c.dom.Document document = this.stringToDocument(content);

this.styles = document;

try {

this.refreshStyles();

this.numberFormats = new java.util.Vector ();

org.w3c.dom.NodeList nodes = document.getElementsByTagName("cellXfs");

org.w3c.dom.Element styles = (org.w3c.dom.Element) nodes.item(0);

nodes = styles.getElementsByTagName("xf");

for (int i = 0; i < nodes.getLength(); i++) { // шпарим по списку

org.w3c.dom.Element style = (org.w3c.dom.Element) nodes.item(i); // получаем ентри списка

String format = style.getAttribute("numFmtId");

this.numberFormats.add(format);

}

}

catch (Exception e) {}

try {

this.numberFormatMap = new java.util.HashMap ();

org.w3c.dom.NodeList nodes = document.getElementsByTagName("numFmts");

org.w3c.dom.Element styles = (org.w3c.dom.Element) nodes.item(0);

nodes = styles.getElementsByTagName("numFmt");

for (int i = 0; i < nodes.getLength(); i++) { // шпарим по списку

org.w3c.dom.Element element = (org.w3c.dom.Element) nodes.item(i); // получаем ентри списка

ru.medkirov.design.excel2007.NumberFormat format =

new ru.medkirov.design.excel2007.NumberFormat(element);

String id = format.id();

if (!id.equals(""))

this.numberFormatMap.put(id, format);

}

}

catch (Exception e) {}

}

catch (Exception e) {}

}

Ссылки

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

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

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

Java в Domino. Небольшой пример обработки потока

Java в Domino. Вывод в поток присоединённых файлов

Java в Domino. Получение файловых элементов дизайна приложений Domino в виде потоковых данных
 
  Опубликовано — 02/06/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