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


Автор: clamp 23.12.2009, 07:59
Добрый день форумчане. Есть такой вопрос. 
Имеется Excel документ с 8 столбцами, мне нужно вытянуть данные из 2 и 4 столбца ))) 
Можно ли такое реализовать на Java?

проблема с настройкой библиотек и открытием Excel документа решена!!


Имеется новая проблемка!! как определить количество строк в Excel ? HELP 

Автор: ivanovpv 23.12.2009, 08:36
Легко и непринужденно - http://poi.apache.org/spreadsheet/index.html

Автор: clamp 23.12.2009, 08:44
ivanovpv,  спасибо. а описания на русском нету ?))))) 

Попытался скачать библиотеку с сайта что ты мне показал, получаются битые архивы. 

Автор: clamp 23.12.2009, 13:33
кое как получилось скачать файл poi-src-3.6-20091214.zip
подскажите что с ним дальше делать  smile 

МОЖЕт кто работал с poi от apache

Автор: Vladus 23.12.2009, 13:52
clamp, приветсвую. 
Я немного работал. Вот несколько функций (немного комментов, сделанных на ходу и куча проверок, которые вам могут не пригодиться, а мне были нужны)
Код


    private POIFSFileSystem fileSystem;
    private HSSFWorkbook workbook;
    private HSSFSheet sheet;

    // открыть нужный лист; file - имя файла, numList - номер листа
    public HSSFSheet getSheet(String file, int numList) {
        sheet = null;
        try {
            FileInputStream fileInputStream = new FileInputStream(file);
            fileSystem = new POIFSFileSystem(fileInputStream);
            workbook = new HSSFWorkbook(fileSystem);
            sheet = workbook.getSheetAt(numList);
        } catch (IOException e) {
            logger.error("Error while opening resourse file");
            logger.error(e.getStackTrace().toString());
        }
        return sheet;
    }
    
    // взять значение с ячейки; row, col - понятно, trim - тримать ли строковое значение
    public String getCellValue(int row, int col, boolean trim) {
        String value = "";
        if(isCellExists(row, col)) {
            if (sheet.getRow(row).getCell(col).getCellType() == HSSFCell.CELL_TYPE_STRING) {
                value = sheet.getRow(row).getCell(col).getRichStringCellValue().getString();
                if (trim) {
                    value = value.trim();
                }
            } else if (sheet.getRow(row).getCell(col).getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
                value = String.valueOf(sheet.getRow(row).getCell(col).getNumericCellValue());
            } 
        }
        return value;
    }
    
    // записать значение в ячейку; 
    public void setCellValue(int row, int col, String value) {
        if (isRowExists(row)) {
            if (isCellExists(row, col)) {
                sheet.getRow(row).getCell(col).setCellValue(new HSSFRichTextString(value));
            } else {
                sheet.getRow(row).createCell(col).setCellValue(new HSSFRichTextString(value));
            }
        } else {
            sheet.createRow(row).createCell(col).setCellValue(new HSSFRichTextString(value));
        }
    }

    private boolean isRowExists(int row) {
        return sheet.getRow(row) != null;
    }

    private boolean isCellExists(int row, int col) {
        return sheet.getRow(row) != null && sheet.getRow(row).getCell(col) != null;
    }
    

Автор: clamp 23.12.2009, 14:02
Vladus, добрый день. Спасибо за примеры уверен что они мне пригодятся.
Так вот в чем причина, я так понял что не правильно наверное скопировал библиотеку от apache 
 я взял архив распаковала его в lib моей java. 

Vladus, Подскажи как правильно все настроить чтобы можно использовать твоими примерами )))) 

Автор: Vladus 23.12.2009, 14:16
clamp,
Цитата

не правильно наверное скопировал библиотеку от apache 

 smile
Цитата

я взял архив распаковала его в lib моей java. 

что понимается под java? jdk?
Цитата

Подскажи как правильно все настроить чтобы можно использовать твоими примерами

Я не экстрасенс. Откуда я знаю как приложение запускается, из среды(какой?) или из консоли? класс пас правильный? И что вообще не работает, что не получается?

