`
仁生之狼
  • 浏览: 44766 次
  • 性别: 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
分享到:
评论

相关推荐

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

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

    delphi对Excel拷贝及粘贴

    这些库包含了对Excel对象模型的引用,使得我们能够创建、读取、修改和控制Excel工作簿和工作表。 1. **创建Excel对象**:在你的Delphi代码中,首先需要创建一个`Excel.Application`对象,这代表了一个运行的Excel...

    python 将目录中所有excel合并到一个excel中 openpyxl 复制sheet工作表到另一个工作簿

    首先,我们需要导入`os`库来处理文件路径和目录,以及`openpyxl`库来读取和写入Excel文件。以下是一个基本的导入语句: ```python import os from openpyxl import load_workbook, Workbook ``` 接下来,我们要...

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

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

    python读取excel数据-04-远程拷贝.ev4.rar

    在Python中,最常用的读取和写入Excel数据的库是pandas和openpyxl。Pandas是一个强大的数据分析工具,它提供了read_excel函数来加载Excel文件,而openpyxl则用于处理.xlsx格式的Excel文件,提供更底层的访问控制。 ...

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

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

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

    总之,通过VC++结合`CSpreadSheet`类,我们可以方便地对Excel文件进行读写,实现创建新文件、写入和读取数据、以及各种高级操作。这种方法对于需要处理大量结构化数据的项目非常实用,尤其适用于那些希望将Excel作为...

    Java处理Excel文件

    拷贝Excel工作簿可以通过先读取现有文件,然后重新写入的方式实现。具体步骤如下: 1. 使用`Workbook.getWorkbook()`方法读取现有Excel文件。 2. 使用`Workbook.createWorkbook()`方法创建一个新的可写的`Workbook`...

    excel文件处理,BasicExcel处理算法

    "BasicExcel处理算法"是针对这一需求提出的一种高效解决方案,它旨在提供简单、直接且实用的方法来读取和写入Excel文件。 首先,我们要理解什么是算法。在计算机科学中,算法是一系列明确的步骤,用于解决特定问题...

    【Python处理EXCEL】基础操作篇:在Python中导入EXCEL数据

    Python提供了多个库来支持Excel文件的读取和写入,其中最常用的有`pandas`库和`openpyxl`库。这篇基础操作篇将带你深入理解如何在Python中导入Excel数据。 首先,我们需要安装必要的库。`pandas`库是处理数据的主要...

    JAVA-write-EXCEL.rar_copy excel java_java write_java读取_java读取Exc

    本主题主要关注如何使用Java来读取和写入Excel文件,特别是通过标题"JAVA-write-EXCEL.rar_copy excel java_java write_java读取_java读取Excel"所暗示的知识点。我们将探讨两个主要的API库:Apache POI和JExcelAPI...

    Java poi复制execl的sheet页,跨文件操作,数据和样式全部复制,工具类

    在Java开发中,Apache POI库是一个非常实用的工具,用于读取、写入和修改Microsoft Office格式的文件,特别是Excel文件(.xlsx和.xls)。本篇将详细讲解如何使用POI库进行Excel的Sheet页复制,包括数据和样式的跨...

    Excel导入导出实例(NPOI)

    NPOI支持创建新的工作簿、工作表,添加单元格,以及对已有Excel文件进行读取和修改,是开发者进行数据处理和报表生成的得力工具。 2. **C#与NPOI结合** 在C#中使用NPOI,可以通过NuGet包管理器安装NPOI库。C#的强...

    VC中常用的导入EXCEL文件内容,已封装,可直接调用

    在VC++开发环境中,经常需要处理与Excel文件的交互,比如读取或写入数据。本知识点主要介绍如何在Visual C++(VC)项目中导入并使用Excel文件内容,特别是通过封装好的代码库来简化这一过程。徐景周老师的代码为...

    java的POI操作Excel文件.pdf

    Java的Apache POI库是一个强大的工具,用于读取、创建和修改Microsoft Office格式的文件,尤其是Excel工作簿。本文将深入探讨使用POI操作Excel文件时的一些关键知识点和常见问题。 1. **设置分页符的bug** 在处理...

    python使用COM方法读写EXCEL

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

    C++读写Excel的第三方库xlnt1.5.0(包含动态库及静态库)

    对于C++开发者来说,有时需要在程序中直接读取或写入Excel文件,这时就需要借助第三方库来实现。本篇将详细探讨C++与Excel交互的第三方库——xlnt 1.5.0,以及如何在Windows 10环境下利用Visual Studio 2022编译和...

    poi复制指定行数的Excel表格内容

    Apache POI 是一个流行的开源库,它允许开发者使用Java语言来读取、写入和修改Microsoft Office格式的文件,包括Excel(.xlsx 和 .xls)。本教程将深入探讨如何使用Apache POI库来复制Excel表格的指定行数及其样式。...

    大数据时代下办公自动化技术探析——Python对Excel的自动化操作.pdf

    在进行Python操作Excel的实际代码编写中,通常需要先安装xlrd库读取Excel文件,然后通过xlutils的copy方法将xlrd读取到的对象拷贝到内存中,并修改内存中的对象。最后通过xlwt等库将修改后的对象保存到本地磁盘上的...

    自定义操作xlsx EXCEL类库(RobotFrameWork)

    由于RF框架中的扩展库ExcelLibrary只能操作xls低版本的excel,对于高版本的xlsx的excel并不支持,于是自己用python写了适用于RF框架的ExcelXLSXLibrary类库,可以完美操作xlsx,使用该类库注意事项: 1、安装...

Global site tag (gtag.js) - Google Analytics