我们看到的Excel表格可能是A1有值,A3有值,B4有值,其他格为空,但Excel的内存存储机制可能是,将有值的单元格赋予主键并存入数据库,为空的不分配内存,即不存储
先分配一份内存,用于存储列指针,这就是行的内存
应该是操作后才会赋予主键,并分配内存
其实Excel的内存分配很简单,就是一个二维数组,当
XSSFWorkbook xwb = new XSSFWorkbook(in);
XSSFSheet sheet = xwb.getSheet(sheetName);
用sheet.getRow(1)得到一个数组,数组存储的都是指针,或准确的说,得到的数组里面存储一堆一维指针
而XSSFCell cell = row.getCell(1);则得到指定单元格的内存,(变量就是有名称的内存),如果此单元格之前没有数据,即没被分配内存,则若对此单元格做操作,则会报空指针异常
也许也可以将Excel的存储模式理解为 以链表形式存储,行内存指向链表头,具体的单元格则是链表里面具体的元素
xwb.getRow(2);//得到链表头内存,没有该行则对其操作时报空指针异常
xwb.getCell(1);//得到具体单元格内存,没有该单元格则对其操作时报空指针异常
sheet.createRow(2);//为该行分配内存,或者说分配一个存储链表头的内存,该行如果原来有数据,则被覆盖,原来数据消失
row.createCell(1);//为该单元格分配新内存,如果原来就有内存,则被覆盖