`

Java Excel API的学习

jxl 
阅读更多

Java Excel是开源项目,使用它可以用纯java来读取Excel文件的内容、创建Excel文件、更新已存在的Excel文件的内容,它不依赖于操作系统,这样可以使大家放心方便的操作Excel'文件。

 

一、maven依赖

 

<dependency>
    <groupId>net.sourceforge.jexcelapi</groupId>
    <artifactId>jxl</artifactId>
    <version>2.6.12</version>
</dependency>

 二、excel的读取

打印注释:

 

public void printComment(Sheet sheet)
	{
		for (int i = 0; i < sheet.getRows(); i++)
		{
			Cell[] row = sheet.getRow(i);
			for (int j = 0; j < row.length; j++)
			{
				Cell cell = row[j];
				System.out.println(cell.getType());
				// 批注
				CellFeatures cellFeatures = cell.getCellFeatures();
				if (null != cellFeatures && StringUtils.isNotBlank(cellFeatures.getComment()))
				{
					String pattern = "表格的  ''{0}''行  ''{1}''列存在注释,注释的内容是: {2}";
					System.out.println(MessageFormat.format(pattern, new Object[] { i, j, cellFeatures.getComment() }));
				}
			}
		}
	}

 打印超链接

 

 

public void printHylink(Sheet sheet) throws IOException
	{
		Hyperlink[] hyperlinks = sheet.getHyperlinks();
		for (Hyperlink link : hyperlinks)
		{
			String pattern = "表格的  ''{0}''行  ''{1}''列存在超链接,文件的url是: {2}}";
			System.out.println(MessageFormat.format(pattern,
					new Object[] { link.getRow(), link.getColumn(), link.getURL() }));
			if (null != link.getFile())
			{
				System.out.println("超链接的文件路径是: " + link.getFile().getCanonicalPath());
			}
		}
	}

 打印图片:

 

 

public void printImage(Sheet sheet) throws IOException
	{
		int numberOfImages = sheet.getNumberOfImages();
		for (int i = 0; i < numberOfImages; i++)
		{
			Image drawing = sheet.getDrawing(i);
			String pattern = "图片的宽度为  ''{0}'',高度为  ''{1}''";
			System.out.println(MessageFormat.format(pattern, new Object[] { drawing.getWidth(), drawing.getHeight() }));
			// 图片copy出来
			File file = new File("test" + i + ".png");
			IOUtils.write(drawing.getImageData(), new FileOutputStream(file));
		}
	}

 三、Excel写入

 

添加cell:

// 1.添加Label对象
		Label labelC = new Label(0, 0, "This is a Label cell");
		sheet.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);
		sheet.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);
		sheet.addCell(labelCFC);

		// 2.添加Number对象
		jxl.write.Number labelN = new jxl.write.Number(0, 1, 3.1415926);
		sheet.addCell(labelN);

		// 添加带有formatting的Number对象
		jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");
		jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf);
		jxl.write.Number labelNF = new jxl.write.Number(1, 1, 3.1415926, wcfN);
		sheet.addCell(labelNF);

		// 3.添加Boolean对象
		jxl.write.Boolean labelB = new jxl.write.Boolean(0, 2, false);
		sheet.addCell(labelB);

		// 4.添加DateTime对象
		jxl.write.DateTime labelDT = new jxl.write.DateTime(0, 3, new java.util.Date());
		sheet.addCell(labelDT);

		// 添加带有formatting的DateFormat对象
		jxl.write.DateFormat df = new jxl.write.DateFormat("dd MM yyyy hh:mm:ss");
		jxl.write.WritableCellFormat wcfDF = new jxl.write.WritableCellFormat(df);
		jxl.write.DateTime labelDTF = new jxl.write.DateTime(1, 3, new java.util.Date(), wcfDF);
		sheet.addCell(labelDTF);

 添加图片:

 

 

public void writeImage(WritableSheet sheet) throws IOException
	{
		File rootFile = new File(System.getProperty("user.dir"));
		Collection<File> listFiles = FileUtils.listFiles(rootFile, new String[] { "png" }, false);
		for (File file : listFiles)
		{
			/************************ Begin 这段复杂的算法来计算图片的高度和宽度,网上copy的 **************/
			// 开始位置
			double picBeginCol = 3;
			double picBeginRow = 3;
			// 图片时间的高度,宽度
			double picCellWidth = 0.0;
			double picCellHeight = 0.0;
			// 读入图片
			BufferedImage picImage = ImageIO.read(file);
			// 取得图片的像素高度,宽度
			int picWidth = picImage.getWidth();
			int picHeight = picImage.getHeight();

			// 计算图片的实际宽度
			int picWidth_t = picWidth * 32; // 具体的实验值,原理不清楚。
			for (int x = 0; x < 1234; x++)
			{
				int bc = (int) Math.floor(picBeginCol + x);
				// 得到单元格的宽度
				int v = sheet.getColumnView(bc).getSize();
				double offset0_t = 0.0;
				if (0 == x)
					offset0_t = (picBeginCol - bc) * v;
				if (0.0 + offset0_t + picWidth_t > v)
				{
					// 剩余宽度超过一个单元格的宽度
					double ratio_t = 1.0;
					if (0 == x)
					{
						ratio_t = (0.0 + v - offset0_t) / v;
					}
					picCellWidth += ratio_t;
					picWidth_t -= (int) (0.0 + v - offset0_t);
				}
				else
				{ // 剩余宽度不足一个单元格的宽度
					double ratio_r = 0.0;
					if (v != 0)
						ratio_r = (0.0 + picWidth_t) / v;
					picCellWidth += ratio_r;
					break;
				}
			}
			// 计算图片的实际高度
			int picHeight_t = picHeight * 15;
			for (int x = 0; x < 1234; x++)
			{
				int bc = (int) Math.floor(picBeginRow + x);
				// 得到单元格的高度
				int v = sheet.getRowView(bc).getSize();
				double offset0_r = 0.0;
				if (0 == x)
					offset0_r = (picBeginRow - bc) * v;
				if (0.0 + offset0_r + picHeight_t > v)
				{
					// 剩余高度超过一个单元格的高度
					double ratio_q = 1.0;
					if (0 == x)
						ratio_q = (0.0 + v - offset0_r) / v;
					picCellHeight += ratio_q;
					picHeight_t -= (int) (0.0 + v - offset0_r);
				}
				else
				{// 剩余高度不足一个单元格的高度
					double ratio_m = 0.0;
					if (v != 0)
						ratio_m = (0.0 + picHeight_t) / v;
					picCellHeight += ratio_m;
					break;
				}
			}
			/************************ End 这段复杂的算法来计算图片的高度和宽度,网上copy的 **************/
			// 生成一个图片对象。
			WritableImage image = new WritableImage(picBeginCol, picBeginRow, picCellWidth, picCellHeight, file);
			// 把图片插入到sheet
			sheet.addImage(image);
		}

 添加超链接:

 

调用jxl.write.WritableSheet.addHyperlink(WritableHyperlink)方法

四、更新Excel

更新操作第一步是构造只读的Excel工作薄,第二步是利用已经创建的Excel工作薄创建新的可写入的Excel工作薄,参考下面的代码片段:

Workbook wb = Workbook.getWorkbook(file);
		WritableWorkbook wwb = Workbook.createWorkbook(file, wb);
		return wwb;

 

 

分享到:
评论

相关推荐

    Java Excel API 学习文档

    Java Excel API 是一种用于在Java程序中操作Microsoft Excel文件的工具,主要由开源项目jxl提供支持。这个API允许开发者读取、写入和修改Excel文件,极大地拓展了Java在处理电子表格数据的能力。以下是对Java Excel ...

    Java Excel Api及详细教程

    Java Excel API是一个强大的工具,允许Java开发者方便地读取、写入和操作Microsoft Excel文件。在Eclipse这样的集成开发环境中,使用Java Excel API可以轻松处理各种Excel数据操作任务。本教程将详细介绍如何在...

    java excel api

    Java Excel API,通常指的是jxl库,是一个广泛使用的开源Java库,用于读写Microsoft Excel文件。这个库使得在Java程序中处理Excel数据变得极其便捷,无论是读取现有的工作簿、创建新的工作簿,还是修改现有表格,jxl...

    JAVA EXCEL API简介

    Java Excel API 是一个开源项目,专门用于在Java环境中处理Excel文件。这个API使得开发者无需依赖Windows操作系统,就能在任何平台上创建、读取和修改Excel文件。由于它是用Java编写的,因此非常适合在Web应用程序中...

    Java Excel API

    JAVA Excel API,打包成了CHM格式。

    JAVA EXCEL API的使用

    java excel api 包 博文链接:https://crane-ding.iteye.com/blog/230690

    JAVA Excel API教程.pdf

    ### JAVA Excel API教程知识点概述 #### 一、Java Excel API简介 Java Excel API是一种用于处理Microsoft Excel文件(.xls和.xlsx格式)的强大工具。通过Java Excel API,开发人员能够轻松地在Java应用程序中读取、...

    Java Excel API入门使用说明

    Java Excel API 入门使用说明 Java Excel API,简称 JXL,是一个开源框架,用于动态读写 Excel 文件。利用 JXL,可以在任何支持 Java 的操作系统上动态读写 Excel 文件。下面将详细介绍 JXL 的使用方法和相关知识点...

    JavaExcel API及

    JavaExcel API是一个流行的Java库,它允许开发人员在Java应用程序中读取、写入和修改Microsoft Excel文件。这个API提供了一种简洁的方式来处理Excel数据,而无需安装Microsoft Office或者使用复杂的COM接口。以下是...

    基于Java Excel API的excel文件的操纵技术及其应用.pdf

    "基于Java Excel API的excel文件的操纵技术及其应用" 本文主要介绍了基于Java Excel API的excel文件的操纵技术及其应用。Excel文件是现在最常用的电子表格格式之一,对于大多数企业和个人来说都是必不可少的工具。...

    javaExcel Api

    JavaExcel API,通常简称为JExcelAPI,是一个用于在Java应用程序中读取、写入和修改Microsoft Excel文件的开源库。这个库对于那些需要处理大量数据,并且希望以Excel格式导出或导入数据的开发者来说非常有用。在本文...

    Java_Excel_API学习.pdf

    总的来说,Java Excel API学习中,我们要掌握的主要知识点包括了解JExcelAPI的基本结构和使用方法,包括如何读取和写入Excel文件、操作工作表和单元格,以及创建具有格式化的单元格。需要注意的是,对于不同格式的...

    java excel api & 实例

    JAVA EXCEL API 简介 Java Excel 是一开放源码项目,通过它 Java 开发人员可以读取 Excel 文件的内容、创建新的 Excel 文件、更新已经存在的 Excel 文件。使用该 API 非 Windows 操作系统也可以通过纯 Java 应用来...

    全面挖掘Java Excel API

    Java Excel API,如JExcelApi,提供了一个方便的接口来读取、写入和修改Excel文件。本文将全面挖掘Java Excel API的使用方法,帮助开发者更好地理解和应用这个库。 1. **Workbook类**: - `getNumberOfSheets()`:...

    java excel api 介绍

    Java Excel API 是一个开源项目,专门用于帮助Java开发者在不依赖于Windows操作系统的情况下,读取、创建和修改Excel文件。这个API使得Web应用程序能够轻松处理Excel数据,而不仅仅是访问Excel文件。Java Excel API...

    全面挖掘Java Excel API 使用方法

    Java Excel API 是一个开源项目,专门用于在Java环境中读取、创建和修改Microsoft Excel文件。这个API使得非Windows操作系统上的开发者也能使用纯Java代码处理Excel数据。Java Excel API的稳定版本V2.0支持多种Excel...

    Java Excel Api及详细教程和代码

    Java Excel API是一个强大的工具,允许Java开发者方便地读取、写入和操作Microsoft Excel文件。在Java编程中,处理Excel数据通常涉及到各种场景,如数据分析、报表生成等。本教程将深入探讨Java与Excel交互的核心...

    利用Java Excel API操作Excel

    ### 利用Java Excel API操作Excel #### 一、引言 在企业级应用开发中,Excel文件的处理是一项常见的需求。Java作为一种广泛使用的编程语言,提供了多种库来支持Excel文件的操作,其中最为人所知的是`jxl`和`Apache ...

Global site tag (gtag.js) - Google Analytics