`
仁生之狼
  • 浏览: 42794 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

对Excel文件的读取、写入、拷贝

    博客分类:
  • java
阅读更多
package com.java;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.servlet.ServletException;

import jxl.Cell;
import jxl.CellType;
import jxl.Image;
import jxl.Sheet;
import jxl.Workbook;
import jxl.format.Colour;
import jxl.format.UnderlineStyle;
import jxl.read.biff.BiffException;
import jxl.write.Boolean;
import jxl.write.DateFormat;
import jxl.write.DateTime;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.NumberFormat;
import jxl.write.WritableCell;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableImage;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

public class ExcelUtil {

	public static void main(String[] args) throws ServletException, 
			RowsExceededException, WriteException, BiffException, IOException {
		//写入excel
		String fileName = "F:"+File.separator+"write.xls";
		writeExcel(fileName);
		
		//读取excel
		readExcel(fileName);
		String targetfile = "F:"+File.separator+"copy.xls";
		copyExcel(fileName, targetfile);
	}
	/**
	 * 读取excel
	 * @param fileName
	 */
	public static void readExcel(String fileName){
		Workbook rwb;
		try {
			//excel源文件
			FileInputStream is = new FileInputStream(fileName);
			rwb = Workbook.getWorkbook(is);
			int sheetNum = rwb.getNumberOfSheets();
			for (int i = 0; i < sheetNum; i++) {
				Sheet st = rwb.getSheet(i);
				int rows=st.getRows();
	            int cols=st.getColumns();
	            //获取某一列的所有单元格,返回的是单元格对象数组
	            Cell[] rowCs = st.getColumn(0);
	            //获取某一行的所有单元格,返回的是单元格对象数组
	            Cell[] columns = st.getRow(0);
	            //Cell getCell(int column, int row)	            
	            System.out.println("当前工作表的名字:"+st.getName());
	            System.out.println("总行数:"+rows);
	            System.out.println("总列数:"+cols);
	            for (int j = 0; j < rows; j++) {
	            	Cell[] cells = st.getRow(j);
	            	for (Cell c : cells) {
	            		System.out.print(c.getContents());
	            		System.out.print("\t");
					}
	            	System.out.println();	            	
				}
	            // 获得sheet所包含的图片数
	            int imgNum = st.getNumberOfImages();
	            //循环sheet的所有图片
	            for (int j = 0; j < imgNum; j++) {
	            	Image image = st.getDrawing(j);
	            	byte[] imageData = image.getImageData();
	            	String imgName = image.getImageFile().getName().trim()
                    						+ ".jpg";
	            	File file = new File("F:"+File.separator + imgName);

	            	FileOutputStream os = new FileOutputStream(file);// 建立一个上传文件的输出流
	                os.write(imageData, 0, imageData.length);// 将文件写入服务器
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 写入excel
	 * @param fileName
	 * @throws WriteException 
	 * @throws RowsExceededException 
	 */
	public static void writeExcel(String fileName) 
									throws RowsExceededException, WriteException{
		WritableWorkbook wwb = null;
		try {
			//首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
			wwb = Workbook.createWorkbook(new File(fileName));
			
			if(wwb!=null){
				//创建一个可写入的工作表    
				//Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置
				WritableSheet ws0 = wwb.createSheet("范例", 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)+"列");
						//将生成的单元格添加到工作表中    
						ws0.addCell(labelC);
					}
				}
				WritableSheet ws = wwb.createSheet("各种类型写入", 1);
				//添加 Label 对象
				Label labelC = new Label(0, 0, "This is a Label cell");
				ws.addCell(labelC);
				
				//添加带有字型 Formatting 的对象
				WritableFont wf = new WritableFont(WritableFont.TIMES, 18,
							WritableFont.BOLD, true);
				WritableCellFormat wcfF = new WritableCellFormat(wf);
				Label labelCF = new Label(1, 0, "This is a Label Cell", wcfF);
				ws.addCell(labelCF);
				
				// 添加带有字体颜色 Formatting 的对象
				WritableFont wfc = new WritableFont(WritableFont.ARIAL, 10,
							WritableFont.NO_BOLD, false,
							UnderlineStyle.NO_UNDERLINE, Colour.RED);
				WritableCellFormat wcfFC = new WritableCellFormat(wfc);
				Label labelCFC = new Label(2, 0, "This is a Label Cell", wcfFC);
				ws.addCell(labelCFC);
				
				//添加 Number 对象
				Number labelN = new Number(0, 1, 3.1415926);
				ws.addCell(labelN);
				
				// 添加带有 formatting 的 Number 对象
				NumberFormat nf = new NumberFormat("#.##");
				WritableCellFormat wcfN = new WritableCellFormat(nf);
				Number labelNF = new Number(1, 1, 3.1415926, wcfN);
				ws.addCell(labelNF);
				
				//添加 Boolean 对象
				Boolean labelB = new Boolean(0, 2, false);
				ws.addCell(labelB);
				
				//添加 DateTime 对象
				DateTime labelDT = new DateTime(0, 3, new java.util.Date());
				ws.addCell(labelDT);
				
				// 添加带有 formatting 的 DateFormat 对象
				DateFormat df = new DateFormat("dd MM yyyy hh:mm:ss");
				WritableCellFormat wcfDF = new WritableCellFormat(df);
				DateTime labelDTF = new DateTime(1, 3, new java.util.Date(),wcfDF);
				ws.addCell(labelDTF);
				//插入图片
				File imgFile = new File("G:"+File.separator+"12.png"); 
				insertImg(ws, 0, 4, 4, 9, imgFile);
			}
			//从内存中写入文件中    
			wwb.write();
			wwb.close();
		} catch (IOException e) {
			e.printStackTrace();
		}		
	}
	/**
	 * 拷贝excel
	 * @param sourcefile
	 * @param targetfile
	 * @throws IOException
	 * @throws BiffException
	 * @throws WriteException
	 */
	public static void copyExcel(String sourcefile,String targetfile) 
						throws IOException,BiffException, WriteException{
		// 创建只读的 Excel 工作薄的对象
		Workbook rw = Workbook.getWorkbook(new File(sourcefile));
		// 创建可写入的 Excel 工作薄对象
		WritableWorkbook  wwb = Workbook.createWorkbook(new File(targetfile), rw);

		// 读取第一张工作表
		WritableSheet ws = wwb.getSheet(0);
		// 获得第一个单元格对象
		WritableCell wc = ws.getWritableCell(0, 0);

		// 判断单元格的类型 , 做出相应的转化
		if(wc.getType() == CellType.LABEL)
		{
			Label l = (Label)wc;
			l.setString("The value has been modified.");
		}
		// 写入 Excel 对象
		wwb.write();
		// 关闭可写入的 Excel 对象
		wwb.close();
		// 关闭只读的 Excel 对象
		rw.close();
	}
	/**往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);    
	}
}

jexcelapi
http://www.andykhan.com/jexcelapi/
  • jxl.jar (669.4 KB)
  • 下载次数: 4
分享到:
评论

相关推荐

    利用VC++向excel表中保存数据

    通过本文及配套示例源码你可以更加灵活的控制Excel表格文件,其中包括创建新Excel文件、写入表格数据、读取表格数据(包括对原建Excel文件自已手工添加的行、列数据的准确读取),删除已有Excel表格,对表格中指定行、...

    极速读取Excel文件中的海量数据并写入到数据库的实现

    通过程序方式从Excel文件中读取数据并导入数据库的传统方法,是通过创建一个OLE对象,打开Excel文件,逐行访问记录行及各个单元,写入数据库表。这种方法一旦数据行通过一定的数量,执行效果就无法忍受了。究其根源...

    VC++(VS2010)读写Excel文件代码(附示例)

    通过以上步骤在程序中引入了可以读取Excle文件的CExport2Excel类; 5、打开excel文件 通过按钮点击打开 void CExcelTestDlg::OnBnClickedButtonOpenExcel() { //获取文件路径 CFileDialog* lpszOpenFile; ...

    基于openpyxl的python读取和写入xlsx文件的实现

    1.该文件封装了xlsx文件读取和写入功能 2.需要提前安装openpyxl库 3.所有的表格文件需要是.xlsx结尾,如不是可以使用WPS另存一下 4.使用时需要将文件拷贝到项目同级目录中,并导包 本项目只是一次尝试,还存在诸多...

    python使用COM方法读写EXCEL

    python使用COM方法读写EXCEL 读取,写入,拷贝,新建表

    WPS、微软EXCEL通用C++接口表格通用C++接口

    描述: 对Excel常用操作封装类,适用于Microexcel、WPSexcel表格文件 1,打开、新建、保存、另存excel文件 2,工作表的增加、删除、隐藏操作、拷贝、移动 3,单元格文本写入以及读取、各种清空 4,字体设置,前景色、背景...

    python写入已存在的excel数据实例

    python可以使用xlrd读excel,使用xlwt写excel,但是如果要把数据写入已存在的excel,需要另外一个库xlutils配合使用. 大概思路: 1、用xlrd.open_workbook打开已有的xsl文件 注意添加参数formatting_info=True,得以...

    asp.net 未能写入输出文件–“拒绝访问的解决办法

    ASP.NET对txt文件相关操作(读取、写入、保存)asp.net cookie的操作,写入、读取与操作Asp.Net 文件操作基类(读取,删除,批量拷贝,删除,写入,获取文件夹大小,文件属性,遍历目录)ASP.NET实现二维码(QRCode)的创建和...

    网管教程 从入门到精通软件篇.txt

    可用数据文件(能被Excel 97打开);Oracle 8.1.x表格空间文件 DBX:DataBearn图像;Microsoft Visual FoxPro表格文件 DCT:Microsoft Visual FoxPro数据库容器 DCU:Delphi编译单元文件 DCX:Microsoft Visual...

    C++Builder精彩编程实例集锦的源代码前3部分.rar

    实例116 如何对文件进行编码和解码 实例117 如何设置RichEdit组件的存盘格式 实例118 如何在WIN.INI文件中保存程序信息 实例119 如何将数据转换成Word文档格式 实例120 如何直接从Excel文件导入数据 实例121 ...

    C++Builder精彩编程实例集锦的源代码后3部分.rar

    实例116 如何对文件进行编码和解码 实例117 如何设置RichEdit组件的存盘格式 实例118 如何在WIN.INI文件中保存程序信息 实例119 如何将数据转换成Word文档格式 实例120 如何直接从Excel文件导入数据 实例121 ...

    第一部分 界面设计

    实例116 如何对文件进行编码和解码 实例117 如何设置RichEdit组件的存盘格式 实例118 如何在WIN.INI文件中保存程序信息 实例119 如何将数据转换成Word文档格式 实例120 如何直接从Excel文件导入数据 实例121 ...

    NTKO文档在线编辑控件4.0.1.2

    14 版本控制功能 版本控制功能,能够让您对WORD和EXCEL文档有更多的控制。 15 支持强制痕迹保留 可以通过对控件编程,让用户只能在痕迹保留状态下工作;强制用户保留一切编辑痕迹。 16 支持手写签名和加密的电子...

    Python Cookbook

    2.2 写入文件 62 2.3 搜索和替换文件中的文本 64 2.4 从文件中读取指定的行 65 2.5 计算文件的行数 66 2.6 处理文件中的每个词 68 2.7 随机输入/输出 70 2.8 更新随机存取文件 71 2.9 从zip文件中读取数据 73...

    《程序天下:JavaScript实例自学手册》光盘源码

    19.12 JavaScript读取自身文件内的XML 19.13 将XML文件绑定到table 19.14 使用JavaScript加载XML文件 19.15 动态加载JavaScript文件 19.16 防止JavaScript文件被其他站直接引用 19.17 检查机器是否安装Word 19.18 ...

    程序天下:JavaScript实例自学手册

    19.12 JavaScript读取自身文件内的XML 19.13 将XML文件绑定到table 19.14 使用JavaScript加载XML文件 19.15 动态加载JavaScript文件 19.16 防止JavaScript文件被其他站直接引用 19.17 检查机器是否安装Word 19.18 ...

    计算机应用技术(实用手册)

    这个项目可控制DRAM作用指令与读取/写入指令之间的延迟时间,有2,3,4几种选择。数值越小,性能越好。 DRAM RAS# Precharge: 这个项目是用来控制当预充电(precharge)指令送到DRAM之后,频率等待启动的等待...

    易语言程序免安装版下载

    易语言5.1 相对于易语言5.0更新说明: ... 修改XML解析支持库,增加写出CDATA数据功能,解决解析XML时错误的丢弃换行和TAB字符的BUG,解决读取节点值时对CDATA数据进行转义处理的BUG。 20. 修改扩展界面支持库...

Global site tag (gtag.js) - Google Analytics