Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Java, poi, excell, xlsx / 3 сообщений из 3, страница 1 из 1
03.12.2014, 11:10
    #38823364
taranezzz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java, poi, excell, xlsx
Доброго времени суток!
Задача поставлена такая из готового файла EXCELL.XLSX считать данные и влить их в базу.
скачал HTTP://WWW.APACHE.ORG/DYN/CLOSER.CGI/POI/RELEASE/BIN/POI-BIN-3.10.1-20140818.ZIP
пробую.

Вопрос в том что для первого столбца в EXCELL файле явно ручками указано что там лежит дата.
POI понимает эти данные как число.
Что я делаю не так????
И почему разработчики не сделали тип ячейки в POI как CELL_TYPE_DATE

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
package finder1;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Date;
import org.apache.poi.xssf.usermodel.*;


public class Finder1 {
    
    private static XSSFWorkbook readFile(String filename) throws IOException {
        return new XSSFWorkbook(new FileInputStream(filename));
    }


    public static void main(String[] args) throws FileNotFoundException, IOException, Exception {

  String fileName = "D:\\proj\\92.xlsx";
  
  String value = null;
    
  try {

      XSSFWorkbook wb = Finder1.readFile(fileName);
                                for (int nsh = 0; nsh < wb.getNumberOfSheets(); nsh++) {
                                XSSFSheet sheet = wb.getSheetAt(nsh);
                                
                                    for (int nr = 0; nr <sheet.getPhysicalNumberOfRows();nr++ ){
                                    XSSFRow row = sheet.getRow(nr);
                                    if (row == null) { continue; }
                                    
                                            //System.out.println("row.getPhysicalNumberOfCells()="+row.getPhysicalNumberOfCells());

                                    for(int nc = 0;nc<=row.getPhysicalNumberOfCells()+1;nc++){
                                           
                                            XSSFCell cell = row.getCell(nc);
                                            if (cell == null) { continue; }
                                           
                                            Date dat;
                                            Double d;
                                            

                                            switch (cell.getCellType()) {
                                                
                                                case XSSFCell.CELL_TYPE_NUMERIC:System.out.println("CELL_TYPE_NUMERIC");

                                            try{
                                                //№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
                                                //почему для явно указанного формата ячейки столбца 1 как ДАТА, POI  понимает как число!!!!!!!!!!
                                                //№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
                                                //получаем дату    
                                                dat = cell.getDateCellValue();
                                                    value = dat.toString();
                                            }
                                                    
                                                    catch(Exception ex){
                                                        d=cell.getNumericCellValue(); 
                                                        value =d.toString();
                                                    }
                                                       
                                                    break;
                                                case XSSFCell.CELL_TYPE_STRING:System.out.println("CELL_TYPE_STRING");
                                                    
                                                    
                                                    try{
                                                    dat = cell.getDateCellValue();
                                                    value = dat.toString();}
                                                    catch(Exception ex){
                                                        value = cell.getStringCellValue(); 
                                                    }
                                                            break;
                                                    
                                                    
                                                case XSSFCell.CELL_TYPE_BLANK:  System.out.println("CELL_TYPE_BLANK");

                                                    XSSFCell c1 = row.getCell(nc);
                                                    System.out.println(c1.getCellType()+" "+XSSFCell.CELL_TYPE_NUMERIC+"!!!");
                                                    System.out.println(c1.getRichStringCellValue());
                                                    d=c1.getNumericCellValue(); value =d.toString();
                                                    break;
                                                           
                                                default:System.out.println("default");
                                                    Integer f = cell.getCellType();
                                                    value = f.toString();
                                                }
                                                System.out.println(cell.getCellType()+"    "+value);
                                            cell=null;
                                        }
                                        row=null;
                                    }
                                 sheet=null;
                                }
                                
		} catch (Exception e) {e.printStackTrace();}	
    }
   
}
...
Рейтинг: 0 / 0
03.12.2014, 11:42
    #38823426
Java, poi, excell, xlsx
...
Рейтинг: 0 / 0
07.01.2015, 23:47
    #38849949
taranezzz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java, poi, excell, xlsx
проблему решил!
Сделал хитрее.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public static String get_cell(XSSFCell cell) {
String s="";
    switch (cell.getCellType()) {
        case XSSFCell.CELL_TYPE_STRING:  s=cell.getRichStringCellValue().getString();break;
        case XSSFCell.CELL_TYPE_NUMERIC: 

            if (DateUtil.isCellDateFormatted(cell)) //вот этот костыль - высший пилотаж!)))
                 {s=cell.getDateCellValue().toString();} 
            else {s=Double.toString(cell.getNumericCellValue());}
            break;

        case XSSFCell.CELL_TYPE_BOOLEAN: s=Boolean.toString(cell.getBooleanCellValue()); break;
        case XSSFCell.CELL_TYPE_FORMULA: s=cell.getCellFormula(); break;
        default:
    }
return(s);
}
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Java, poi, excell, xlsx / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]