使用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 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

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文件解析

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并保存到数据库

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 }。

[讲解]java导入excel表格

[讲解]java导入excel表格

1 从Excel文件读取数据表Java Excel API既可以从本地文件系统的一个文件(.xls),也可以从输入流中读取Excel数据表。

读取Excel数据表的第一步是创建Workbook(术语:工作薄),下面的代码片段举例说明了应该如何操作:(完整代码见ExcelReading.java)一旦创建了Workbook,我们就可以通过它来访问Excel Sheet(术语:工作表)。

参考下面的代码片段:我们既可能通过Sheet的名称来访问它,也可以通过下标来访问它。

如果通过下标来访问的话,要注意的一点是下标从0开始,就像数组一样。

一旦得到了Sheet,我们就可以通过它来访问Excel Cell(术语:单元格)。

参考下面的代码片段:如果仅仅是取得Cell的值,我们可以方便地通过getContents()方法,它可以将任何类型的Cell值都作为一个字符串返回。

示例代码中Cell(0, 0)是文本型,Cell(1, 0)是数字型,Cell(1,1)是日期型,通过getContents(),三种类型的返回值都是字符型。

如果有需要知道Cell内容的确切类型,API也提供了一系列的方法。

参考下面的代码片段:在得到Cell对象后,通过getType()方法可以获得该单元格的类型,然后与API 提供的基本类型相匹配,强制转换成相应的类型,最后调用相应的取值方法getXXX(),就可以得到确定类型的值。

API提供了以下基本类型,与Excel的数据格式相对应,如下图所示:每种类型的具体意义,请参见Java Excel API Document。

当你完成对Excel电子表格数据的处理后,一定要使用close()方法来关闭先前创建的对象,以释放读取数据表的过程中所占用的内存空间,在读取大量数据时显得尤为重要。

参考如下代码片段:Java Excel API提供了许多访问Excel数据表的方法,在这里我只简要地介绍几个常用的方法,其它的方法请参考附录中的Java Excel API Document。

javaexcel导入导出原理

javaexcel导入导出原理

javaexcel导入导出原理Java中实现Excel导入和导出的原理主要基于Apache POI库。

Apache POI是一个Java库,用于读取和写入Microsoft Office格式的文件,其中包括Excel。

它提供了一组API,可以操作Excel文件的内容、样式和格式。

导入Excel的原理如下:1. 使用Java的FileInputStream类读取Excel文件。

该类用于从磁盘中读取文件的字节流。

2. 创建一个工作簿对象(Workbook),该对象将表示整个Excel文件。

可以根据Excel文件的类型(.xls或.xlsx)选择HSSFWorkbook或XSSFWorkbook类来创建工作簿。

3. 获取工作簿中的工作表对象(Sheet),可以通过名称或索引获取。

工作表是Excel文件中的数据存储单元。

4. 遍历工作表中的每一行。

可以使用getRow方法获取行对象。

5. 遍历每一行中的单元格。

可以使用getCell方法获取单元格对象。

6. 根据单元格的数据类型,使用不同的方法获取单元格的值。

例如,数字类型使用getNumericCellValue方法,字符串类型使用getStringCellValue方法,日期类型使用getDateCellValue方法,布尔类型使用getBooleanCellValue方法。

7. 将获取到的单元格数据保存到Java对象中,或执行其他逻辑操作。

导出Excel的原理如下:1. 创建一个工作簿对象(Workbook),例如HSSFWorkbook或XSSFWorkbook。

2. 创建一个工作表对象(Sheet)。

3. 创建行对象(Row)并设置行索引。

4. 创建单元格对象(Cell)并设置单元格的值。

5.可以为单元格设置其他属性,如样式、格式和数据类型。

6.将行对象添加到工作表对象中。

7.将工作表对象添加到工作簿对象中。

8. 使用Java的FileOutputStream类将工作簿写入磁盘中的Excel文件。

java实现导入excel功能

java实现导入excel功能

