如何解析这样的excel,excle表头中有数据库表名 和 中文信息
然后有字段的信息,空行分开(可能多个)
再同样的格式,再有一个。 如此循环
表名 bbpa01 银票种类信息表
字段名称 中文说明 字段属性 字段长度 空值标志 备注
sname 银票类别 char 4 N.N 1-XX;2-DD
sname 银票类别 char 4 N.N 1-XX;2-DD
sname 银票类别 char 4 N.N 1-XX;2-DD
sname 银票类别 char 4 N.N 1-XX;2-DD
sname 银票类别 char 4 N.N 1-XX;2-DD
表名 bbpa01 银票种类信息表
字段名称 中文说明 字段属性 字段长度 空值标志 备注
sname 银票类别 char 4 N.N 1-XX;2-DD
sname 银票类别 char 4 N.N 1-XX;2-DD
sname 银票类别 char 4 N.N 1-XX;2-DD
sname 银票类别 char 4 N.N 1-XX;2-DD
sname 银票类别 char 4 N.N 1-XX;2-DD
这种很简单啊 的。通过这个对象HSSFWorkbook来操作excel表格,它里面有好多的对象可以读取操作读写excel表格, HSSFRow行对象、 HSSFCell 单元格对象等等。无非就是把数据从excel读出来,放在集合中,在存到数据库。部分代码L如下:
**
* 读取 office 2003 excel
*
* @throws IOException
* @throws FileNotFoundException
*/
private static List> read2003Excel(File file) throws IOException {
List> list = new LinkedList>();
HSSFWorkbook hwb = new HSSFWorkbook(new FileInputStream(file));
HSSFSheet sheet = hwb.getSheetAt(0);
Object value = null;
HSSFRow row = null;
HSSFCell cell = null;
int counter = 0;
for (int i = sheet.getFirstRowNum(); counter < sheet.getPhysicalNumberOfRows(); i++) {
row = sheet.getRow(i);
if (row == null) {
continue;
} else {
counter++;
}
List linked = new LinkedList();
for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {
cell = row.getCell(j);
if (cell == null) {
continue;
}
DecimalFormat df = new DecimalFormat("0");// 格式化 number String
// 字符
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 格式化日期字符串
DecimalFormat nf = new DecimalFormat("0.00");// 格式化数字
switch (cell.getCellType()) {
case XSSFCell.CELL_TYPE_STRING:
value = cell.getStringCellValue();
break;
case XSSFCell.CELL_TYPE_NUMERIC:
if ("@".equals(cell.getCellStyle().getDataFormatString())) {
value = df.format(cell.getNumericCellValue());
} else if ("General".equals(cell.getCellStyle().getDataFormatString())) {
value = nf.format(cell.getNumericCellValue());
} else {
value = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue()));
}
break;
case XSSFCell.CELL_TYPE_BOOLEAN:
value = cell.getBooleanCellValue();
break;
case XSSFCell.CELL_TYPE_BLANK:
value = "";
break;
default:
value = cell.toString();
}
if (value == null || "".equals(value)) {
continue;
}
linked.add(value);
}
list.add(linked);
}
return list;
}
/**
* 读取Office 2007 excel
*/
private static List<List<Object>> read2007Excel(File file) throws IOException {
List<List<Object>> list = new LinkedList<List<Object>>();
// 构造 XSSFWorkbook 对象,strPath 传入文件路径
XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(file));
// 读取第一章表格内容
XSSFSheet sheet = xwb.getSheetAt(0);
Object value = null;
XSSFRow row = null;
XSSFCell cell = null;
int counter = 0;
for (int i = sheet.getFirstRowNum(); counter < sheet.getPhysicalNumberOfRows(); i++) {
row = sheet.getRow(i);
if (row == null) {
continue;
} else {
counter++;
}
List<Object> linked = new LinkedList<Object>();
for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {
cell = row.getCell(j);
if (cell == null) {
continue;
}
DecimalFormat df = new DecimalFormat("0");// 格式化 number String
// 字符
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 格式化日期字符串
DecimalFormat nf = new DecimalFormat("0.00");// 格式化数字
switch (cell.getCellType()) {
case XSSFCell.CELL_TYPE_STRING:
value = cell.getStringCellValue();
break;
case XSSFCell.CELL_TYPE_NUMERIC:
if ("@".equals(cell.getCellStyle().getDataFormatString())) {
value = df.format(cell.getNumericCellValue());
} else if ("General".equals(cell.getCellStyle().getDataFormatString())) {
value = nf.format(cell.getNumericCellValue());
} else {
value = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue()));
}
break;
case XSSFCell.CELL_TYPE_BOOLEAN:
value = cell.getBooleanCellValue();
break;
case XSSFCell.CELL_TYPE_BLANK:
value = "";
break;
default:
value = cell.toString();
}
if (value == null || "".equals(value)) {
continue;
}
linked.add(value);
}
list.add(linked);
}
return list;
}
你是要将excel信息插入数据看吧,你写读取代码的时候直接读取从第三行开始读取,代码中应该是[2] 。然后就是循环和读取列值了,再插入数据库。
你的数据量是变动的吗?,若是变动的你可以做一个页面,传入行和列;若固定就是这么多数据, XSSFWorkbook xssfWorkbook = new XSSFWorkbook(xxxxx); xssfSheet.getLastRowNum(); 获取所有行;循环获取每一行数据,XSSFRow xssfRow = xssfSheet.getRow(rowNum); 获取某一行有几列,行从0行开始,然后XSSFCell name = xssfRow.getCell(0),XSSFCell desc = xssfRow.getCell(1),XSSFCell prop = xssfRow.getCell(2),XSSFCell len = xssfRow.getCell(3),XSSFCell flasg = xssfRow.getCell(4),XSSFCell mark = xssfRow.getCell(5),定义一个类,接受;然后用list将循环的结果放进去,接下来,批量插入数据,maybatis的foreach标签