powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Java, poi, excell, xlsx
3 сообщений из 3, страница 1 из 1
Java, poi, excell, xlsx
    #38823364
taranezzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток!
Задача поставлена такая из готового файла 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
Java, poi, excell, xlsx
    #38823426
...
Рейтинг: 0 / 0
Java, poi, excell, xlsx
    #38849949
taranezzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проблему решил!
Сделал хитрее.

Код: 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
3 сообщений из 3, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Java, poi, excell, xlsx
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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