Автор: clamp 23.12.2009, 15:07
Цитата
что понимается под java? jdk?



jdk1.6.0_10

Цитата
Я не экстрасенс. Откуда я знаю как приложение запускается, из среды(какой?)


Програмки пишу на Eclipse, хотел все это применить к аплетам.

у меня не определяются 
Код

private POIFSFileSystem fileSystem;
private HSSFWorkbook workbook;
private HSSFSheet sheet;


я так понимаю мне нужно сделать import org.apache.poi.....  ?
но когда набираю poi показывает что таких библиотек нет

Автор: Vladus 23.12.2009, 16:24
Цитата

jdk1.6.0_10

тогда подкладывать библиотеку нужно в java/jre/lib/ext, но лучше подключить эти либы к проекту (как в эклипсе это делать не помню, а под рукой его нет)
Цитата

я так понимаю мне нужно сделать import org.apache.poi.....  ?

совершенно верно,
Код

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
...

Автор: ivanovpv 23.12.2009, 16:50
Цитата(clamp @  23.12.2009,  08:44 Найти цитируемый пост)
ivanovpv,  спасибо. а описания на русском нету ?))))) 


Если вы серьезно собираетесь программировать - то без языка никуда! Учите smile

Цитата(clamp @  23.12.2009,  08:44 Найти цитируемый пост)
Попытался скачать библиотеку с сайта что ты мне показал, получаются битые архивы. 

Не знаю как вы там качаете... Я для проверки качнул - все отлично - http://poi.apache.org/download.html#POI-3.6

Автор: clamp 24.12.2009, 06:35
[quote]
Vladus, 
Цитата
тогда подкладывать библиотеку нужно в java/jre/lib/ext

  я подкладывал именно в эту папку. не помогло сечас примонтирую к проекту )))) 



ivanovpv, 
Цитата

Если вы серьезно собираетесь программировать - то без языка никуда! Учите 


почему же мы все должны учить буржуйский, неужели у нас нет программистов, нужно писать свои мануалы на русском чтобы за бугром тоже мучались с переводом )))))

Цитата
е знаю как вы там качаете... Я для проверки качнул - все отлично - качайте здесь

Спасибо. я скачал именно с этого сайта просто выбрал другой сервер.

Автор: clamp 24.12.2009, 08:40
Сделал следующие. Распаковал скачанный zip архив. нашел там папку org запоковал ее в zip архив присоеденил к проекту. 
Теперь когда прописываю 
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

у меня можно только прописать 
import org.apache.poi.hssf.usermodel.*;

import org.apache.poi.poifs.filesystem.*;
 вот так. 
Наверное в связи с этим у меня теперь вылазиют ошибки сдесь 
    private POIFSFileSystem fileSystem;
    private HSSFWorkbook workbook;
    private HSSFSheet sheet;


Автор: ivanovpv 24.12.2009, 08:48
Цитата(clamp @  24.12.2009,  06:35 Найти цитируемый пост)
почему же мы все должны учить буржуйский, неужели у нас нет программистов, нужно писать свои мануалы на русском чтобы за бугром тоже мучались с переводом )))))

Все просто: у врачей латынь - у нас программеров английский

Автор: Vladus 24.12.2009, 11:27
clamp
Цитата

  я подкладывал именно в эту папку. не помогло

странно, должно было заработать. впрочем, хорошо, что не заработало - так делать не нужно
Цитата

Сделал следующие. Распаковал скачанный zip архив. нашел там папку org запоковал ее в zip архив присоеденил к проекту. 

 smile 
вот качайте http://www.apache.org/dyn/closer.cgi/poi/release/bin/poi-bin-3.6-20091214.tar.gz
распаковывайте и добавьте к проекту poi-3.6-20091214.jar и все должно быть хорошо
а про доки на русском - это просто смешно  smile 


Автор: clamp 24.12.2009, 14:40
 smile  smile  smile  smile 
Vladus,  ОГРОМНЫЙ РАХМЕТ. Все заработало. Буду теперь мучиться дальше )))) 
Твои примеры как раз пригодились 

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