Java中Excel表格中的数据导入到数据库表中 求一个项目的源码 只要界面有一个导入按钮就行 谢谢

格式中存在日期,希望兼容性强一些... 格式中存在日期,希望兼容性强一些 展开
 我来答
无敌聂风
推荐于2016-09-04
知道答主
回答量:24
采纳率:0%
帮助的人:16.5万
展开全部
导入excel一般分为两步,先上传再解析插入数据库。。。核心代码就是下面这两个方法,前几天刚写的例子:
//上传:
public String doUpload() throws Exception{

System.out.println(upload);
System.out.println(uploadContentType);
System.out.println(uploadFileName);

//根据逻辑路径获取实际上传到服务器的路径(物理路径)
// D:\\apache-tomcat-6.0.30\\apache-tomcat-6.0.30\\webapps\\
//Struts2_chapter04_02fileUpload\\upload
String savePath =
ServletActionContext.
getServletContext().
getRealPath("/upload/"+this.uploadFileName);

FileInputStream fis =
new FileInputStream(upload);
FileOutputStream fos =
new FileOutputStream(savePath);
IOUtils.copy(fis, fos);
fos.flush();
fos.close();
fis.close();
addOrder(this.uploadFileName);
return SUCCESS;
}
//解析并插入数据库
public void addOrder(String uploadFileFileName) throws Exception{
String directory = "/upload";
String targetDirectory = ServletActionContext.getServletContext().getRealPath(directory);
File target = new File(targetDirectory,uploadFileFileName);
boList = new ArrayList<BC_ORDERDETAILBean>();
try{
FileInputStream fi = new FileInputStream(target);
Workbook wb = new HSSFWorkbook(fi);
Sheet sheet = wb.getSheetAt(0);

int rowNum = sheet.getLastRowNum()+1;
for(int i=1;i<rowNum;i++){
BC_ORDERDETAILBean bo = new BC_ORDERDETAILBean();
Row row = sheet.getRow(i);
int cellNum = row.getLastCellNum();
for(int j=0;j<cellNum;j++){
Cell cell = row.getCell(j);
String cellValue = null;
switch(cell.getCellType()){ //判断excel单元格内容的格式,并对其进行转换,以便插入数据库
case 0 : cellValue = String.valueOf((int)cell.getNumericCellValue()); break;
case 1 : cellValue = cell.getStringCellValue(); break;
case 2 : cellValue = String.valueOf(cell.getDateCellValue()); break;
case 3 : cellValue = ""; break;
case 4 : cellValue = String.valueOf(cell.getBooleanCellValue()); break;
case 5 : cellValue = String.valueOf(cell.getErrorCellValue()); break;
}

switch(j){//通过列数来判断对应插如的字段
case 0 : bo.setB2ccertno(cellValue);break;
case 1 : bo.setSeqno(cellValue);break;
case 2 : bo.setOrderno(cellValue);break;
case 3 : bo.setProductname(cellValue);break;
case 4 : bo.setTerm(cellValue);break;
case 5 : bo.setQuantity(cellValue);break;
case 6 : bo.setSubtotal(cellValue);break;
case 7 : bo.setProductcode(cellValue);break;
case 8 : bo.setNote(cellValue);break;
case 9 : bo.setConsignee(cellValue);break;
case 10 : bo.setConsigneeaddress(cellValue);break;
case 11 : bo.setConsigneephone(cellValue);break;
}
}
boList.add(bo);
}
IOrderDao iod = new OrderDao();
iod.addBOtoDB(boList);
}catch(IOException e){
e.printStackTrace();
}
}
更多追问追答
追问
核心方法我写了  我需要一个小的项目参照  谢谢
追答
qq拿来,源码发你。。。
makeio
2014-11-03 · TA获得超过393个赞
知道小有建树答主
回答量:253
采纳率:54%
帮助的人:116万
展开全部
没时间给你写个源程序:
写了个main方法 希望能帮到你
public static void main(String args[]) {
try {
Workbook book = Workbook.getWorkbook(new File("d:/a.xls"));
// 获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了
Sheet sheet=book.getSheet(0);
// 得到当前工作表的行数
int rowNum = sheet.getRows();
//格式化日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
for (int j = 1; j < rowNum; j++) {
// 得到当前行的所有单元格
Cell[] cells = sheet.getRow(j);
if (cells != null && cells.length > 0) {
System.out.print(sheet.getCell(0,j).getContents()+" ");
System.out.print(sheet.getCell(1,j).getContents()+" ");
//日期
//没有其他办法, 如果你知道Excel表格里的格式就固定这么写了
//如果不知道的话 就只能判断咯,把你想到的日期格式在这里都进行一下判断然后再格式化到数据库
System.out.print(sdf.parse(sheet.getCell(2,j).getContents().trim()));
}
}
book.close();

} catch (Exception e) {
e.printStackTrace();
}
追问
谢谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式