JXL.jar简单封装Excel读写操作

1.分析

一个excel文件可以有多页,每页excel中可以有多行,每行中可以有多列,用面向对象的思想可以把一行中的某列看作是一个String对象,一行看作是一个包含多个列的对象,一页是包含多行的对面,一个excle文件就是包含多页的对象

2.行对象的设计

package com.zhaochao.utils;

import java.util.List;
/**
 *
 * excel的行对象
 *
 * @author 赵超
 *
 */
public class ExcelRow {
		private List<String> colData;  //当前行的所有列数据
		public Integer getCols() {
			return colData.size();
		}
		public List<String> getColData() {
			return colData;
		}
		public void setColData(List<String> colData2) {
			this.colData = colData2;
		}

}

2.页对象的设计

package com.zhaochao.utils;

import java.util.List;
/**
 *
 * Excel页对象
 *
 * @author 赵超
 *
 */
public class ExcelPage {
		private List<ExcelRow> rowData; //当页excel的所有行数据
		public Integer getRows() {
			return rowData.size();
		}
		public List<ExcelRow> getRowData() {
			return rowData;
		}
		public void setRowData(List<ExcelRow> rowData) {
			this.rowData = rowData;
		}

}

3.excel对象的设计

package com.zhaochao.utils;

import java.util.List;
/**
 *
 * Excel模型类
 *
 *
 * @author 赵超
 *
 */
public class ExcelModel {
		private List<ExcelPage> pageData;  //Excel每页的数据
		public Integer getPages() {
			return pageData.size();
		}
		public List<ExcelPage> getPageData() {
			return pageData;
		}
		public void setPageData(List<ExcelPage> pageData) {
			this.pageData = pageData;
		}
}

4.excel读写工具类的设计

package com.zhaochao.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
/**
 *
 * @author 操作excel工具类
 *
 */
public class ExcelUtil {

	public static void main(String [] args){

		//testWriteExcel();
		testReadExcel();
	}

	public static void testReadExcel(){
		        //String urlStr="http://baaifile.b0.upaiyun.com/uploadfile/2014/10/25/201410251038347176.xls";
				//String urlStr="C:\\Users\\Administrator\\Desktop\\privateCoupon.xls";
				String urlStr="c://user.xls";
				ExcelModel model= ExcelUtil.ReadExcel(urlStr);
				int pageSize=0;
				for(ExcelPage page: model.getPageData()){
					for(ExcelRow row:page.getRowData()){
						for(String col:row.getColData()){
							System.out.print(col+" ");
						}
						System.out.println();
					}
					System.out.println("======总共"+model.getPages()+"页=====第"+(++pageSize)+"页====================");
				}
	}
	public static void testWriteExcel(){
		String fileName="c://user.xls";
		//设置两列数据
		List<String> cols=new ArrayList<String>();
		cols.add("admin");
		cols.add("123");
		//设置行数据
		ExcelRow row=new ExcelRow();
		row.setColData(cols);
		List<ExcelRow> rows=new ArrayList<ExcelRow>();
		rows.add(row);
		rows.add(row);
		//设置页数据
		ExcelPage page=new ExcelPage();
		page.setRowData(rows);
		List<ExcelPage> pages=new ArrayList<ExcelPage>();
		pages.add(page);
		pages.add(page);
		//设置excleModel
		ExcelModel model=new ExcelModel();
		model.setPageData(pages);
		writeExcel(fileName,model);
	}

