使用JAVA存储过程导入EXCEL文件操作指南

合集下载

Java实现导入Excel

Java实现导入Excel

Java实现导⼊Excel上班的时候公司要求做⼀个从⽹页上导⼊excel,研究了半天后,开始着⼿去实现它。

思路很简单:1、做⼀个jsp页⾯,页⾯包括浏览⽂件,提交⽂件2、将excel⽂件上传到服务器3、服务器对该excel⽂件进⾏读出4、将excel⽂件内容显⽰到页⾯上环境搭建:需要准备的包:commons-fileupload-1.2.1.jar & commons-io-1.3.2.jar 这两个包是上传⽤的⼀、Jsp页⾯注意:1、在jsp页⾯的form要使⽤html本⾝的<form>标记,⽽不要使⽤第三⽅视图开源框架的form标记,例如不要使⽤strut的<htm:form>。

2、在<form>的属性⾥必须加上 ENCTYPE="multipart/form-data"1<h1>导⼊Excel</h1>2<hr>3<form action="importExcel" method="post" enctype="multipart/form-data">4<input type="file" name="importExcel" id="importExcel">5<input type="submit" value="导⼊">6</form>⼆、上传excel的Servlet注意:1、导⼊的excel最好⽤后缀为.xls,如果⽤.xlsx可能会导不进去。

2、在调⽤FileItem的write⽅法前必须保证⽂件的存放路径存在否则出现异常。

commons fileupload不会⾃动为你建⽴不存在的⽬录。

java导入导出excel操作

java导入导出excel操作

java导入导出excel操作(jxl)Java解释Excel数据(包的使用)关键字: java excel包下载地址:真实下载地址:网站上对它的特征有如下描述:● 支持Excel 95-2000的所有版本● 生成Excel 2000标准格式● 支持字体、数字、日期操作● 能够修饰单元格属性● 支持图像和图表应该说以上功能已经能够大致满足我们的需要。

最关键的是这套API是纯Java 的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel 文件。

另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。

搭建环境将下载后的文件解包,得到,放入classpath,安装就完成了。

基本操作一、创建文件拟生成一个名为“测试数据.xls”的Excel文件,其中第一个工作表被命名为“第一页”,大致效果如下:Java代码/** Created on Dec 30, 2007** To change the template for this generated file go to* Window>Preferences>Java>Code Generation>Code and Comments*/package ;import .*;import jxl.*;import .*;/*** @author Ken** To change the template for this generated type comment go to* Window>Preferences>Java>Code Generation>Code and Comments*/public class CreateXLS {public static void main(String[] args) {try {WritableWorkbook book = (new File("d:/"));0 means this is 1st page.WritableSheet sheet = ("Sheet_1", 0);value is "test".Label label = new Label(0, 0, "test");(label);WARN:necessarily use integrated package-path, otherwise will be throws path -error.value is .number = new0, ;(number);();();} catch (Exception e) {();}}}编译执行后,会在当前位置产生一个Excel文件。

用java将数据写入excel(整理)

用java将数据写入excel(整理)

用java将数据写入excel(整理)1. 笔记:OutputStream os ;Label label;File file = new File(srcFilePath);File[] list=file.listFiles();os=new FileOutputStream(dstDir+"pnrdata_a330.xls");WritableWorkbook wwb = Workbook.createWorkbook(os);//创建xls文件WritableSheet ws = wwb.createSheet("PNRDATA",0);//设置sheet名//写抬头label = new Label(0,0,"PNR_ID");ws.addCell(label);label = new Label(1,0,"File_Name");ws.addCell(label);label = new Label(2,0,"Start_Index");ws.addCell(label);label = new Label(3,0,"End_Index");ws.addCell(label);wwb.write();2.首先需要一个JXL包,下载地址:/source/292830(1)生成EXCEL需要手动写查询语句把ORACLE数据库中的数据查询出来,再通过操作写到EXCEL文件里面。

(2)通过EXCEL把数据读取到ORACLE,同样需要去读取EXCEL工作薄里面的内容,再通过INSERT语句去插入数据库操作。

