Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > XML -> Excel


Автор: lezhik 26.4.2004, 09:27
Как средствами java можно перевести XML документ в XLS. Вроде как средствами POI как-то моно сделать хотя как именно я не понял withstupid.gif

Автор: Грасоff 26.4.2004, 09:40
Код
HSSFWorkbook wb = createWorkbook();
HSSFSheet sheet = wb.getSheetAt(0);
HSSFRow row = sheet.createRow((short) index);

HSSFCell cell = row.createCell((short) 1);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("Текст в ячейке");

wb.write(new FileOutputStream("c:\\sample.xls"));

Автор: lezhik 26.4.2004, 12:28
Дык проблема в том что данные надо из XML документа выдирать, не руками же его парсить sad.gif

Автор: Грасоff 26.4.2004, 13:45
Дык проблема в том что данные надо из XML документа выдирать, не руками же его парсить

ни фига ты прикололся. любой xml-документ может и не попасть в xls, если он не следует структуре определенной.

вот документ:

Код
<project>
<properties>
 <property name="asd" value="msd"/>
 <property name="asd" value="msd"/>
 <property name="asd" value="msd"/>
</properties>
<content>
 <folder name="f01"/>
 <folder name="f02">
  <descriptor itemType="boolean"/>
...
 </folder>
</content>


и как ты его в xls определишь?

а если структура xml заранее известна - парсить парсерами всевозможными и класть в xls.

что значит - "не руками парсить"?


Автор: lezhik 26.4.2004, 13:50
дык согласен из какой-то фиксированной структуры, загнать в неё по средствам xsl не проблема, но как загнать уже определённой структуры xml в xls я лично не знаю butbut.gif

Автор: Грасоff 27.4.2004, 15:25
че тут знать.

файл:

Код
<library>
<book>
 <title>asd</title>
 <author>fgh</author>
</book>
<book>
 <title>asd</title>
 <author>fgh</author>
</book>
<book>
 <title>asd</title>
 <author>fgh</author>
</book>
<book>
 <title>asd</title>
 <author>fgh</author>
</book>
</library>


и че - парсишь, например, nanoxml и посредством poi - в эксель. получится:

Код
N | название | автор
--------------------
1 | asd      | fgh
2 | asd      | fgh
3 | asd      | fgh
--------------------


чем не нравиться?

Автор: lezhik 27.4.2004, 15:44
Знал бы как сделал бы давно, код в студию withstupid.gif

Автор: Грасоff 28.4.2004, 09:29
код какой именно нужен?

xml разобрать? по контексту вроде да. тогда так (nanoxml и exceptions не обрабатываются):

Код
IXMLParser parser;
parser = XMLParserFactory.createDefaultXMLParser();

IXMLReader reader;
String xmlData = "строка содержит xml как он есть, но есть и методы чтения из файла";
reader = StdXMLReader.stringReader(xmlData);

parser.setReader(reader);

XMLElement root;
root = (XMLElement)parser.parse(); // root - не что иное как, например <library> из вышеприведенного xml'a

// теперь все книги из того xml'a - <book>
int childCount = root.getChildrenCount();
for (int i = 0; i < childCount; i++) {
 XMLElement book = (XMLElement)root.getChildAtIndex(i);
 String title = getValueFromChildren(book, "title");
 String author = getValueFromChildren(book, "author");
}


и все. функция getValueFromChildren(XMLElement element, String childTagName) - как домашнее задание тебе smile.gif ее задача - получить дочерний элемент тэга element по имени childTagName и вернуть строковое значение между тэгами, например, <title>...</title>


Автор: lezhik 28.4.2004, 09:51
Пасиба!!!! Код был нужен именно этот!!! Уже интересно!!! thumbs-up.gif Хотя я представлял себе несколько иначе... Тут на java.sun.com инетересный вариант предложили с использованием JAXB, типа генеришь классы на основе DTD схемы документа, и потом просто подгружаешь дерево классов и за милую душу усё обрабатываешь... Кто как считает что правильней? Беспокоит то, что nanoxml не из стандартных, у нас sax используется, и не понятно какой из вариантов будет работать быстрей (тут тоже вроде как JAXB должон выигрывать, ибо он структуру документа примерно знает) cool.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)