java实现导⼊excel功能实现功能: 1、Excel模板下载 2、导⼊excel⼀、jsp效果和代码1<form id="uploadForm" target="frameFile" class="bs-docs-example form-horizontal" method="post" action="<%=path %>/webCenter.do" enctype="multipart/form-data">2<input type="hidden" id="conId" name="conId" value="<%=conId%>">3<input type="hidden" id="code" name="code" value="<%=code%>">4<input type="hidden" name="method" value="insertUserInfo">5<table cellpadding="0" cellspacing="0" border="0" style="width:600px;margin:20px auto;text-algin:left;">6<tr><td colspan="4"><input id="dyId" type="hidden"/></td></tr>7<tr><td colspan="3"><a href="/center/file/userInfoModel.xlsx" id="downloadModel" name="downloadModel" style="margin-left:7px;"><u>点击下载⼈员模板</u></a></td></tr> 8<tr><td colspan="4"><br/></td></tr>9<tr><td colspan="3"><input id="files" name="files" type="file" style="width:200px;"/></td></tr><!-- background:url('/center/images/uploadImg.png') no-repeat 0px 10px; -->10<tr><td colspan="4"><br/></td></tr>11<tr>12<td colspan="4" style="text-align: center;">13<hr style="width:720px;border-width: 0.3px;margin-left:-10px;">14<button id="tiJiao" type="button" class="czbtn" style="width:100px;font-size: 16px;">导⼊</button>15</td>16</tr>17</table>18</form>View Code⼆、js代码1 $("#tiJiao").click(function(){2 if($("#files").val() == ""){3 alert("请选择要上传的⽂件");4 }else{5 CommonPerson.Base.LoadingPic.FullScreenShow();6 $("#tkDiv").hide();7 $("#tk1").hide();8 $("#uploadForm").submit();9 }10 })View Code三、action处理1 /**2 * ⼈员信息导⼊3 * @param conId4 * @param code5 * @param request6 * @param response7 */8 @RequestMapping(params="method=insertUserInfo",method=RequestMethod.POST)9 public void insertUserInfo(Integer conId,String code,HttpServletRequest request,HttpServletResponse response){10 try {11 String msg = "";12 Integer state = 0;13 String fileUrl = "/files/excel/";14 HttpSession session = this.getSession(request);15 Adminuser adminUser = session.getAttribute("centerAdminUser") == null?null:(Adminuser) session.getAttribute("centerAdminUser");16 if(adminUser == null){17 try {18 response.sendRedirect(request.getContextPath()+"/center/index.jsp");19 } catch (Exception e) {20 e.printStackTrace();21 }22 }else{23 MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;24 MultipartFile multipartFile = multipartRequest.getFile("files");25 InputStream is = multipartFile.getInputStream();26 if(is!=null){27 Workbook wb = WorkbookFactory.create(is);28 CellStyle style = wb.createCellStyle();29 style.setFillForegroundColor(IndexedColors.RED.getIndex());30 style.setFillPattern(CellStyle.SOLID_FOREGROUND);31 List<UserInfo> userInfoList = new ArrayList<UserInfo>();32 int rowCount = 0;33 boolean temp = true;34 try {35 Sheet st = wb.getSheetAt(0);36 int rowNum = st.getLastRowNum(); //获取Excel最后⼀⾏索引,从零开始,所以获取到的是表中最后⼀⾏⾏数减⼀37 int colNum = st.getRow(0).getLastCellNum();//获取Excel列数38 for(int r=1;r<=rowNum;r++){//读取每⼀⾏,第⼀⾏为标题,从第⼆⾏开始39 rowCount = r;40Row row = st.getRow(r);41UserInfo userInfo = new UserInfo();42 for(int l=0;l<colNum;l++){//读取每⼀⾏的每⼀列43Cell cell = row.getCell(l);44if(cell != null){45cell.setCellType(Cell.CELL_TYPE_STRING);46 }47 if(l != 8 && l != 9){//第9列和第10列(列数是从0开始遍历)分别是⾝份证号码和⼯作背景,这两项为选填,其余项全为必填48if(cell != null && !"".equals(cell.toString().trim())){49 System.out.print(cell + "\t");50 }else{51 System.out.print("该项不能为空" + "\t");52 temp = false;53//给Excel中为空格的必填项添加背景⾊54 Cell newCell = row.createCell(l);55newCell.setCellStyle(style);56 }57 }else{//⾝份证号和⼯作背景58 System.out.print(cell + "\t");59 }60 if(temp){61 switch (l) {62 case 0: userInfo.setEmail(cell.getStringCellValue()); break;63 case 1: userInfo.setMobilePhone(cell.getStringCellValue()); break;64 case 2: userInfo.setPassword(cell.getStringCellValue()); break;65 case 3: userInfo.setTrueName(cell.getStringCellValue()); break;66 case 4: userInfo.setXingPingyin(cell.getStringCellValue()); break;67 case 5: userInfo.setMingPingyin(cell.getStringCellValue()); break;68 case 6: userInfo.setSex(cell.getStringCellValue()); break;69 case 7: userInfo.setBirthday(cell.getStringCellValue()); break;70 case 8: userInfo.setIdCard(cell.getStringCellValue()); break;71 case 9: userInfo.setBeijin(cell.getStringCellValue()); break;72 case 10: userInfo.setXueli(cell.getStringCellValue()); break;73 case 11:74 userInfo.setProvinceName(cell.getStringCellValue());75 Hospital provinceId = hospitalService.getHospitalByProvince(cell.getStringCellValue());76if(provinceId != null){77userInfo.setProvince(provinceId.getHospitalId()+"");78 }79 break;80 case 12:81 userInfo.setCityName(cell.getStringCellValue());82 Hospital cityId = hospitalService.getHospitalByCity(cell.getStringCellValue());83if(cityId != null){84userInfo.setCity(cityId.getHospitalId()+"");85 }86 break;87 case 13:88 userInfo.setDanwei(cell.getStringCellValue());89 break;90 case 14: userInfo.setKs(cell.getStringCellValue()); break;91 case 15: userInfo.setZhicheng(cell.getStringCellValue()); break;92 case 16: userInfo.setZhiwei(cell.getStringCellValue()); break;93 case 17: userInfo.setAddress(cell.getStringCellValue()); break;94 case 18: userInfo.setZip(cell.getStringCellValue()); break;95 case 19: userInfo.setTelphone(cell.getStringCellValue()); break;96 }97 userInfo.setConferencesId(conId);98 userInfo.setFromWhere(code);99 userInfo.setCreateTime(new Date());100 }101 }102 System.out.println();103 userInfoList.add(userInfo);104 }105 if(temp){//Excel完全没有问题106 webService.saveOrUpdateAll(userInfoList);107 state = 1;108msg = "导⼊成功";109 }else{//Excel存在必填项为空的情况110 state = 2;111msg = "Excel数据格式有问题,请下载表格,并将其中标红⾊的部分填写完整";112 String filePath = request.getSession().getServletContext().getRealPath("files/excel");113String fileName = DateTime.getDateString(new Date(), "yyyy_MM_dd")+String.valueOf(System.currentTimeMillis()/1000)+".xlsx"; 114 OutputStream out = new FileOutputStream(new File(filePath + "/" + fileName));115 wb.write(out);116 out.close();117 fileUrl = fileUrl + fileName;118 }119 }catch (Exception e) {120 System.out.println("第"+rowCount+"⾏出错");121 msg = "第"+rowCount+"⾏出错";122 e.printStackTrace();123 }124 }125 is.close();126 JSONObject result = new JSONObject();127 result.accumulate("state",state);128 result.accumulate("remark",msg);129 result.accumulate("fileUrl",fileUrl);130 String urlString = "<script type='text/javascript'>window.parent.insertResult('"+result.toString()+"')</script>";131 PrintWriter out = response.getWriter();132 response.setCharacterEncoding("utf-8");133 response.setContentType("text/html;charset=UTF-8");134 out.write(urlString);135 out.flush();136 out.close();137 }138 } catch (Exception e) {139 e.printStackTrace();140 try {141 JSONObject result = new JSONObject();142 result.accumulate("state",0);143 result.accumulate("remark","excel数据格式有问题,导⼊失败");144 String urlString ="<script type='text/javascript'>window.parent.insertResult('"+result.toString()+"')</script>"; 145 PrintWriter out = response.getWriter();146 response.setCharacterEncoding("utf-8");147 response.setContentType("text/html;charset=UTF-8");148 out.write(urlString);149 out.flush();150 out.close();151 } catch (Exception e2) {152 e2.printStackTrace();153 }154 }155 }View Code。

java实现Excel的导入、导出

java实现Excel的导入、导出

java实现Excel的导⼊、导出⼀、Excel的导⼊导⼊可采⽤两种⽅式,⼀种是JXL,另⼀种是POI,但前者不能读取⾼版本的Excel(07以上),后者更具兼容性。

由于对两种⽅式都进⾏了尝试,就都贴出来分享(若有错误,请给予指正)⽅式⼀、JXL导⼊所需jar包 JXL.jarpublicstaticList<PutStorageInfo> readExcelByJXL(String filePath){List<PutStorageInfo> infoList =newArrayList<PutStorageInfo>();Map<String,List<String>> map =newHashMap<String,List<String>>();infoList.clear();try{InputStream is =newFileInputStream(filePath);Workbook workbook =Workbook.getWorkbook(is);//获取第1张表Sheet sheet = workbook.getSheet(0);//获取总的列数int columns = sheet.getColumns();//获取总的⾏数int rows = sheet.getRows();//先列后⾏(j,i)for(int i =1; i < rows; i++){List<String> contentList =newArrayList<String>();contentList.clear();for(int j =1; j < columns; j++){contentList.add(sheet.getCell(j,i).getContents());}map.put("StorageInfo"+i, contentList);}//遍历map集合,封装成beanfor(Map.Entry<String,List<String>> entry : map.entrySet()){List<String> list = entry.getValue();PutStorageInfo storageInfo =newPutStorageInfo();storageInfo.setProductcode(list.get(0));storageInfo.setProductsort(list.get(1));storageInfo.setProductbrand(list.get(2));storageInfo.setProductname(list.get(3));storageInfo.setProductquantity(list.get(4));storageInfo.setProductcontent(list.get(5));storageInfo.setProductnetweight(list.get(6));storageInfo.setProductcountry(list.get(7));storageInfo.setProductpdate(list.get(8));storageInfo.setProductprice(list.get(9));storageInfo.setProductmark(list.get(10));infoList.add(storageInfo);}is.close();}catch(Exception e){e.printStackTrace();}return infoList;}⽅式⼆、POI导⼊所需jar包poi-3.6-20091214.jarpoi-ooxml-3.6-20091214.jarpoi-ooxml-schemas-3.6-20091214.jarxmlbeans-2.3.0.jardom4j-1.6.1.jarjdom-2.0.6.jarpublicstaticList<PutStorageInfo> readExcelByPOI(String filePath){List<PutStorageInfo> infoList =newArrayList<PutStorageInfo>();Map<String,List<String>> map =newHashMap<String,List<String>>();infoList.clear();try{InputStream is =newFileInputStream(filePath);int index = stIndexOf(".");String postfix = filePath.substring(index+1);Workbook workbook =null;if("xls".equals(postfix)){workbook =newHSSFWorkbook(is);}elseif("xlsx".equals(postfix)){workbook =newXSSFWorkbook(is);}//获取第1张表Sheet sheet = workbook.getSheetAt(0);//总的⾏数int rows = sheet.getLastRowNum();//总的列数--->最后⼀列为null则有问题,读取不完整,将表头的数⽬作为总的列数,没有的则补为null int columns = sheet.getRow(0).getLastCellNum();//先列后⾏for(int i =1; i <= rows; i++){ Row row = sheet.getRow(i);if(null!= row && row.getFirstCellNum()==-1){//这⼀⾏是空⾏,不读取continue;}//这⼀⾏的总列数// columns = row.getLastCellNum();List<String> contentList =newArrayList<String>();contentList.clear();for(int j =1; j < columns; j++){if(row.getCell(j)!=null){row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);contentList.add(row.getCell(j).getStringCellValue());}else{contentList.add("");}}map.put("StorageInfo"+i, contentList);}//遍历map集合,封装成beanfor(Map.Entry<String,List<String>> entry : map.entrySet()){List<String> list = entry.getValue();PutStorageInfo storageInfo =newPutStorageInfo();storageInfo.setProductcode(list.get(0));storageInfo.setProductsort(list.get(1));storageInfo.setProductbrand(list.get(2));storageInfo.setProductname(list.get(3));storageInfo.setProductquantity(list.get(4));storageInfo.setProductcontent(list.get(5));storageInfo.setProductnetweight(list.get(6));storageInfo.setProductcountry(list.get(7));storageInfo.setProductpdate(list.get(8));storageInfo.setProductprice(list.get(9));storageInfo.setProductmark(list.get(10));infoList.add(storageInfo);}is.close();}catch(Exception e){e.printStackTrace();}return infoList;}⼆、Excel导出采⽤JXL实现publicstaticvoid creatExcel(List<PutStorageInfo> storageInfoList,String fileName){try{OutputStream os =newFileOutputStream(fileName);//创建可写的⼯作薄WritableWorkbook workbook =Workbook.createWorkbook(os);//创建第⼀张表WritableSheet sheet = workbook.createSheet("Sheet1",0);//设置根据内容⾃动宽度CellView cellView =newCellView();cellView.setAutosize(true);//在下边for循环中为每⼀列设置//设置列宽度,此种⽅式参数的意思,i-->对应的⾏或列 j-->要设置的宽度// sheet.setColumnView(0, 100);// sheet.setRowView(0, 300);//设置字体加粗且背景颜⾊为黄⾊WritableFont boldFont =newWritableFont(WritableFont.ARIAL,10,WritableFont.BOLD);//⿊体WritableCellFormat cellrFormate =newWritableCellFormat(boldFont);cellrFormate.setBackground(Colour.YELLOW);//先添加表头List<String> titleList = getTitleList();//循环创建单元格,先列后⾏for(int i =0; i < titleList.size(); i++){//sheet.setColumnView(i, cellView);sheet.setColumnView(i,20);Label label =newLabel(i,0, titleList.get(i), cellrFormate);sheet.addCell(label);}LogUtil.logOut(JXLWriteExcel.class,storageInfoList.size()+"");String[][] content = convertToArr(storageInfoList);//设置content的⾃适应当前列的宽度,⽂本太对会⾃动换⾏ new Label(j, i+1, content[i][j-1],contentFormat); WritableCellFormat contentFormat =newWritableCellFormat();contentFormat.setWrap(true);//然后添加⼊库信息条⽬for(int i =0; i < storageInfoList.size(); i++){Label labelID =newLabel(0,i+1,(i+1)+"");sheet.addCell(labelID);for(int j =1; j < titleList.size(); j++){Label label =newLabel(j, i+1, content[i][j-1]);sheet.addCell(label);}}//把创建的内容写⼊到输出流中,并关闭输出流workbook.write();workbook.close();os.close();//将存储了⼊库bean的list清空storageInfoList.clear();}catch(Exception e){e.printStackTrace();}}privatestaticString[][] convertToArr(List<PutStorageInfo> storageInfoList){String[][] content =newString[storageInfoList.size()][11];for(int i =0; i < storageInfoList.size(); i++){PutStorageInfo info = storageInfoList.get(i);//每个bean中总项有11项content[i][0]= info.getProductcode();content[i][1]= info.getProductsort();content[i][2]= info.getProductbrand();content[i][3]= info.getProductname();content[i][4]= info.getProductquantity();content[i][5]= info.getProductcontent();content[i][6]= info.getProductnetweight();content[i][7]= info.getProductcountry();content[i][8]= info.getProductpdate();content[i][9]= info.getProductprice();content[i][10]= info.getProductmark();}return content;}privatestaticList<String> getTitleList(){List<String> list =newArrayList<String>();list.add("Item No.");list.add("Product code");list.add("Sort");list.add("Brand");list.add("Product Name");list.add("Quantity(Pieces)");list.add("Content");list.add("Net Weight");list.add("Country");list.add("Best before date");list.add("Price(EURO)");list.add("Remarks");return list;}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

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

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

利用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文件,以下部分只说明主要步骤。

创建FORM1.创建临时表块以及上传功能按钮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 – visorab)cd /tmp/yz5.使用loadjava程序将class文件以及引用的jar包编译上数据库a)loadjava –user apps/apps –resolve jxl.jar // 只需要执行一次就行了b)loadjava -user apps/apps -resolve EXCELIMPOR T.class6.在PLSQL或SQLPLUS中创建存储过程a)create or replace procedure XXEXCELIMPORT(file_id number)as language javaname'EXCELIMPORT.ExcelImport(int)';cd ..cd testmgrcd tmpcd lqcls pwd修改UPLOAD_FILE将顾问提供的程序段UPLOAD_FILE中的xxgem_po_import.import_file部分去除掉,调用自己创建的存储过程:1.去除2.添加g processing。

java 使用jxl技术excel文件进行导入和导出实验用到的知识与技术

java 使用jxl技术excel文件进行导入和导出实验用到的知识与技术

java 使用jxl技术excel文件进行导入和导出实验用到的知识与技术Java是一种流行的编程语言,而JXL技术是一种用于处理Excel文件的Java库。

在本文中,我们将一步一步地介绍如何使用JXL技术导入和导出Excel文件。

我们将从JXL技术的概述开始,然后讨论如何导入Excel文件,接着是如何导出Excel文件。

JXL技术是一个基于Java的开源库,用于读取、写入和操作Microsoft Excel文件。

它提供了一组API,可以方便地处理Excel文件中的单元格、行和列。

不仅可以读取现有的Excel文件,还可以创建新的Excel文件并在其中写入数据。

JXL技术支持Excel的各种版本,包括xls和xlsx格式。

接下来,我们将讨论如何导入Excel文件。

首先,我们需要在项目中引入JXL库的依赖。

在Maven项目中,我们可以将以下依赖添加到pom.xml 文件中:xml<dependency><groupId>net.sourceforge.jexcelapi</groupId><artifactId>jxl</artifactId><version>2.6.12</version></dependency>一旦我们引入了JXL依赖,我们就可以使用它的API来导入Excel文件。

首先,我们需要创建一个Workbook对象,它代表整个Excel文件。

我们可以使用Workbook类的静态方法getWorkbook()来打开一个现有的Excel文件,例如:javaWorkbook workbook = Workbook.getWorkbook(newFile("path/to/excel.xls"));在Workbook对象上,我们可以执行各种操作,例如获取特定的工作表、读取单元格的值等。

javaexcel表格导入的两种方式

javaexcel表格导入的两种方式

javaexcel表格导⼊的两种⽅式⽅式⼀:使⽤POI,Apache POI是基于Office Open XML标准(OOXML)和Microsoft的OLE 2复合⽂档格式(OLE2)处理各种⽂件格式的开源项⽬。

简⽽⾔之,您可以使⽤Java读写MS Excel⽂件,可以使⽤Java读写MS Word和MS PowerPoint⽂件。

第⼀步导⼊依赖:<dependencies><!--xlsx(03)--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.9</version></dependency><!--xlsx(07)--><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.9</version></dependency><!--⽇期格式化⼯具--><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.10.6</version></dependency><!--test--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version><scope>test</scope></dependency></dependencies>第⼆步:使⽤java代码实现:public void testWrite03() throws Exception{//创建⼀个⼯作簿 03 HSSFWorkbook(),07 XSSFWorkbook() 07升级 SXSSFWorkbook()Workbook workbook = new HSSFWorkbook();//创建⼀个⼯作表Sheet sheet = workbook.createSheet("学⽣表");//创建⼀个⾏Row row1 = sheet.createRow(0);//创建⼀个单元格Cell cell11 = row1.createCell(0);cell11.setCellValue("姓名");Cell cell12 = row1.createCell(1);cell12.setCellValue("张三");//创建第⼆⾏Row row2 = sheet.createRow(1);Cell cell21 = row2.createCell(0);cell21.setCellValue("统计时间");Cell cell22 = row2.createCell(1);String time = new DateTime().toString("yyyy-MM-dd HH:mm:ss");cell22.setCellValue(time);//⽣成⼀张表 03⽤xls结尾 07⽤xslx结尾FileOutputStream fileOutputStream = new FileOutputStream(PATH + "学⽣表.xls");//输出workbook.write(fileOutputStream);//关闭流fileOutputStream.close();System.out.println("学⽣表⽣成完毕");}导⼊:String PATH ="F:\\英雄时刻\\91662429\\kuang-poi";@Testpublic void testRe03() throws Exception {//创建⼀个⼯作簿 03 HSSFWorkbook(),07XSSFWorkbook()//获取⽂件流:FileInputStream fileInputStream = new FileInputStream(PATH +"学⽣表.xls");Workbook workbook = new HSSFWorkbook(fileInputStream);//得到表Sheet sheet = workbook.getSheetAt(0);//得到⾏Row row = sheet.getRow(0);//得到列Cell cell = row.getCell(0);System.out.println(cell.getStringCellValue());fileInputStream.close();}导⼊不同类型的多条记录:public void testCellType() throws Exception{//获取⽂件流:FileInputStream fileInputStream = new FileInputStream(PATH + "⼈员类别表.xls"); Workbook workbook = new HSSFWorkbook(fileInputStream);Sheet sheet = workbook.getSheetAt(0);//获取标题内容Row rowTitle = sheet.getRow(0);if(rowTitle !=null){int cellcount = rowTitle.getPhysicalNumberOfCells();for (int cellNumber = 0; cellNumber <cellcount ; cellNumber++) {Cell cell = rowTitle.getCell(cellNumber);if(cell!=null){int cellType = cell.getCellType();String cellValue = cell.getStringCellValue();System.out.print(cellValue+" ⼁ ");}}System.out.println();}int rowCount = sheet.getPhysicalNumberOfRows();for (int rowNumber = 0; rowNumber < rowCount; rowNumber++) {Row rowData = sheet.getRow(rowNumber);if(rowData != null){//读取每⾏中的列int cellCount = rowTitle.getPhysicalNumberOfCells();for (int cellNumber = 0; cellNumber <cellCount ; cellNumber++) {System.out.println("["+(rowNumber+1)+ "-" +(cellNumber+1)+"]");Cell cell = rowData.getCell(cellNumber);if(cell !=null){int cellType = cell.getCellType();String cellValue = "";switch(cellType){case HSSFCell.CELL_TYPE_STRING://字符串cellValue = cell.getStringCellValue();break;case HSSFCell.CELL_TYPE_BOOLEAN: //布尔类型cellValue = String.valueOf(cell.getBooleanCellValue());break;case HSSFCell.CELL_TYPE_BLANK: //空break;case HSSFCell.CELL_TYPE_NUMERIC: //数字if(HSSFDateUtil.isCellDateFormatted(cell)){Date date = cell.getDateCellValue();cellValue = new DateTime().toString("yyyy-MM-dd");}else{cell.setCellType(HSSFCell.CELL_TYPE_STRING);cellValue = cell.toString();}break;case HSSFCell.CELL_TYPE_ERROR:System.out.println("数据类型错误");break;}System.out.print(cellValue);}}}}fileInputStream.close();}备注:为了⽅便可以将上⾯⽅法做成⼯具类:public void testCellType( FileInputStream fileInputStream) throws Exception⽅式⼆:(⽐较推荐)easyExcel导⼊依赖:去掉原有的poi 否则会包冲突依赖<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.0-beta2</version></dependency>EasyExcel导出:@Datapublic class DemoData {@ExcelProperty("字符串标题")private String string;@ExcelProperty("⽇期标题")private Date date;@ExcelProperty("数字标题")private Double doubleData;/*** 忽略这个字段*/@ExcelIgnoreprivate String ignore;}1public class EasyTest {2 String PATH ="F:\\英雄时刻\\91662429\\kuang-poi\\";3private List<DemoData> data() {4 List<DemoData> list = new ArrayList<DemoData>();5for (int i = 0; i < 10; i++) {6 DemoData data = new DemoData();7 data.setString("字符串" + i);8 data.setDate(new Date());9 data.setDoubleData(0.56);10 list.add(data);11 }12return list;13 }14//15/**16 * 最简单的写17 * <p>1. 创建excel对应的实体对象参照{@link DemoData}18 * <p>2. 直接写即可19*/20 @org.junit.Test21public void simpleWrite() {22// 写法123 String fileName = PATH + "EasyTest.xlsx";24// 这⾥需要指定写⽤哪个class去写,然后写到第⼀个sheet,名字为模板然后⽂件流会⾃动关闭25 EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(data());2627 }2829 }easyExcel读数据(导⼊):1public class DemoDAO {2public void save(List<DemoData> list) {3//持久化操作4// 如果是mybatis,尽量别直接调⽤多次insert,⾃⼰写⼀个mapper⾥⾯新增⼀个⽅法batchInsert,所有数据⼀次性插⼊5 }6 }1package com.kuang.easy;23import com.alibaba.excel.context.AnalysisContext;4import com.alibaba.excel.event.AnalysisEventListener;5import com.alibaba.fastjson.JSON;6import org.slf4j.Logger;7import org.slf4j.LoggerFactory;89import java.util.ArrayList;10import java.util.List;1112// 有个很重要的点 DemoDataListener 不能被spring管理,要每次读取excel都要new,然后⾥⾯⽤到spring可以构造⽅法传进去13public class DemoDataListener extends AnalysisEventListener<DemoData> {14private static final Logger LOGGER = LoggerFactory.getLogger(DemoDataListener.class);15/**16 * 每隔5条存储数据库,实际使⽤中可以3000条,然后清理list ,⽅便内存回收17*/18private static final int BATCH_COUNT = 5;19 List<DemoData> list = new ArrayList<DemoData>();20/**21 * 假设这个是⼀个DAO,当然有业务逻辑这个也可以是⼀个service。

Java如何导入excel

Java如何导入excel

Java如何导入excel在项目中用户需要导入大量Excel表格数据到数据库,为此需求自己写了一个读取Excel数据的java类,该类需要POI组件的支持,POI 是apache组织下的一个开源组件。

1.UploadExcelControl类:读取Excel的文件路径,文件名,初始化文件import javax.servlet.http.HttpServletRequest;import mons.fileupload.DiskFileUpload;import mons.fileupload.FileItem;import .FileController;import com.bstek.dorado.utils.MetaData;import com.bstek.dorado.utils.codec.*;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import com.GlobalValue;public class UploadExcelController extends FileController { private static final long serialVersionUID = -5481935958241641848L;String extName;String type = "";/*** 取得文件路径*/protected File getFilePath() {return new File(GlobalValue.LOAD_FILE_ROOT_EXCEL);}/*** 初始化上传文件*/protected void initFileUpload(HttpServletRequest request, DiskFileUpload fileUpload) {// System.out.println("initFileUpload=");fileUpload.setHeaderEncoding("utf-8");type = (String) request.getParameter("typeTemp");fileUpload.setSizeMax(1024 * 1024 * 5);}protected File getUploadWorkDirectory(HttpServletRequest request,MetaData parameters) {return getFilePath();}protected String getStoreFileName(HttpServletRequest request,String fileName, MetaData parameters) {System.out.println("getStoreFileName=" + fileName);int pos = stIndexOf("\\");String realname;if (pos > 0) {extName = fileName.substring(pos + 1, fileName.length());realname = System.currentTimeMillis()+ extName.substring(stIndexOf("."), extName.length());} else {extName = fileName.substring(stIndexOf("."),fileName.length());realname = fileName;}if (type != null && type.equals("inputExcel")) {return realname;} else {return extName;}}protected void storeUploadFile(HttpServletRequest request, FileItem fileItem, File storeFile, MetaData parameters)throws Exception {super.storeUploadFile(request, fileItem, storeFile, parameters);request.setAttribute("success", "1");String filename = storeFile.getName();String filePath = storeFile.getPath();if (type != null && type.equals("inputExcel")) {request.setAttribute("realname", filename);request.setAttribute("filename", filename);} else {request.setAttribute("realname", extName);request.setAttribute("filename", filename);}request.setAttribute("filePath", filePath);}protected String getDownLoadFileName(HttpServletRequest request) {String filename = (String) request.getParameter("filename");filename = unescape(filename);try {filename = new String(filename.getBytes("GBK"), "ISO8859-1");} catch (Exception e) {System.out.println(e.getMessage());}return filename;}private String unescape(String str) {String returnValue = new String("");try {returnValue = EscapeUtils.unescape(str);} catch (Exception e) {System.out.println(e.getMessage());}return returnValue;}protected InputStream getDownloadFileInputStream(HttpServletRequest request) throws Exception {String filename = (String) request.getParameter("filename");filename = unescape(filename);String filePath = getFilePath() + File.separator + filename;return new FileInputStream(filePath);}}2.检查导入Excel的字段及数据public String checkExcelDataStore(String fileName, String date,String productId)throws Exception {String info = "";fileName = GlobalValue.LOAD_FILE_ROOT_EXCEL + File.separator + fileName;System.out.println(fileName);FileInputStream finput = new FileInputStream(fileName);POIFSFileSystem fs = new POIFSFileSystem(finput);HSSFWorkbook workbook = new HSSFWorkbook(fs);boolean flag = true;for (int i = 0; i < 1; i++) {HSSFSheet sheet = workbook.getSheetAt(i);HSSFPatriarch patriarch = sheet.createDrawingPatriarch();String tablename = workbook.getSheetName(i);if (sheet.getRow(0) == null) {break;}List list = new ArrayList();int colCount = sheet.getRow(0).getPhysicalNumberOfCells();//列数int rows = sheet.getPhysicalNumberOfRows();// 获取行数HSSFRow rowTitle = sheet.getRow(0);// 获取表头for (int j = 1; j < rows; j++) { // 从第二行开始收集记录StoreIndexBean store = new StoreIndexBean();try {HSSFRow row = sheet.getRow(j);if (row == null) {break;}for (short k = 0; k < colCount; k++) {if (rowTitle.getCell(k) == null) {break;}String rowTitleName = rowTitle.getCell(k).toString();// 根据xml获取表头名MobileInfoColum column = this.findCollum(rowTitleName .trim());HSSFCell hfc = row.getCell(k);if (column.getCollumId() != null) {if (column.getCollumDesc().equals("区")) {if (hfc == null) {info = "行数:" + (j + 1) + "-----"+ "联系人姓名不能为空! 请修改此条数据重新导入.";errorInfoList.add(info);break;} else {String value = null;if (hfc.getCellType() == HSSFCell.CELL_TYPE_STRING) {value = hfc.toString().trim();} else if (hfc.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {DecimalFormat df = new DecimalFormat("#");value = df.format(hfc.getNumericCellValue());}if (value != null && !"".equals(value)) {store.setAreaName(value);System.out.println(store.getAreaName());} else {info = "行数:" + (j + 1) + "-----"+ "联系人姓名不能为空! 请修改此条数据重新导入."; errorInfoList.add(info);}}}} //列}catch (Exception e) {e.printStackTrace();flag = false;}if (flag == false) {info = "行数:" + (j + 1) + "-----" + "有错误!" + info + "请核对数据后重新导入此条数据!"; errorInfoList.add(info);continue;} else {list.add(store);}}if (flag == true) {this.insertStoreIndex(list, fileName, date,productId);}}return "恭喜您,报表导入成功!";}3.把数据插入到数据库private void insertStoreIndex(List list, String fileName, String date,String productId)throws Exception {DBStatement stmt = new DBStatement();System.out.println(list.size());stmt.setDataSource("polaris");for (int a=0;a<list.size();a++) {StoreIndexBean store = (StoreIndexBean) list.get(a);String areaName = store.getAreaName();// 求areaidint areaid = 0;String sqlareaid = "select Areaid from T_Area where Name='"+ areaName + "'";stmt.setSql(sqlareaid);List areaidlist = stmt.queryForList();for (int i = 0; i < areaidlist.size(); i++) {VariantSet aSet = (VariantSet) areaidlist.get(i);areaid = aSet.getInt("AreaId");}String sqlcheck = "select* from Rpt_StoresIndex whereSupermarketId= "+ supermarketid+ "and StoreId="+ storeid+ " and ProductTypeId = "+ producttypeid+ " and year(InsertTime)=year('"+ date+ "') and month(InsertTime)=month('" + date + "')";stmt.setSql(sqlcheck);List listcurrent = stmt.queryForList();//String sqlinsert = "insert into Rpt_StoresIndex(AreaId,AreaName) values"+ "("+ areaid+ ",'"+ areaName+ "'+ date+ "')";if (listcurrent.isEmpty()) {stmt.setSql(sqlinsert);stmt.execute();} else {String delsql = "delete from Rpt_StoresIndex where supermarketId = "+ supermarketid+ " and storeId = "+ storeid+ " and ProductTypeId = "+ producttypeid+ " and year(InsertTime)=year('"+ date+ "') and month(InsertTime)=month('" + date + "')";stmt.setSql(delsql);int re = stmt.execute();if (re > 0) {stmt.setSql(sqlinsert);stmt.execute();}}}}4.把数据放到xml中,通过它解析Excel中的数据<?xml version="1.0" encoding="UTF-8"?><mobileInfo-config><mobile name="ReportId" description="Metro 商场编号" value="0"/></mobileInfo-config>。

【Java】导入导出Excel表格

【Java】导入导出Excel表格
Label label = new Label(j, 0, info[j]); ws.addCell(label); } for(int i = 0;i < list.size();i++) { Label l = new Label(0, i+1, list.get(i).getId());//在Excel中,第一个参数表示列,第二个表示行 Label l2 = new Label(1, i+1, list.get(i).getName()); Label l3 = new Label(2, i+1, list.get(i).getGender()); Label l4 = new Label(3, i+1, String.valueOf(list.get(i).getJava())); Label l5 = new Label(4, i+1, String.valueOf(list.get(i).getEnglish())); Label l6 = new Label(5, i+1, String.valueOf(list.get(i).getMath())); ws.addCell(l); ws.addCell(l2); ws.addCell(l3); ws.addCell(l4); ws.addCell(l5); ws.addCell(l6); }
代码演示
// 实现读学生文件,将读出的信息存放于student集合中 public List<Student> ReadFromExcel(String fileName) {
List<Student> list = new ArrayList<Student>(); File file = new File(fileName); try {

java——导入excel功能

java——导入excel功能

java——导⼊excel功能1.导⼊功能思路:前台上传⽂件将MultipartFile-》输⼊流-》poi work对象-》使⽤excel表头与model字段对应关系-》通过sheet、row、cell(相关校验)转换成modelList-》(相关校验)对应的业务处理。

2.导⼊前台vue的axios请求需要content-Type设置:content-Type :multipart/form-data需要fromData对象append("key",value)进⾏传⽂件和传参,传对象类型参数就需要⽤到Json.stringify和blob。

3.导⼊后台接收形式:@RequestParam(value="key")和@RequestPart(value="key")接收。

@RequestParam适⽤于基本类型的请求域,@RequestPart适⽤于复杂的请求域(像JSON,XML)。

4.导出:content-Type :application/vnd.ms-excel5.java-poi导出导⼊excel1.导出:a.创建HSSFWorkbook,对应Excel⽂件HSSFWorkbook workbook = new HSSFWorkbook();b.创建sheetHSSFSheet sheet = workbook.createSheet("sheetName");c.在sheet中添加表头,第0⾏就是表头HSSFRow row = sheet.createRow(0);d.设置单元格格式,居中HSSFCellStyle style = workbook.createCellStyle();style.setAlignment(HSSFCellStyle.ALIGN_CENTER);e.填充表头单元格内容HSSFCell headCell = hssfRow.createCell(0);headCell.setCellValue("A");headCell.setCellStyle(cellStyle);HSSFCell headCell = hssfRow.createCell(1);headCell.setCellValue("B");headCell.setCellStyle(cellStyle);f.添加数据内容for(int i = 1,i<modelList.length,i++){hssfRow = sheet.createRow(i);cell.setCellValue(modelList.getName());cell.setCellStyle(cellStyle);}g.通过流导出workbook.write(outputStream);2.导⼊:a.上传⽂件b.得到excelif (fileName.endsWith("xlsx")) {hssfWorkbook = new XSSFWorkbook(is);// Excel 2007} else if (fileName.endsWith("xls")) {hssfWorkbook = new HSSFWorkbook(is);// Excel 2003}c.循环sheet循环row单元格数据读取到modelListd.具体业务处理。

  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。

相关文档
最新文档