Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用jxl解析Excel_Java_Excel_Jakarta Ee_Date_Jxl - Fatal编程技术网

Java 使用jxl解析Excel

Java 使用jxl解析Excel,java,excel,jakarta-ee,date,jxl,Java,Excel,Jakarta Ee,Date,Jxl,我使用jxl读取.xls文件,下面是我解析xls文件的代码。它工作正常,但问题是当我插入日期字段时,它只读取年份的最后两位数字。例如,如果我把2088年12月13日和1988年12月13日放在一起。这两个版本都将读为12/13/88。这个问题有什么解决办法吗。我可以对excel单元格进行格式化或更改当前代码吗 ArrayList listDet=new ArrayList(); HashMap mapDet=null; HashMap primeDetails=new HashM

我使用jxl读取.xls文件,下面是我解析xls文件的代码。它工作正常,但问题是当我插入日期字段时,它只读取年份的最后两位数字。例如,如果我把2088年12月13日和1988年12月13日放在一起。这两个版本都将读为12/13/88。这个问题有什么解决办法吗。我可以对excel单元格进行格式化或更改当前代码吗

ArrayList listDet=new ArrayList();
    HashMap mapDet=null;
    HashMap primeDetails=new HashMap();

    WorkbookSettings ws = null;
    Workbook workbook = null;
    Sheet s = null;
    Cell rowData[] = null;
    int rowCount = '0';
    int columnCount1 = '0';
    int columnCount = '0';
    DateCell dc = null;
    int totalSheet = 0;

    try {
        ws = new WorkbookSettings();
        ws.setLocale(new Locale("en", "EN"));
        ws.setCellValidationDisabled(true);

        workbook = Workbook.getWorkbook(fileInputStream, ws);

        totalSheet = workbook.getNumberOfSheets();
        //Getting Default Sheet i.e. 0
        s = workbook.getSheet(0);

        //Total Total No Of Rows in Sheet, will return you no of rows that are occupied with some data
        System.out.println("Total Rows inside Sheet:" + s.getRows());
        rowCount = s.getRows();

        //Total Total No Of Columns in Sheet
        System.out.println("Total Column inside Sheet:" + s.getColumns());
        columnCount = s.getColumns();


        //Reading Individual Row Content
        for (int i = 0; i <rowCount ; i++) {
            //Get Individual Row
            rowData = s.getRow(i);
                mapDet=new HashMap();
                mapDet.put("col1",rowData[0].getContents());
                mapDet.put("col2",rowData[1].getContents());
                mapDet.put("col3",rowData[2].getContents());
                mapDet.put("col4",rowData[3].getContents());
                mapDet.put("col5",rowData[4].getContents());
                mapDet.put("col6",rowData[5].getContents());
                mapDet.put("col7",rowData[6].getContents());
                mapDet.put("col8",rowData[7].getContents());
                mapDet.put("col9",rowData[8].getContents());

                listDet.add(mapDet);



    }
        workbook.close();           
    } catch (IOException e) {
        e.printStackTrace();
    } catch (BiffException e) {
        e.printStackTrace();
    }
    catch(Exception exp)
    {

        exp.printStackTrace();
    }
ArrayList listDet=new ArrayList();
HashMap mapDet=null;
HashMap primeDetails=新的HashMap();
WorkbookSettings ws=null;
工作簿=空;
表s=空;
单元格rowData[]=null;
int rowCount='0';
int columnCount1='0';
int columnCount='0';
DateCell dc=null;
int totalSheet=0;
试一试{
ws=新工作簿设置();
ws.setLocale(新语言环境(“en”、“en”));
ws.setCellValidationDisabled(true);
工作簿=工作簿.get工作簿(fileInputStream,ws);
totalSheet=workbook.getNumberOfSheets();
//获取默认工作表,即0
s=工作簿.getSheet(0);
//工作表中的总行数,将返回被某些数据占用的行数
System.out.println(“工作表内的总行数:+s.getRows());
rowCount=s.getRows();
//工作表中的列总数
System.out.println(“表内总列:+s.getColumns());
columnCount=s.getColumns();
//阅读单行内容
对于(int i=0;i,根据以下方法:
getContents()是一个
“快速脏函数,以字符串形式返回此单元格的内容。”

由于getContents()不允许对格式进行完全控制, 您可以定义自己的函数来控制
CellType.DATE的格式设置;
例如:

 private String getContents(Cell cell) {
    DateCell dCell=null;
    if(cell.getType() == CellType.DATE)
    {
      dCell = (DateCell)cell;
      // System.out.println("Value of Date Cell is: " + dCell.getDate()); 
      // ==> Value of Date Cell is: Thu Apr 22 02:00:00 CEST 2088
      SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");  
      // System.out.println(sdf.format(dCell.getDate()));
      // ==> 2088-04-22   
      return sdf.format(dCell.getDate());
    }
    // possibly manage other types of cell in here if needed for your goals   
    // read more: http://www.quicklyjava.com/reading-excel-file-in-java-datatypes/#ixzz2fYIkHdZP 
    return cell.getContents();
}
然后,您只需根据调用自己的私有函数更改代码:

mapDet.put("col1", getContents(rowData[0]));
mapDet.put("col2", getContents(rowData[1]));
mapDet.put("col3", getContents(rowData[2]));
mapDet.put("col4", getContents(rowData[3]));
mapDet.put("col5", getContents(rowData[4]));
mapDet.put("col6", getContents(rowData[5]));
mapDet.put("col7", getContents(rowData[6]));
mapDet.put("col8", getContents(rowData[7]));
mapDet.put("col9", getContents(rowData[8]));
而不是

mapDet.put("col1",rowData[0].getContents());
...
mapDet.put("col9",rowData[8].getContents());