	/**
	 * 在线解析Excel
	 *
	 * @param urlStr  可以是http://开头的url,也可以是文件路径
	 *
	 * @return 返回ExcelMode
	 */
	private  static ExcelModel ReadExcel(String urlStr)   {
		ExcelModel excle= new ExcelModel();
		try {
			InputStream is=null;
			if(urlStr.startsWith("http://")){
				URL url=new URL(urlStr);
				HttpURLConnection httpUrl=(HttpURLConnection) url.openConnection();
				httpUrl.connect();
			    is = httpUrl.getInputStream();
			}else{
				File f=new File(urlStr);
				if(f.exists()){
					is= new FileInputStream(f) ;
				}else{
					throw new Exception("文件不存");
				}
			}
			Workbook wb = Workbook.getWorkbook(is);
			jxl.Sheet  [] sheet =wb.getSheets();
			List<ExcelPage> pageDate=new ArrayList<ExcelPage>();
			for(int s=0;s<sheet.length;s++){
				ExcelPage page=new ExcelPage();
				List<ExcelRow> rows=new ArrayList<ExcelRow>();
				for(int i=0;i<sheet[s].getRows();i++){
					ExcelRow row=new ExcelRow();
					List<String> colData=new ArrayList<String>();
					for(int j=0;j<sheet[s].getColumns();j++){
						colData.add(sheet[s].getCell(j, i).getContents());
					}
					row.setColData(colData);
					rows.add(row);
				}
				page.setRowData(rows);
				pageDate.add(page);
			}
			excle.setPageData(pageDate);
			wb.close();
			is.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return excle;
	}
	/**
	 *
	 * @param fileName 要写入文件的路径
	 * @param excel 要写入文件的数据
	 */

	 private static void writeExcel(String fileName,ExcelModel excel) {
	        try {
	            WritableWorkbook     book = Workbook.createWorkbook(new File(fileName));
	            for(int page=0;page<excel.getPages();page++){
	            	   WritableSheet sheet = book.createSheet("第"+page+"页", 0);
	            	    // 在label对象的构造方法中指名单元格位置是第一列,第一行(0,0)
		               // 以及单元格内容为test
	            	   for(int row=0;row<excel.getPageData().get(page).getRows();row++){
	            		   	for(int col=0;col<excel.getPageData().get(page).getRowData().get(row).getCols();col++){
	            		   	   Label label = new Label(col,row ,excel.getPageData().get(page).getRowData().get(row).getColData().get(col));
		                       // 将定义好的单元格添加到工作表中
		                       sheet.addCell(label);
	            		   	}
	            	   }

	            }
	               // 写入数据并关闭文件
	               book.write();
	               book.close();
	               System.out.println("生成excel文件成功");
	        } catch (Exception e) {
	            e.printStackTrace();
	        }
	    }

}

5.写测试

6.读测试

7.jxl.jar包下载载址http://blog.csdn.net/whzhaochao/article/details/21191879

时间: 2024-11-05 13:40:46

JXL.jar简单封装Excel读写操作的相关文章

NX二次开发-基于NX开发向导模板的NX对Excel读写操作(OLE方式(COM组件))

在看这个博客前,请读者先去完整看完:NX二次开发-基于MFC界面的NX对Excel读写操作(OLE方式(COM组件))https://ufun-nxopen.blog.csdn.net/article/details/88922030 这篇博客,要不然你听不懂我下面在说什么. 版本NX11+VS2013+office2016 首先我们通过NX开发向导创建了一个模板. 先把项目属性改成多字节.下面我们把前面做的MFC项目里的几个EXCAL头文件和stdafx一块拷过来,加到NX的项目里. 在NX的

NX二次开发-基于MFC界面的NX对Excel读写操作(OLE方式(COM组件))

NX二次开发API里没有对EXCAL读写操作的相关函数,市面上有很多种方法去实现,比如UFUN调KF,ODBC,OLE(COM组件)等等.这里我是用的OLE(COM组件)方式去做的,这种在VC上创建的方法,无论C++还是C#还是VB方式思路都是一样的.先介绍用MFC去做,然后在写一篇博客介绍怎么在NX的二次开发的向导模板里去做.NX二次开发-基于NX开发向导模板的NX对Excel读写操作(OLE方式(COM组件))https://ufun-nxopen.blog.csdn.net/article

python excel读写操作

1.读操作 xlrd 下载地址:https://pypi.python.org/pypi/xlrd 使用代码 # encoding : utf-8 #设置编码方式 import xlrd #导入xlrd模块 #打开指定文件路径的excel文件 xlsfile = r'D:\AutoPlan\apisnew.xls' book = xlrd.open_workbook(xlsfile) #获得excel的book对象 #获取sheet对象,方法有2种: sheet_name=book.sheet_

简单封装MySQLdb模块操作MySQL数据库

python连接mysql的connector有很多,我们选择MySQLdb 让python支持MySQLdb模块 #pip2.7 install MySQL-python 查看python2.7可使用的模块是否存在MySQLdb # ipython WARNING: IPython History requires SQLite, your history will not be saved Python 2.7.11 (default, Mar 10 2016, 09:45:30)  Typ

轻松完成excel读写操作- 基于POI的框架BingExcel的使用(1)

Bingexcel User Guide 使用maven进行项目开发目前项目的maven仓库是在github上,浏览地址为 https://github.com/bingyulei007/mvn-repo/tree/master/repository/com/bing/excel,在使用时候,你只要加上一下远程仓库: <repositories> <repository> <id>bingyulei-mvn-repo</id> <url>http

Android SD卡简单的文件读写操作

首先如果要在程序中使用sdcard进行存储,我们必须要在AndroidManifset.xml文件进行下面的权限设置: <!-- SDCard中创建与删除文件权限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <!-- 向SDCard写入数据权限 --> <uses-permission android:name="

python之excel读写操作

一.xlrd和xlwt安装 1.下载xlwt安装包https://pypi.org/project/xlwt/#files 2.解压后进入文件目录 3.执行python setup.py install 二.读取操作 1 # -*- conding:utf-8 -*- 2 __author__ = 'dsh' 3 # How to read from an Excel using xlrd module 4 import xlrd 5 # 关联指定路径中的xls文件,得到book对象 6 fil

【Python】excel读写操作 xlrd &amp; xlwt

xlrd ■ xlrd xlrd模块用于读取excel文件内容 基本用法: workbook = xlrd.open_workbook('文件路径') workbook.sheet_names() #返回所有sheet的列表 workbook.sheet_by_index(...) #通过index来获得一个sheet对象,index从0开始算起 workbook.sheet_by_name(...) #根据sheet名获得相应的那个sheet对象 在得到sheet对象之后,就可以用它的一些方法

Excel 读写操作

读 import xlrd from xlrd.book import Book from xlrd.sheet import Sheet from xlrd.sheet import Cell workbook = xlrd.open_workbook('基础课程大纲.xlsx') sheet_names = workbook.sheet_names() # sheet = workbook.sheet_by_name('工作表1') sheet = workbook.sheet_by_ind