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


Автор: #Maestro# 18.3.2009, 11:30
пытаюсь реализовать модуль для создания файла Ecxel из XML. скачал библиотеку pio (org.apache.poi). нашёл пример.
в строке:

org.apache.poi.hssf.usermodel.HSSFCell cell = row.createCell((short) 1);
где org.apache.poi.hssf.usermodel.HSSFRow row=null;

возникет предупреждение:
warning: [deprecation] createCell(short) in org.apache.poi.hssf.usermodel.HSSFRow has been deprecated

при компиляции соответственно возникает ошибка:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

очень прошу объяснить что это вышеописаное означает, и какими путями бороться?

Автор: Platon 18.3.2009, 11:39
Цитата(#Maestro# @  18.3.2009,  12:30 Найти цитируемый пост)
при компиляции соответственно возникает ошибка:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

Выкиньте такую IDE на помойку. Если конечно, вы точно имели ввиду компиляцию.

По существу, описанная ситуация такая: Я включил свет - соседний дом рухнул. (2 несвязных события)

Вывод: Шлите полную трассировку.

Автор: Kangaroo 18.3.2009, 20:49
Цитата(#Maestro# @  18.3.2009,  11:30 Найти цитируемый пост)
Код

org.apache.poi.hssf.usermodel.HSSFRow row=null;

А дальше этому row ничего не присваивается?

Автор: _sten_ 18.3.2009, 22:15
Во первых не "pio" а "POI".
Во вторых при компиляции NullPointerException валится не может

Автор: #Maestro# 23.3.2009, 10:25
"Выкиньте такую IDE на помойку" 
 если бы я знал что такое IDE...

cитуация такая. есть два массива - массив столбцов таблицы и хначений таблицы (collNames и collValues соответственно).


    List<String> collNames = Arrays.asList("collName1", "collName2", "collName3");
    List<String> collValues = Arrays.asList("1", "строка1", "Val1",
                                               "2", "строка2", "Val2",
                                               "3", "строка3", "Val3",
                                               "4", "строка4", "Val4");



 как значения collValues разместить в таблице Excel, число столбцов равно числу значений collNames?
ниже мой пример, критика приветствуется.
и мне дико интересно как это сделает кто ещё?

а САМОЕ ВАЖНОЕ - как считать из Excel данные и поместить их в те же массивы?

import org.apache.poi.hssf.record.formula.functions.Call;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.*;
import org.apache.poi.hssf.usermodel.HSSFCell.*;

import java.io.*;
import java.util.*;


HSSFWorkbook wb = new HSSFWorkbook();
 HSSFSheet sheet = wb.createSheet("new sheet");
 HSSFRow row = sheet.createRow(1);
 HSSFCellStyle style = wb.createCellStyle();
 
 int r = 1;


    List<String> collNames = Arrays.asList("collName1", "collName2", "collName3");
    List<String> collValues = Arrays.asList("1", "строка1", "Val1",
                                              "2", "строка2", "Val2",
                                              "3", "строка3", "Val3",
                                              "4", "строка4", "Val4");
 

 for (int x = 0; x < collValues.size();) {

     
 // Create a row and put some cells in it. Rows are 0 based.
     row = sheet.createRow((short) r);        
            r++;
     for (int y = 0; y < collNames.size(); y++) 
         {
                 
        cell = row.createCell((short) y);                               
        cell.setCellValue(collValues.get(x));
        cell.setCellStyle(style);                        
                x++;
        
     }  
 }

            try {
 // Write the output to a file
                FileOutputStream fileOut = new FileOutputStream("11/workbook.xls");
                wb.write(fileOut);
                fileOut.close(); 
               }
      catch(Exception e)
        {
            System.out.println(e.toString());
        }
 
            }

Автор: anbal 23.3.2009, 17:20
IDE - среда разработки программного обеспечения 

А читать значения из файла примерно так
Код

public static void main(String[] args) {
List<String> collValues = new ArrayList<String>();
        try {
            FileInputStream fis = new FileInputStream("workbook.xls");
            HSSFWorkbook wb = new HSSFWorkbook(fis);
            HSSFSheet sheet1 = wb.getSheetAt(0);
            HSSFRow row = null;
            Iterator<HSSFRow> rowIter = sheet1.rowIterator();
            while (rowIter.hasNext()) {
                row = rowIter.next();
                Iterator<HSSFCell> iter = row.cellIterator();
                while (iter.hasNext()) {
                    HSSFCell cell = iter.next();
                    if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING)
                    collValues.add(cell.getRichStringCellValue()
                                .getString());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }



P.S:  для POI 3.0.1 и 3.2

Автор: Saboteur 25.3.2009, 01:25
Кроме poi есть http://jexcelapi.sourceforge.net/  smile 

Автор: #Maestro# 25.3.2009, 09:26
благодарю вас, ребята!
ещё вопросик - как создать XML-файлик. просто создать. с любыми тэгами. например:

<TabName>
    <Val1> </Val1>
    <Val2> </Val2>
</TabName>
<TabName2>
    <Val1> </Val1>
    <Val2> </Val2>
    <Val3> </Val3>
</TabName2>
заранее благодарен

Автор: #Maestro# 1.4.2009, 11:06
по-моему эта функция ползволяет пользователю найти и открыть XML-файл:


chooser.setCurrentDirectory(new File(".")); 


chooser.setFileFilter(new
                javax.swing.filechooser.FileFilter() {
            public boolean accept(File f) {
                return f.isDirectory() ||
                        f.getName().toLowerCase().endsWith(".xls");
            }
            public String getDescription() {return "Excel files";}
        });

int r = chooser.showOpenDialog(this);
        if (r != JFileChooser.APPROVE_OPTION) return;
        File f = chooser.getSelectedFile();

        try{
            if (builder == null) {
                DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                builder = factory.newDocumentBuilder();
            }


} catch (IOException e) {
            JOptionPane.showMessageDialog(this, e);
        } catch (ParserConfigurationException e) {
            JOptionPane.showMessageDialog(this, e);
        } catch (SAXException e) {
            JOptionPane.showMessageDialog(this, e);
        }


подскажите - как выглядит такая же функция только для файла Excel ?

Автор: #Maestro# 17.4.2009, 12:49
а вот ещё вопросец! очень надо программно открыть Excel и XML-файл и показать его пользователю. вот как выглядит моя функция :
Код

JFileChooser chooser = new JFileChooser();
    FileNameExtensionFilter filter = new FileNameExtensionFilter(
        "Excel files", "xls");
    chooser.setFileFilter(filter);

     FileNameExtensionFilter filter1 = new FileNameExtensionFilter(
        "XML files",  "xml");
       chooser.setFileFilter(filter1);
    int returnVal = chooser.showOpenDialog(this);
    if(returnVal == JFileChooser.APPROVE_OPTION) {
       System.out.println("You chose to open this file: " +
            chooser.getSelectedFile().getName());
       //File f=chooser.getSelectedFile();

       
      
    int returnVal1 = chooser.showOpenDialog(this);
    if(returnVal1 == JFileChooser.APPROVE_OPTION) {
       System.out.println("You chose to open this file: " +
            chooser.getSelectedFile().getName());
       File f=chooser.getSelectedFile();


дальше следует выбрать функцию обработки файла (Excel или XML фалов, в зависимости от выбора). вопрос:
 как узнать тип этого выбранного файла? то есть: какую функцию мне вызвать - обработки Excel-файла? или XML?

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