今天看到有个先人写的程序,是excel文件导入的程序,其中用到了POIFSFileSystem类,POI导入
现在有个问题是,我之前写的导入程序全部是把要导入的excel文件上传到服务器后在做处理,而这个方法
不需要上传,就直接能取到数据然后插入数据库。这个很不理解,就大家给解释一下,程序片段如下
FileInputStream inputStream = null;
HSSFSheet sheet = null;
int orderNumber = 0;
int workNumber = 0;
String orderDrawing = null;
String orderMarket = null;
Date beginDate = null; inputStream = new FileInputStream(excelFile);
sheet = new HSSFWorkbook(new POIFSFileSystem(inputStream)).getSheetAt(0);
for (int index = 1; index < sheet.getPhysicalNumberOfRows(); index++) {
HSSFRow row = (HSSFRow) sheet.getRow(index);
orderNumber = getNumber(row.getCell(12));
workNumber = getInteger(row.getCell(13));
System.out.println("INDEX: " + index);
if (orderDao.isDuplicateOrder(orderNumber, workNumber)) {
continue;
}
Order order = new Order();
Employee employee = new Employee();
employee.setEmployeeId(employeeId);
order.setEmployee(employee);
order.setOrderNumber(orderNumber);
order.setOrderWorkNumber(workNumber);
order.setOrderCustomerNumber(getInteger(row.getCell(1)));
orderDrawing = getString(row.getCell(4));
if (orderDrawing == null) {
order.setOrderDrawing(getString(row.getCell(3)));
order.setOrderType("Standard");
order.setOrderStatus("Finished");
order.setOrderEndDate(new Date());
} else {
order.setOrderDrawing(orderDrawing);
order.setOrderType("Special");
order.setOrderStatus("ACES");
}
if (getInteger(row.getCell(14)) == 4428) {
orderMarket = "APDC";
} else {
orderMarket = ets.get(getInteger(row.getCell(15)) / 10000);
}
order.setOrderMarket(orderMarket);
order.setOrderQuantity(getInteger(row.getCell(5)));
order.setOrderPrice(getDouble(row.getCell(6)));
beginDate = getDate(row.getCell(0));
order.setOrderBeginDate(beginDate);
order.setOrderMiddleDate(beginDate);
order.setOrderImportDate(new Date());
orderDao.save(order);
}
inputStream.close();

解决方案 »

  1.   

    我之前做的上传也想直接把流传过去,有的是普通的FileInputStream,就没有成功,难道
    sheet = new HSSFWorkbook(new POIFSFileSystem(inputStream)).getSheetAt(0);
    这一行代码就可以了吗,
    上传的代码就是这些,没有其它的了
      

  2.   

    inputStream = new FileInputStream(excelFile);
    sheet = new HSSFWorkbook(new POIFSFileSystem(inputStream))
    把excelFile读成inputStream再转成了HSSFWorkbook,就能取数据了
      

  3.   

    还有一个问题,项目里用的是struts2,我今天又作了一个导入功能出现问题如下
    NFO: org.apache.struts2.dispatcher.Dispatcher - Unable to find 'struts.multipart.saveDir' property setting. Defaulting to javax.servlet.context.tempdir
    INFO: org.apache.struts2.interceptor.FileUploadInterceptor之前项目里也有导入,可是并没有设置什么'struts.multipart.saveDir' ,现在确不能导入要求设置临时目录,不知道是为什么,不知道不配置这个'struts.multipart.saveDir' 可以吗