`

用java代码编写的读取excel表格中数据的代码头

阅读更多

记得刚开始工作的时候,老总让我把excel表格中的数据写入到数据库里边,

当时还没接触到像Navicat for MySQL这样的工具,搞了一天终于用最笨的办法,在excel后加一个insert字段,然后采用批量处理的方法来写入数据库,当时有一个傻X很牛哄哄的跟我说,,用得着这么麻烦吗?我们都是写程序搞定的,当我问他要这种程序的时候,人家跟我说,网上一大堆,后来在工作中发现,此人纯属装B,现为大家写出读excel表格中数据的方法

大家可做适当的调整,然后就可以实现用程序的方法把excel表格存在数据库中了

同时提供一个支持jar包

代码如下

package com.demo.excel;
import java.io.File;
import java.io.IOException;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableImage;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
public class ExcelUtils {

	/**读取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();
							System.out.println(cellValue);
							sb.append(cellValue+"\t");
						}
					}
					sb.append("\r\n");
				}
				sb.append("\r\n");
			}
		}
		//最后关闭资源,释放内存
		wb.close();
		return sb.toString();
	}
	/**生成一个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();
			}
		}
	} 
	/**搜索某一个文件中是否包含某个关键字
	 * @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;i<sheet.length;i++){
				if(breakSheet)
					break;
				
				//得到当前工作表的行数
				int rowNum = sheet[i].getRows();
				
				boolean breakRow = false;
				
				for(int j=0;j<rowNum;j++){
					if(breakRow)
						break;
					//得到当前行的所有单元格
					Cell[] cells = sheet[i].getRow(j);
					if(cells!=null&&cells.length>0){
						boolean breakCell = false;
						//对每个单元格进行循环
						for(int k=0;k<cells.length;k++){
							if(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中插入图片
     * @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);
    } 
    
    
    public static void main(String[] args) {
    	 
    	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();
		}    	
    } 
	
}

 以上代码可完全执行,不过前题是,你把支持的jar包加上,不然会报错,jar包己经上传了,

最不爽javaeye的就是下载东西非要注册,各位想学习的朋友可以去注册个javaeye帐号!

代码如有问题,请发送邮件至zhang7789@yahoo.com.cn

很多注释的说,你一定能看懂

  • jxl.jar (725.9 KB)
  • 下载次数: 142
分享到:
评论
2 楼 halov 2016-10-27  
注释很详细,赞赞赞赞赞
1 楼 贝塔ZQ 2016-09-02  
用插件啦,PageOffice顶

相关推荐

    java解析Excel文件并把数据存入数据库和导出数据为excel文件SpringBoot代码示例

    1、java解析读取excel文件中的数据,并写入数据库。 2、java读取数据库数据,并导出为excel文件。 3、README.md中有详细的操作步骤示例。 使用说明: 1. 先使用postman导入:other/excel相关.postman_collection....

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例045 用数组设置JTable表格的列名与列宽 55 3.2 数组操作 57 实例046 数组的下标界限 57 实例047 按钮控件数组实现计数器界面 58 实例048 复选框控件数组 59 实例049 用数组反转字符串 60 3.3 数组排序与查询 61 ...

    Servlet与JSP核心编程第2版

    第11章 用jsp脚本元素调用java代码 11.1 模板文本的创建 11.2 在jsp中调用java代码 11.3 限制jsp页面中java代码的量 11.4 jsp表达式的应用 11.5 示例:jsp表达式 11.6 servlet和jsp页面的对比 11.7 ...

    asp.net知识库

    在Asp.net中如何用SQLDMO来获取SQL Server中的对象信息 使用Relations建立表之间的关系并却使用PagedDataSource类对DataList进行分页 通过作业,定时同步两个数据库 SQLSERVER高级注入技巧 利用反射实现ASP.NET控件和...

    易语言程序免安装版下载

     静态编译后的易语言EXE/DLL之间不能再共享譬如窗口、窗口组件等类似资源,对于已经静态连接到一个EXE/DLL中的支持库,该支持库中的数据或资源将不能再被其它EXE/DLL中所使用的同名支持库访问。这是因为代码被分别...

    大麦网源码java-OCR:图片文字信息提取

    大麦网源码java 1.网店工商信息图片文字提取 图片内容如下所示,但每张图片中信息出现的位置不尽相同,题目...我们只需要在下载类库,然后编写下述代码便可实现文字识别,使用方法很简单。如果你要使用的话,请注意pac

    Spring中文帮助文档

    6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...

    spring chm文档

    6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. ...

    Spring API

    6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...

Global site tag (gtag.js) - Google Analytics