示例:包括从Excel读取数据,生成新的Excel,以及修改Excel Java代码1.package common.util;2.3.import jxl.*;4.import jxl.format.UnderlineStyle;5.import jxl.write.*;6.import jxl.write.Number;7.import jxl.write.Boolean;8.9.import java.io.*;10.11.12.public class ExcelHandle13.{14.public ExcelHandle()15.{16.}17.18./**19.* 读取Excel20.*21.* @param filePath22.*/23.public static void readExcel(String filePath)24.{25.try26.{27.InputStream is = new FileInputStream(filePath);28.Workbook rwb = Workbook.getWorkbook(is);29.//Sheet st = rwb.getSheet("0")这里有两种方法获取sheet 表,1为名字,而为下标,从0开始30.Sheet st = rwb.getSheet("original");31.Cell c00 = st.getCell(0,0);32.//通用的获取cell值的方式,返回字符串33.String strc00 = c00.getContents();34.//获得cell具体类型值的方式35.if(c00.getType() == BEL)36.{belCell labelc00 = (LabelCell)c00;38.strc00 = labelc00.getString();39.}40.//输出41.System.out.println(strc00);42.//关闭43.rwb.close();44.}45.catch(Exception e)46.{47. e.printStackTrace();48.}49.}50.51./**52.* 输出Excel53.*54.* @param os55.*/56.public static void writeExcel(OutputStream os)57.{58.try59.{60./**61.* 只能通过API提供的工厂方法来创建Workbook,而不能使用WritableWorkbook的构造函数,62.* 因为类WritableWorkbook的构造函数为protected类型63.* method(1)直接从目标文件中读取WritableWorkbook wwb = Workbook.createWorkbook(new File(targetfile));64.* method(2)如下实例所示将WritableWorkbook直接写入到输出流65.66.*/67.WritableWorkbook wwb = Workbook.createWorkbook(os);68.//创建Excel工作表指定名称和位置69.WritableSheet ws = wwb.createSheet("Test Sheet 1",0);70.71.//**************往工作表中添加数据*****************72.73.//1.添加Label对象bel label = new Label(0,0,"this is a label test");75.ws.addCell(label);76.77.//添加带有字型Formatting对象78.WritableFont wf = new WritableFont(WritableFont.TIMES,18,WritableFont.BOLD,true);79.WritableCellFormat wcf = new WritableCellFormat(wf);bel labelcf = new Label(1,0,"this is a label test",wcf);81.ws.addCell(labelcf);82.83.//添加带有字体颜色的Formatting对象84.WritableFont wfc = new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,fals e,85.UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.RED);86.WritableCellFormat wcfFC = new WritableCellFormat(wfc);bel labelCF = new Label(1,0,"This is a Label Cell",wcfFC);88.ws.addCell(labelCF);89.90.//2.添加Number对象91.Number labelN = new Number(0,1,3.1415926);92.ws.addCell(labelN);93.94.//添加带有formatting的Number对象95.NumberFormat nf = new NumberFormat("#.##");96.WritableCellFormat wcfN = new WritableCellFormat(nf);97.Number labelNF = new jxl.write.Number(1,1,3.1415926,wcfN);98.ws.addCell(labelNF);99.100.//3.添加Boolean对象101.Boolean labelB = new jxl.write.Boolean(0,2,false);102.ws.addCell(labelB);103.104.//4.添加DateTime对象105.jxl.write.DateTime labelDT = newjxl.write.DateTime(0,3,new java.util.Date());106.ws.addCell(labelDT);107.108.//添加带有formatting的DateFormat对象109.DateFormat df = new DateFormat("dd MM yyyy hh:mm:ss");110.WritableCellFormat wcfDF = new WritableCellFormat(df);111.DateTime labelDTF = new DateTime(1,3,new java.util.Date(),wcfDF);112.ws.addCell(labelDTF);113.114.115.//添加图片对象,jxl只支持png格式图片116.File image = new File("f:\\2.png");117.WritableImage wimage = new WritableImage(0,1,2,2,image);118.ws.addImage(wimage);119.//写入工作表120.wwb.write();121.wwb.close();122.}123.catch(Exception e)124.{125. e.printStackTrace();126.}127.}128.129./**130.* 拷贝后,进行修改,其中file1为被copy对象,file2为修改后创建的对象131.* 尽单元格原有的格式化修饰是不能去掉的,我们还是可以将新的单元格修饰加上去,132.* 以使单元格的内容以不同的形式表现133.* @param file1134.* @param file2135.*/136.public static void modifyExcel(File file1,File file2)137.{138.try139.{140.Workbook rwb = Workbook.getWorkbook(file1);141.WritableWorkbook wwb = Workbook.createWorkbook(file2,rwb);//copy142.WritableSheet ws = wwb.getSheet(0);143.WritableCell wc = ws.getWritableCell(0,0);144.//判断单元格的类型,做出相应的转换145.if(wc.getType == BEL)146.{bel label = (Label)wc;bel.setString("The value has been modified");149.}150.wwb.write();151.wwb.close();152.rwb.close();153.}154.catch(Exception e)155.{156. e.printStackTrace();157.}158.}159.160.161.//测试162.public static void main(String[] args)163.{164.try165.{166.//读Excel167.ExcelHandle.readExcel("f:/testRead.xls");168.//输出Excel169.File fileWrite = new File("f:/testWrite.xls");170.fileWrite.createNewFile();171.OutputStream os = new FileOutputStream(fileWrite); 172.ExcelHandle.writeExcel(os);173.//修改Excel174.ExcelHandle.modifyExcel(new file(""),new File("")); 175.}176.catch(Exception e)177.{178. e.printStackTrace();179.}180.}181.}2.在jsp中做相关测试,创建一个writeExcel.jspJava代码1.<%2.response.reset();//清除Buffer3.response.setContentType("application/vnd.ms-excel");4.File fileWrite = new File("f:/testWrite.xls");5.fileWrite.createNewFile();6.new FileOutputStream(fileWrite);7.ExcelHandle.writeExcel(new FileOutputStream(fileWrite));8.%>9.在IE中浏览writeExcel.jsp就可以动态生成Excel文档了,其中response.setContentType("application/vnd.ms-excel");语句必须要,才能确保不乱码,在jsp中输入<%@page contentType="application/vnd.ms-excel;charset=GBK"%>不行。

JAVA实现Excel导入导出以及excel样式设置

JAVA实现Excel导入导出以及excel样式设置

JAVA实现Excel导⼊导出以及excel样式设置JAVA实现Excel导⼊/导出以及excel样式设置图2.1 POI的⽬录结构 POI使⽤初步 POI提供给⽤户使⽤的对象在ermodel包中,主要部分包括Excel对象、样式和格式,还有辅助操作等。

最主要的⼏个对象如表3.1所⽰: 表3.1 POI主要对象POI对象名称对应的Excel对象HSSFWorkbook⼯作簿HSSFSheet⼯作表HSSFRow⾏HSSFCell单元格 下⾯我们来看如下的例⼦,使⽤表3.1中的对象在程序的当前⽬录下创建⼀个Excel⽂件test.xls,在第⼀个单元格中写⼊内容,然后读出第⼀个单元格的内容。

完整的程序如下:import ermodel.HSSFWorkbook;import ermodel.HSSFSheet;import ermodel.HSSFRow;import ermodel.HSSFCell;import java.io.FileOutputStream;import java.io.FileInputStream;public class CreateXL{ public static String xlsFile="test.xls"; //产⽣的Excel⽂件的名称 public static void main(String args[]) { try { HSSFWorkbook workbook = new HSSFWorkbook(); //产⽣⼯作簿对象 HSSFSheet sheet = workbook.createSheet(); //产⽣⼯作表对象 //设置第⼀个⼯作表的名称为firstSheet //为了⼯作表能⽀持中⽂,设置字符编码为UTF_16 workbook.setSheetName(0,"firstSheet",HSSFWorkbook.ENCODING_UTF_16); //产⽣⼀⾏ HSSFRow row = sheet.createRow((short)0); //产⽣第⼀个单元格 HSSFCell cell = row.createCell((short) 0); //设置单元格内容为字符串型 cell.setCellType(HSSFCell.CELL_TYPE_STRING); //为了能在单元格中写⼊中⽂,设置字符编码为UTF_16。

【转】JAVA实现EXCEL的导入和导出(二)

【转】JAVA实现EXCEL的导入和导出(二)

【转】JAVA实现EXCEL的导入和导出(二)【转】JAVA实现EXCEL的导入和导出(二)2010-05-20 12:19=================摘要=====================java如何操作Excel(数据导入导出)(转)jxl.jar,可以到/project/showfiles.php?group_id=79926下载。

一.读取Excel文件内容java 代码/**读取Excel文件的内容* @param file 待读取的文件* @return*/public static String readExcel(File file){StringBuffer sb = new StringBuffer();Workbook wb = null;try {//构造Workbook(工作薄)对象wb=Workbook.getWorkbook(file);} catch (BiffException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}if(wb==null)return null;//获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了Sheet[] sheet = wb.getSheets();if(sheet!=null&&sheet.length>0){//对每个工作表进行循环for(int i=0;i< sheet.length;i++){//得到当前工作表的行数int rowNum = sheet[i].getRows();for(int j=0;j < rowNum;j++){//得到当前行的所有单元格Cell[] cells = sheet[i].getRow(j);if(cells!=null&&cells.length>0){//对每个单元格进行循环for(int k=0;k < cells.length;k++){//读取当前单元格的值String cellValue = cells[k].getContents();sb.append(cellValue+"\t");}}sb.append("\r\n");}sb.append("\r\n");}}//最后关闭资源,释放内存wb.close();return sb.toString();}二.写入Excel文件这里有很多格式了,比如文本内容加粗,加上某些颜色等,可以参考jxl的api.同时还推荐一篇不错的文章:/developerworks/cn/java/l-javaExcel/?ca=j-t10java 代码/**生成一个Excel文件* @param fileName 要生成的Excel文件名*/public static void writeExcel(String fileName){WritableWorkbook wwb = null;try {//首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象wwb = Workbook.createWorkbook(new File(fileName));} catch (IOException e) {e.printStackTrace();}if(wwb!=null){//创建一个可写入的工作表//Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置WritableSheet ws = wwb.createSheet("sheet1", 0);//下面开始添加单元格for(int i=0;i<10;i++){for(int j=0;j<5;j++){//这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行Label labelC = new Label(j, i, "这是第"+(i+1)+"行,第"+(j+1)+"列");try {//将生成的单元格添加到工作表中ws.addCell(labelC);} catch (RowsExceededException e) {e.printStackTrace();} catch (WriteException e) {e.printStackTrace();}}}try {//从内存中写入文件中wwb.write();//关闭资源,释放内存wwb.close();} catch (IOException e) {e.printStackTrace();} catch (WriteException e) {e.printStackTrace();}}}三.在一个Excel文件中查找是否包含某一个关键字java 代码/**搜索某一个文件中是否包含某个关键字* @param file 待搜索的文件* @param keyWord 要搜索的关键字* @return*/public static boolean searchKeyWord(File file,String keyWord){boolean res = false;Workbook wb = null;try {//构造Workbook(工作薄)对象wb=Workbook.getWorkbook(file);} catch (BiffException e) {return res;} catch (IOException e) {return res;}if(wb==null)return res;//获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了Sheet[] sheet = wb.getSheets();boolean breakSheet = false;if(sheet!=null&&sheet.length>0){//对每个工作表进行循环for(int i=0;iif(breakSheet)break;//得到当前工作表的行数int rowNum = sheet[i].getRows(); boolean breakRow = false;for(int j=0;jif(breakRow)break;//得到当前行的所有单元格Cell[] cells = sheet[i].getRow(j);if(cells!=null&&cells.length>0){ boolean breakCell = false;//对每个单元格进行循环for(int k=0;kif(breakCell)break;//读取当前单元格的值String cellValue = cells[k].getContents(); if(cellValue==null)continue;if(cellValue.contains(keyWord)){res = true;breakCell = true;breakRow = true;breakSheet = true;}}}}}}//最后关闭资源,释放内存wb.close();return res;}四.往Excel中插入图片图标插入图片的实现很容易,参看以下代码:java 代码/**往Excel中插入图片* @param dataSheet 待插入的工作表* @param col 图片从该列开始* @param row 图片从该行开始* @param width 图片所占的列数* @param height 图片所占的行数* @param imgFile 要插入的图片文件*/public static void insertImg(WritableSheet dataSheet, int col, int row, int width,int height, File imgFile){WritableImage img = new WritableImage(col, row, width,height, imgFile);dataSheet.addImage(img);}以上代码的注释已经很清楚了,大概也就不用再解释了,我们可以用如下程序验证:java 代码try {//创建一个工作薄WritableWorkbook workbook = Workbook.createWorkbook(new File("D:/test1.xls"));//待插入的工作表WritableSheet imgSheet = workbook.createSheet("Images",0);//要插入的图片文件File imgFile = new File("D:/1.png");//图片插入到第二行第一个单元格,长宽各占六个单元格insertImg(imgSheet,0,1,6,6,imgFile);workbook.write();workbook.close();catch (IOException e) {e.printStackTrace();catch (WriteException e) {e.printStackTrace();但是jxl只支持png格式的图片,jpg格式和gif格式都不支持====================================== ==================jxl.jar包简介/java操作excel jxl.jar下载地址jxl.jar 包简介下载地址:/jexcelapi/ 当前的最高版本是2.6。

java excel导入导出总结

java excel导入导出总结

java excel导入导出总结Java是一种常用的编程语言,它具有很多强大的功能和库,可以用来处理各种各样的任务。

其中之一就是处理Excel文件的导入和导出操作。

在本文中,我们将总结一下Java中如何进行Excel的导入和导出操作,并介绍一些常用的技巧和注意事项。

一、Excel的导入操作在Java中,我们可以使用Apache POI库来进行Excel文件的导入操作。

首先,我们需要在项目中引入Apache POI的相关依赖。

然后,我们可以通过以下步骤来实现Excel的导入:1. 创建一个Workbook对象,用于表示Excel文件。

2. 根据文件路径或输入流创建一个InputStream对象,用于读取Excel文件的内容。

3. 根据文件的扩展名(xls或xlsx),创建一个合适的Workbook实现类的对象。

4. 通过Workbook对象的getSheet()方法获取一个Sheet对象,用于表示Excel文件中的一个工作表。

5. 遍历Sheet对象的每一行和每一列,读取单元格中的数据。

注意事项:- 在读取单元格数据时,我们需要根据单元格的类型来选择合适的读取方法。

例如,如果单元格中的数据是字符串类型,我们可以使用getStringCellValue()方法来读取。

- 在处理日期类型的数据时,我们可以使用DateUtil类来将Excel 中的日期值转换为Java中的Date对象。

- 在遍历行和列时,我们可以使用for循环或迭代器来实现。

二、Excel的导出操作与Excel的导入操作类似,我们同样可以使用Apache POI库来进行Excel文件的导出操作。

下面是导出Excel文件的一般步骤:1. 创建一个Workbook对象,用于表示Excel文件。

2. 创建一个Sheet对象,用于表示Excel文件中的一个工作表。

3. 创建行对象和单元格对象,用于表示Excel文件中的行和单元格。

4. 设置单元格的值和格式。

java excel导入解析

java excel导入解析Java Excel导入解析:实现数据批量处理的利器在如今信息爆炸的时代,大量的数据需要被快速导入和解析,这就要求我们寻找高效的工具来处理这些数据。

而Java语言作为一种广泛使用的编程语言,其强大的功能和丰富的类库使得它成为了数据处理的首选。

本文将介绍如何使用Java语言来实现Excel的导入解析,从而实现数据的批量处理。

一、背景介绍Excel作为一种常见的办公软件,被广泛用于存储和处理各种数据。

然而,当数据量较大时,手动操作显然是不现实的,因此我们需要通过编程的方式来实现对Excel数据的导入和解析。

二、Excel导入解析的基本原理1. 导入Excel数据Java语言提供了丰富的类库,其中包括了用于解析Excel文件的类库。

我们可以使用Apache POI或JExcel等类库来实现对Excel 文件的读取和导入。

通过这些类库,我们可以将Excel文件中的数据读取到Java程序中,从而实现数据的导入。

2. 解析Excel数据导入Excel数据后,我们需要对数据进行解析,以便进行后续的处理。

通常情况下,Excel文件中的数据是以表格的形式存储的,我们可以通过遍历表格的行和列来获取数据。

在遍历过程中,我们可以根据需要对数据进行处理,比如筛选特定条件下的数据、计算数据的统计信息等。

三、Excel导入解析的具体实现步骤1. 引入类库在开始编写Java程序之前,我们需要先引入相关的类库。

以Apache POI为例,我们可以通过Maven等方式将其引入到项目中。

2. 创建工作簿在导入Excel文件之前,我们需要先创建一个工作簿对象,用于表示Excel文件。

可以通过WorkbookFactory类的静态方法来创建工作簿对象。

例如:```javaWorkbook workbook = WorkbookFactory.create(new File("data.xlsx"));```3. 获取工作表工作簿中包含了多个工作表,我们需要根据需要选择特定的工作表进行操作。

Java中导入、导出Excel

Java中导⼊、导出Excel⼀、介绍当前B/S模式已成为应⽤开发的主流,⽽在企业办公系统中,常常有客户这样⼦要求:你要把我们的报表直接⽤Excel打开(电信系统、银⾏系统)。

或者是:我们已经习惯⽤Excel 打印。

这样在我们实际的开发中,很多时候需要实现导⼊、导出Excel的应⽤。

⽬前,⽐较常⽤的实现Java导⼊、导出Excel的技术有两种Jakarta POI和Java Excel下⾯我就分别讲解⼀下如何使⽤这两个技术实现导⼊、导出Excel⼆、使⽤Jakarta POI导⼊、导出ExcelJakarta POI 是⼀套⽤于访问微软格式⽂档的Java API。

Jakarta POI有很多组件组成,其中有⽤于操作Excel格式⽂件的HSSF和⽤于操作Word的HWPF,在各种组件中⽬前只有⽤于操作Excel的HSSF相对成熟。

官⽅主页,API⽂档2.1 环境配置2.1.1下载jar官⽅下载:这⾥可以下载到它的最新版本和⽂档,⽬前最新版本是3.7,这⾥使⽤⽐较稳定的3.6版。

2.1.2加⼊jar包将根⽬录下的poi-3.6-20091214.jar和Lib⽬录下三个通⽤包 commons-logging-1.1.jar junit-3.8.1.jar log4j-1.2.13.jar拷贝到项⽬的Lib下2.2 Jakarta POI HSSF API组件HSSF(⽤于操作Excel的组件)提供给⽤户使⽤的对象在ermodel包中,主要部分包括Excel对象,样式和格式,还有辅助操作。

有以下⼏种对象:常⽤组件:HSSFWorkbook excel的⽂档对象HSSFSheet excel的表单HSSFRow excel的⾏HSSFCell excel的格⼦单元HSSFFont excel字体HSSFDataFormat ⽇期格式HSSFHeader sheet头HSSFFooter sheet尾(只有打印的时候才能看到效果)样式:HSSFCellStyle cell样式辅助操作包括:HSSFDateUtil ⽇期HSSFPrintSetup 打印HSSFErrorConstants 错误信息表2.3 基本操作步骤⾸先,理解⼀下⼀个Excel的⽂件的组织形式,⼀个Excel⽂件对应于⼀个workbook(HSSFWorkbook),⼀个workbook可以有多个sheet(HSSFSheet)组成,⼀个sheet是由多个row(HSSFRow)组成,⼀个row是由多个cell(HSSFCell)组成。

Java数据导入(读)Excel文件解析

Java数据导⼊(读)Excel⽂件解析 在编程中经常需要使⽤到表格(报表)的处理主要以Excel表格为主。

下⾯给出⽤java读取excel表格⽅法: 1.添加jar⽂件 java导⼊导出Excel⽂件要引⼊jxl.jar包,最关键的是这套API是纯Java的,并不依赖Windows系统,即使运⾏在Linux下,它同样能够正确的处理Excel⽂件。

下载地址: 2.jxl对Excel表格的认识 (1)每个单元格的位置认为是由⼀个⼆维坐标(i,j)给定,其中i表⽰列,j表⽰⾏,并且从上到下递增,从左到右递增。

(2)对于合并单元格的以最左,最上的单元格的坐标为准。

如下图中t.xls,⼀班名单(0,0),陈茵(1,2),陈开先(1,6)。

3.java代码对t.xls的读取import java.io.File;import jxl.*;public class Read_excel{public static void main(String[] args) {int i;Sheet sheet;Workbook book;Cell cell1,cell2,cell3;try {//t.xls为要读取的excel⽂件名book= Workbook.getWorkbook(new File("t.xls"));//获得第⼀个⼯作表对象(ecxel中sheet的编号从0开始,0,1,2,3,....)sheet=book.getSheet(0);//获取左上⾓的单元格cell1=sheet.getCell(0,0);System.out.println("标题:"+cell1.getContents());i=1;while(true){//获取每⼀⾏的单元格cell1=sheet.getCell(0,i);//(列,⾏)cell2=sheet.getCell(1,i);cell3=sheet.getCell(2,i);if("".equals(cell1.getContents())==true) //如果读取的数据为空break;System.out.println(cell1.getContents()+"\t"+cell2.getContents()+"\t"+cell3.getContents());i++;}book.close();}catch(Exception e) { }}} 因此,只要我们事先知道要读取的Excel⽂件内数据的排列⽅式就可以⽤Java代码轻松读取啦。

Java导入excel并保存到数据库

Java导⼊excel并保存到数据库⾸先建⽴好excel表格,并对应excel表格创建数据库表。

前台jsp页⾯:其中包含js<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>导⼊excel</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="导⼊excel"><script type="text/javascript" src="view/js/jquery-1.8.2.js"></script></head><script type="text/javascript">var User = function() {this.init = function() {//模拟上传excel$("#uploadEventBtn").unbind("click").bind("click", function() {$("#uploadEventFile").click();});$("#uploadEventFile").bind("change", function() {$("#uploadEventPath").attr("value", $("#uploadEventFile").val());});};//点击上传钮this.uploadBtn = function() {var uploadEventFile = $("#uploadEventFile").val();if (uploadEventFile == '') {alert("请择excel,再上传");} else if (stIndexOf(".xls") < 0) {//可判断以.xls和.xlsx结尾的excelalert("只能上传Excel⽂件");} else {var url = "excel/import.do";var formData = new FormData($('form')[0]);user.sendAjaxRequest(url, "POST", formData);}};this.sendAjaxRequest = function(url, type, data) {$.ajax({url : url,type : type,data : data,dataType : "json",success : function(result) {alert(result.message);},error : function(result) {alert(result.message);},cache : false,contentType : false,processData : false});};};var user;$(function() {user = new User();user.init();});</script><body><form enctype="multipart/form-data" id="batchUpload" action="/excel/import" method="post" class="form-horizontal"><button class="btn btn-success btn-xs" id="uploadEventBtn" style="height:26px;" type="button">择⽂件</button><input type="file" name="file" style="width:0px;height:0px;" id="uploadEventFile"><input id="uploadEventPath" disabled="disabled" type="text" placeholder="请择excel表" style="border: 1px solid #e6e6e6; height: 26px;width: 200px;"/> </form><button type="button" class="btn btn-success btn-sm" onclick="user.uploadBtn()">上传</button></body></html>后台代码:Controller1import java.util.HashMap;2import java.util.Map;5import javax.servlet.http.HttpServletResponse;67import org.springframework.beans.factory.annotation.Autowired;8import org.springframework.stereotype.Controller;9import org.springframework.web.bind.annotation.RequestMapping;10import org.springframework.web.bind.annotation.RequestMethod;11import org.springframework.web.bind.annotation.RequestParam;12import org.springframework.web.bind.annotation.ResponseBody;13import org.springframework.web.multipart.MultipartFile;1415import service.ImportService;1617 @Controller18 @RequestMapping("/excel")19public class ImportExcelController{20 @Autowired(required=true)21private ImportService importService;2223//导⼊excel24 @RequestMapping(value = "/import", method=RequestMethod.POST)25 @ResponseBody26public Map<String, Object> importExcel(@RequestParam(value="file",required = false) MultipartFile file, HttpServletRequest request,HttpServletResponse response){27 Map<String, Object> map = new HashMap<String, Object>();28 String result = importService.readExcelFile(file);29 map.put("message", result);30return map;31 }3233 }service:1import org.springframework.web.multipart.MultipartFile;23public interface ImportService {45/**6 * 读取excel中的数据,⽣成list7*/8 String readExcelFile(MultipartFile file);910 }serviceImpl:1import java.util.List;2import java.util.Map;34import org.springframework.beans.factory.annotation.Autowired;5import org.springframework.stereotype.Service;6import org.springframework.web.multipart.MultipartFile;78import service.ImportService;9import controller.ReadExcel;10import erDao;1112 @Service13public class ImportServiceImpl implements ImportService {14 @Autowired(required = true)15private UserDao userDao;16 @Override17public String readExcelFile(MultipartFile file) {18 String result = "";19//创建处理EXCEL的类20 ReadExcel readExcel = new ReadExcel();21//解析excel,获取上传的事件单22 List<Map<String, Object>> userList = readExcel.getExcelInfo(file);23//⾄此已经将excel中的数据转换到list⾥⾯了,接下来就可以操作list,可以进⾏保存到数据库,或者其他操作,24for(Map<String, Object> user:userList){25int ret = userDao.insertUser(user.get("name").toString(), user.get("sex").toString(), Integer.parseInt(user.get("age").toString()));26if(ret == 0){27 result = "插⼊数据库失败";28 }29 }30if(userList != null && !userList.isEmpty()){31 result = "上传成功";32 }else{33 result = "上传失败";34 }35return result;36 }3738 }dao:public interface UserDao {public int insertUser(String name, String sex, int age);}daoImpl:2import org.springframework.dao.DataAccessException;3import org.springframework.jdbc.core.JdbcTemplate;4import ponent;56import erDao;78 @Component9public class UserDaoImpl implements UserDao {10 @Autowired(required = true)11private JdbcTemplate jdbcTemplate;1213 @Override14public int insertUser(String name, String sex, int age) {15 String sql = "insert into user(name,sex,age) values('"+ name +"','"+ sex +"',"+age+")"; 16int ret = 0;17try {18 ret = jdbcTemplate.update(sql);19 } catch (DataAccessException e) {20 e.printStackTrace();21 }22return ret;23 }2425 }ReadExcel:1package controller;23import java.io.IOException;4import java.io.InputStream;5import java.util.ArrayList;6import java.util.HashMap;7import java.util.List;8import java.util.Map;910import ermodel.HSSFCell;11import ermodel.HSSFWorkbook;12import ermodel.Cell;13import ermodel.Row;14import ermodel.Sheet;15import ermodel.Workbook;16import ermodel.XSSFWorkbook;17import org.springframework.web.multipart.MultipartFile;1819/**20 *21 * @author hewangtong22 *23*/24public class ReadExcel {25// 总⾏数26private int totalRows = 0;27// 总条数28private int totalCells = 0;29// 错误信息接收器30private String errorMsg;3132// 构造⽅法33public ReadExcel() {34 }3536// 获取总⾏数37public int getTotalRows() {38return totalRows;39 }4041// 获取总列数42public int getTotalCells() {43return totalCells;44 }4546// 获取错误信息47public String getErrorInfo() {48return errorMsg;49 }5051/**52 * 读EXCEL⽂件,获取信息集合53 *54 * @param fielName55 * @return56*/57public List<Map<String, Object>> getExcelInfo(MultipartFile mFile) {58 String fileName = mFile.getOriginalFilename();// 获取⽂件名59// List<Map<String, Object>> userList = new LinkedList<Map<String, Object>>();60try {61if (!validateExcel(fileName)) {// 验证⽂件名是否合格62return null;63 }64boolean isExcel2003 = true;// 根据⽂件名判断⽂件是2003版本还是2007版本65if (isExcel2007(fileName)) {66 isExcel2003 = false;68return createExcel(mFile.getInputStream(), isExcel2003);69 } catch (Exception e) {70 e.printStackTrace();71 }72return null;73 }7475/**76 * 根据excel⾥⾯的内容读取客户信息77 *78 * @param is 输⼊流79 * @param isExcel2003 excel是2003还是2007版本80 * @return81 * @throws IOException82*/83public List<Map<String, Object>> createExcel(InputStream is, boolean isExcel2003) {84try {85 Workbook wb = null;86if (isExcel2003) {// 当excel是2003时,创建excel200387 wb = new HSSFWorkbook(is);88 } else {// 当excel是2007时,创建excel200789 wb = new XSSFWorkbook(is);90 }91return readExcelValue(wb);// 读取Excel⾥⾯客户的信息92 } catch (IOException e) {93 e.printStackTrace();94 }95return null;96 }9798/**99 * 读取Excel⾥⾯客户的信息100 *101 * @param wb102 * @return103*/104private List<Map<String, Object>> readExcelValue(Workbook wb) {105// 得到第⼀个shell106 Sheet sheet = wb.getSheetAt(0);107// 得到Excel的⾏数108this.totalRows = sheet.getPhysicalNumberOfRows();109// 得到Excel的列数(前提是有⾏数)110if (totalRows > 1 && sheet.getRow(0) != null) {111this.totalCells = sheet.getRow(0).getPhysicalNumberOfCells();112 }113 List<Map<String, Object>> userList = new ArrayList<Map<String, Object>>();114// 循环Excel⾏数115for (int r = 1; r < totalRows; r++) {116 Row row = sheet.getRow(r);117if (row == null) {118continue;119 }120// 循环Excel的列121 Map<String, Object> map = new HashMap<String, Object>();122for (int c = 0; c < this.totalCells; c++) {123 Cell cell = row.getCell(c);124if (null != cell) {125if (c == 0) {126// 如果是纯数字,⽐如你写的是25,cell.getNumericCellValue()获得是25.0,通过截取字符串去掉.0获得25 127if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {128 String name = String.valueOf(cell.getNumericCellValue());129 map.put("name", name.substring(0, name.length() - 2 > 0 ? name.length() - 2 : 1));// 名称130 } else {131 map.put("name", cell.getStringCellValue());// 名称132 }133 } else if (c == 1) {134if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {135 String sex = String.valueOf(cell.getNumericCellValue());136 map.put("sex",sex.substring(0, sex.length() - 2 > 0 ? sex.length() - 2 : 1));// 性别137 } else {138 map.put("sex",cell.getStringCellValue());// 性别139 }140 } else if (c == 2) {141if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {142 String age = String.valueOf(cell.getNumericCellValue());143 map.put("age", age.substring(0, age.length() - 2 > 0 ? age.length() - 2 : 1));// 年龄144 } else {145 map.put("age", cell.getStringCellValue());// 年龄146 }147 }148 }149 }150// 添加到list151 userList.add(map);152 }153return userList;154 }155156/**157 * 验证EXCEL⽂件158 *159 * @param filePath160 * @return162public boolean validateExcel(String filePath) {163if (filePath == null || !(isExcel2003(filePath) || isExcel2007(filePath))) { 164 errorMsg = "⽂件名不是excel格式";165return false;166 }167return true;168 }169170// @描述:是否是2003的excel,返回true是2003171public static boolean isExcel2003(String filePath) {172return filePath.matches("^.+\\.(?i)(xls)$");173 }174175// @描述:是否是2007的excel,返回true是2007176public static boolean isExcel2007(String filePath) {177return filePath.matches("^.+\\.(?i)(xlsx)$");178 }179180 }。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

利用JAV A存储过程进行EXCEL导入
导入思路
顾问提供的PO导入FORM已经给了我们一个导入数据到系统的一个模板,基本能够满足我们的要求,该FORM主要完成以下动作:
1.显示文件上传页面给用户选择文件
2.将文本文件以字符流的形式存入到fnd_lobs表的BLOB字段
3.从BLOB字段读取数据,通过逗号分割(,)的方式从BLOB字段获取每个字段的值
4.存入系统临时表进行后续的导入处理
该方法的主要缺点在于需要用户手工将EXCEL文件存为.csv文件(即普通.txt文件),以及通过逗号分割进行解析字符流的方式进行文本文件的处理,如果用户提供的EXCEL单元格的数据中有逗号(,),则解析会出错。

该方法可以利用JAV A存储过程进行改进为:
1.在上传页面用户直接上传EXCEL文件
2.将文本文件以字符流的形式存入到fnd_lobs表的BLOB字段
3.以BLOB字段作为文件输入流,调用JAV A存储过程获取EXCEL文件内容
4.存入系统临时表进行后续的导入处理
在新方法的第3步中,调用JAV A类型的存储过程,引用处理EXCEL的JAV A API进行文件内容的读取。

由于是直接解析EXCEL文件,可以减少出错的概率,另外也可以通过对API 进行替换的方式来处理其他类型的文件,如WORD或XML文件等。

导入实现
具体细节部分请参照附件的XXEXCELIMPORT.fmb文件,以下部分只说明主要步骤。

创建FORM
1.创建临时表块以及上传功能按钮
2.添加上传文件功能,
以上FORM部分具体参照顾问提供的PO导入FORM以及其中的文件上传程序段UPLOAD_FILE
建立java存储过程
1.建立java文件
a)具体见附件中的java文件
2.编译java,生成.class文件
a)使用javac或者是集成开发环境生成.class,示例使用eclipse集成开发环境自动生
成. class文件
3.将.class文件上传到服务器某个文件夹中
a)在示例中将.class文件上传到/tmp/yz文件夹
4.登录服务器,切换到ORA用户(如TESTORA、VISORA),进入上传的文件夹目录
a)su – visora
b)cd /tmp/yz
5.使用loadjava程序将class文件以及引用的jar包编译上数据库
a)loadjava –user apps/apps –resolve jxl.jar // 只需要执行一次就行了
b)loadjava -user apps/apps -resolve EXCELIMPOR T.class
6.在PLSQL或SQLPLUS中创建存储过程
a)create or replace procedure XXEXCELIMPORT(file_id number)
as language java
name'EXCELIMPORT.ExcelImport(int)';
cd ..
cd testmgr
cd tmp
cd lqc
ls pwd
修改UPLOAD_FILE
将顾问提供的程序段UPLOAD_FILE中的xxgem_po_import.import_file部分去除掉,调用自己创建的存储过程:
1.去除
2.添加
g processing。

相关文档
最新文档