`

读取Excel表格,拷贝、更新Excel工作薄

阅读更多

public class VireObj {
	String orgNo;
	String orgName;
	double openAcc;
	double destoryAcc;
	double totalAcc;
	double monthInCount;
	double monthInMoney;
	double monthOutCount;
	double monthOutMoney;
	double totalInMoney;
	public String getOrgNo() {
		return orgNo;
	}
	public void setOrgNo(String orgNo) {
		this.orgNo = orgNo;
	}
	public String getOrgName() {
		return orgName;
	}
	public void setOrgName(String orgName) {
		this.orgName = orgName;
	}
	public double getOpenAcc() {
		return openAcc;
	}
	public void setOpenAcc(double openAcc) {
		this.openAcc = openAcc;
	}
	public double getDestoryAcc() {
		return destoryAcc;
	}
	public void setDestoryAcc(double destoryAcc) {
		this.destoryAcc = destoryAcc;
	}
	public double getTotalAcc() {
		return totalAcc;
	}
	public void setTotalAcc(double totalAcc) {
		this.totalAcc = totalAcc;
	}
	public double getMonthInCount() {
		return monthInCount;
	}
	public void setMonthInCount(double monthInCount) {
		this.monthInCount = monthInCount;
	}
	public double getMonthInMoney() {
		return monthInMoney;
	}
	public void setMonthInMoney(double monthInMoney) {
		this.monthInMoney = monthInMoney;
	}
	public double getMonthOutCount() {
		return monthOutCount;
	}
	public void setMonthOutCount(double monthOutCount) {
		this.monthOutCount = monthOutCount;
	}
	public double getMonthOutMoney() {
		return monthOutMoney;
	}
	public void setMonthOutMoney(double monthOutMoney) {
		this.monthOutMoney = monthOutMoney;
	}
	public double getTotalInMoney() {
		return totalInMoney;
	}
	public void setTotalInMoney(double totalInMoney) {
		this.totalInMoney = totalInMoney;
	}
	
}



public class ChartImg {
	public String getImgTitle() {
		return imgTitle;
	}

	public void setImgTitle(String imgTitle) {
		this.imgTitle = imgTitle;
	}

	public String getImgName() {
		return imgName;
	}

	public void setImgName(String imgName) {
		this.imgName = imgName;
	}

	String imgTitle;
	String imgName;
}



import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Vector;

import jxl.CellType;
import jxl.Workbook;
import jxl.format.CellFormat;
import jxl.format.Colour;
import jxl.format.UnderlineStyle;
import jxl.write.Formula;
import jxl.write.Label;
import jxl.write.Number;
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 XLSDemo {
	private static final int TITLE_LENGTH = 7;
	private static final int SHEET_WIDTH = 32;
	private static final int SHEET_HEIGHT = 116;

	/**
	 * 创建Excel
	 */
	private void makeXls() {
		Workbook workbook = null;
		try {
			// 构建Workbook对象, 只读Workbook对象
			// 直接从本地文件创建Workbook, 从输入流创建Workbook
			InputStream ins = new FileInputStream(
					"D:/source.xls");
			workbook = Workbook.getWorkbook(ins);

			// 利用已经创建的Excel工作薄创建新的可写入的Excel工作薄
			File outFile = new File("D:/test.xls");
			WritableWorkbook wwb = Workbook.createWorkbook(outFile, workbook);
			// 读取第一张工作表
			WritableSheet dataSheet = wwb.getSheet(0);
			// 设置冻结单元格
			dataSheet.getSettings().setVerticalFreeze(7);
			dataSheet.getSettings().setHorizontalFreeze(2);

			// 测试模拟数据
			Vector vecData = new Vector();
			for (int i = 0; i < 50; i++) {
				
				VireObj obj = new VireObj();
				obj.setOrgNo("00" + i + "0");
				obj.setOrgName("机构" + (i + 1));
				obj.setOpenAcc((int) (100 * Math.random()));
				obj.setDestoryAcc((int) (10 * Math.random()));
				obj.setTotalAcc((int) (500 * Math.random()));
				obj.setMonthInCount((int) (500 * Math.random()));
				obj.setMonthInMoney(500 * Math.random());
				obj.setMonthOutCount((int) (500 * Math.random()));
				obj.setMonthOutMoney(500 * Math.random());

				vecData.add(obj);
			}
			// 插入数据
			insertData(wwb, dataSheet, vecData);
			// 插入模拟图像数据
			Vector vecImg = new Vector();
			for (int i = 0; i < 3; i++) {
				ChartImg img = new ChartImg();
				img.setImgTitle("图像" + (i + 1));
				img.setImgName("D:/LogoPNG.png");
				vecImg.add(img);
			}
			// 插入图表
			insertImgsheet(wwb, vecImg);
			// 写入Excel对象
			wwb.write();
			wwb.close();
		} catch (Exception e) {
			System.out.println("创建失败");
			e.printStackTrace();
		} finally {
			// 操作完成时,关闭对象,释放占用的内存空间
			workbook.close();
		}
	}

	/**
	 * 插入数据
	 * 
	 * @param wwb
	 *            WritableWorkbook : 工作簿
	 * @param dataSheet
	 *            WritableSheet : 工作表
	 * @throws RowsExceededException
	 * @throws WriteException
	 */
	private void insertData(WritableWorkbook wwb, WritableSheet dataSheet,
			Vector vecData) throws RowsExceededException, WriteException {
		// 获得标题单元格对象
		modiStrCell(dataSheet, 2, 0, "工商银行江苏省分行 个人网上银行业务种类/开销户明细报表(2005-12)",
				null);
		// 修改数据单元格数据
		for (int i = 0; i < vecData.size(); i++) {
			VireObj obj = (VireObj) vecData.get(i);
			modiStrCell(dataSheet, 0, TITLE_LENGTH + i, obj.getOrgNo(), null);
			modiStrCell(dataSheet, 1, TITLE_LENGTH + i, obj.getOrgName(), null);
			modiNumCell(dataSheet, 2, TITLE_LENGTH + i, obj.getOpenAcc(), null);
			modiNumCell(dataSheet, 3, TITLE_LENGTH + i, obj.getDestoryAcc(),null);
			modiNumCell(dataSheet, 4, TITLE_LENGTH + i, obj.getTotalAcc(), null);
			modiNumCell(dataSheet, 5, TITLE_LENGTH + i, obj.getMonthInCount(),null);
			modiNumCell(dataSheet, 6, TITLE_LENGTH + i, obj.getTotalInMoney(),null);
			modiNumCell(dataSheet, 7, TITLE_LENGTH + i, obj.getMonthOutCount(),null);
			modiNumCell(dataSheet, 8, TITLE_LENGTH + i, obj.getMonthOutMoney(),null);
		}
		// 删除空行
		for (int j = vecData.size() + TITLE_LENGTH; j < SHEET_HEIGHT; j++) {
			dataSheet.removeRow(vecData.size() + TITLE_LENGTH);
		}
		// 插入公式
		for (int i = 2; i < SHEET_WIDTH; i++) {
			modiFormulaCell(dataSheet, i, vecData.size() + TITLE_LENGTH, 8,vecData.size() + TITLE_LENGTH, null);
		}
	}

	/**
	 * 修改字符单元格的值
	 * 
	 * @param dataSheet
	 *            WritableSheet : 工作表
	 * @param col
	 *            int : 列
	 * @param row
	 *            int : 行
	 * @param str
	 *            String : 字符
	 * @param format
	 *            CellFormat : 单元格的样式
	 * @throws RowsExceededException
	 * @throws WriteException
	 */
	private void modiStrCell(WritableSheet dataSheet, int col, int row,
			String str, CellFormat format) throws RowsExceededException,
			WriteException {
		// 获得单元格对象
		WritableCell cell = dataSheet.getWritableCell(col, row);
		// 判断单元格的类型, 做出相应的转化
		if (cell.getType() == CellType.EMPTY) {
			Label lbl = new Label(col, row, str);
			if (null != format) {
				//lbl.setCellFormat(format);
			} else {
				//lbl.setCellFormat(cell.getCellFormat());
			}
			dataSheet.addCell(lbl);
		} else if (cell.getType() == CellType.LABEL) {
			Label lbl = (Label) cell;
			lbl.setString(str);
		} else if (cell.getType() == CellType.NUMBER) {
			// 数字单元格修改
			Number n1 = (Number) cell;
			n1.setValue(42.05);
		}
	}

	/**
	 * 修改数字单元格的值
	 * 
	 * @param dataSheet
	 *            WritableSheet : 工作表
	 * @param col
	 *            int : 列
	 * @param row
	 *            int : 行
	 * @param num
	 *            double : 数值
	 * @param format
	 *            CellFormat : 单元格的样式
	 * @throws RowsExceededException
	 * @throws WriteException
	 */
	private void modiNumCell(WritableSheet dataSheet, int col, int row,double num, CellFormat format) throws RowsExceededException,
			WriteException {
		// 获得单元格对象
		WritableCell cell = dataSheet.getWritableCell(col, row);
		// 判断单元格的类型, 做出相应的转化
		if (cell.getType() == CellType.EMPTY) {
			Number lbl = new Number(col, row, num);
			if (null != format) {
				//lbl.setCellFormat(format);
			} else {
				//lbl.setCellFormat(cell.getCellFormat());
			}
			System.out.println(dataSheet);
			System.out.println(lbl);
			dataSheet.addCell(lbl);
		} else if (cell.getType() == CellType.NUMBER) {
			// 数字单元格修改
			Number lbl = (Number) cell;
			lbl.setValue(num);
		} else if (cell.getType() == CellType.LABEL) {
			Label lbl = (Label) cell;
			lbl.setString(String.valueOf(num));
		}
	}

	/**
	 * 修改公式单元格的值
	 * 
	 * @param dataSheet
	 *            WritableSheet : 工作表
	 * @param col
	 *            int : 列
	 * @param row
	 *            int : 行
	 * @param startPos
	 *            int : 开始位置
	 * @param endPos
	 *            int : 结束位置
	 * @param format
	 * @throws RowsExceededException
	 * @throws WriteException
	 */
	private void modiFormulaCell(WritableSheet dataSheet, int col, int row,
			int startPos, int endPos, CellFormat format)
			throws RowsExceededException, WriteException {
		String f = getFormula(col, row, startPos, endPos);
		// 插入公式(只支持插入,不支持修改)
		WritableCell cell = dataSheet.getWritableCell(col, row);
		if (cell.getType() == CellType.EMPTY) {
			// 公式单元格
			Formula lbl = new Formula(col, row, f);
			if (null != format) {
				//lbl.setCellFormat(format);
			} else {
				//lbl.setCellFormat(cell.getCellFormat());
			}
			dataSheet.addCell(lbl);
		} else if (cell.getType() == CellType.STRING_FORMULA) {
			System.out.println("Formula modify not supported!");
		}
	}

	/**
	 * 得到公式
	 * 
	 * @param col
	 *            int : 列
	 * @param row
	 *            int : 行
	 * @param startPos
	 *            int : 开始位置
	 * @param endPos
	 *            int : 结束位置
	 * @return String
	 * @throws RowsExceededException
	 * @throws WriteException
	 */
	private String getFormula(int col, int row, int startPos, int endPos)
			throws RowsExceededException, WriteException {
		char base = 'A';
		char c1 = base;
		StringBuffer formula = new StringBuffer(128);
		// 组装公式
		formula.append("SUM(");
		if (col <= 25) {
			c1 = (char) (col % 26 + base);
			formula.append(c1).append(startPos).append(":").append(c1).append(
					endPos).append(")");
		} else if (col > 25) {
			char c2 = (char) ((col - 26) / 26 + base);
			c1 = (char) ((col - 26) % 26 + base);
			formula.append(c2).append(c1).append(startPos).append(":").append(
					c2).append(c1).append(endPos).append(")");
		}

		return formula.toString();
	}

	/**
	 * 插入图表工作表
	 * 
	 * @param wwb
	 *            WritableWorkbook : 工作簿
	 * @param vecImg
	 *            Vector : 图像链表
	 * @throws RowsExceededException
	 * @throws WriteException
	 */
	private void insertImgsheet(WritableWorkbook wwb, Vector vecImg)
			throws RowsExceededException, WriteException {
		// 插入图像
		WritableSheet imgSheet;
		if ((wwb.getSheets()).length < 2) {
			imgSheet = wwb.createSheet("图表", 1);
		} else {
			imgSheet = wwb.getSheet(1);
		}

		for (int i = 0; i < vecImg.size(); i++) {
			ChartImg chart = (ChartImg) vecImg.get(i);
			// 插入图像标题
			Label lbl = new Label(0, 2 + 20 * i, chart.getImgTitle());
			WritableFont font = new WritableFont(WritableFont.ARIAL,
					WritableFont.DEFAULT_POINT_SIZE, WritableFont.NO_BOLD,
					false, UnderlineStyle.NO_UNDERLINE, Colour.DARK_BLUE2);
			WritableCellFormat background = new WritableCellFormat(font);
			background.setWrap(true);
			background.setBackground(Colour.GRAY_25);
			imgSheet.mergeCells(0, 2 + 20 * i, 9, 2 + 20 * i);
			lbl.setCellFormat(background);
			imgSheet.addCell(lbl);
			// 插入图像单元格
			insertImgCell(imgSheet, 2, 4 + 20 * i, 8, 15, chart.getImgName());
		}
	}

	/**
	 * 插入图像到单元格(图像格式只支持png)
	 * 
	 * @param dataSheet
	 *            WritableSheet : 工作表
	 * @param col
	 *            int : 列
	 * @param row
	 *            int : 行
	 * @param width
	 *            int : 宽
	 * @param height
	 *            int : 高
	 * @param imgName
	 *            String : 图像的全路径
	 * @throws RowsExceededException
	 * @throws WriteException
	 */
	private void insertImgCell(WritableSheet dataSheet, int col, int row,
			int width, int height, String imgName)
			throws RowsExceededException, WriteException {
		File imgFile = new File(imgName);
		WritableImage img = new WritableImage(col, row, width, height, imgFile);
		dataSheet.addImage(img);
	}

	/**
	 * 测试
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		XLSDemo demo = new XLSDemo();
		demo.makeXls();
	}
}













分享到:
评论

相关推荐

    java 读取excel表格数据 poi

    java读取excel 表格数据。 public static void main(String[] args) { String[][] content=POIExcelUtils.read("E:\\1.xlsx"); for(int i=0;i;i++) { if(content[i]!=null){ for(int j=0;j[i].length;j...

    VB 读取Excel表格数据并在ListView控件中显示

    在VB(Visual Basic)编程中,常常需要处理与Excel数据的交互,比如读取Excel表格中的数据并将其显示在ListView控件中。ListView控件是一个非常实用的组件,可以用来展示列表形式的数据,包括多种视图模式,如图标、...

    读取Excel表格的插件库

    "读取Excel表格的插件库"正是这样一个工具,它是一个dll动态链接库,能够帮助开发者高效地读取Excel文件,并将数据转换为其他格式,例如Xml,以便更好地集成到项目中。 Unity是一个非常流行的开源游戏引擎,广泛...

    C# winform 读取Excel表格

    在C# WinForm应用中,读取Excel表格是常见的任务,尤其在数据处理和报表生成时。本项目可能是一个简单的示例,展示了如何利用C#的库来读取Excel文件中的数据。以下将详细讲解这一过程,以及涉及的关键知识点。 首先...

    VC读取Excel表格中的数据

    在VC++6.0开发环境中,通过编程读取Excel表格数据是常见的任务,这主要涉及到Microsoft Office自动化接口的使用。本文将深入探讨如何利用Visual C++ 6.0与Excel进行交互,实现从Excel文件中读取数据的功能。 首先,...

    Android开发之读取Excel表格数据

    - **创建Workbook对象**:接着,我们需要使用POI的`XSSFWorkbook`类创建一个Workbook对象,该对象代表整个Excel工作簿。使用`XSSFWorkbook`的构造函数传入之前创建的输入流。 ```java try (InputStream excel...

    JS方法读取excel表格并显示在页面上

    JS方法读取excel表格并显示在页面上,单HTML网页代码事例

    Labview读取Excel表格到数组中,并获取行列信息

    本篇将深入探讨如何使用LabVIEW来读取Excel表格数据并将其转换为数组,同时获取行数和列数的信息。LabVIEW作为一个图形化编程语言,提供了丰富的工具和库,使得与Excel交互变得简单。 首先,我们要知道在LabVIEW中...

    易语言读取excel文件到高级表格

    Excel文件通常用于存储和处理结构化的表格数据,而“读取Excel文件到高级表格”则是将Excel中的数据导入到易语言的高级表格组件中,便于进一步的处理和显示。 首先,我们需要理解易语言中的高级表格组件。这是一个...

    C#中读取Excel表格数据实例

    本示例将深入探讨如何在C#中不依赖Microsoft Office组件来读取Excel表格数据,这通常通过使用第三方库或者.NET Framework提供的System.Data.OleDb组件实现。 首先,我们介绍最常用的方法之一,即使用`System.Data....

    Java读取Excel表格中的日期

    ### Java读取Excel表格中的日期 #### 背景与问题描述 在处理Excel文件时,经常遇到的一个问题是如何正确地识别并处理日期格式的数据。这是因为Excel中的日期格式较为复杂,有时甚至会出现不同版本的Excel文件中...

    C# WinFORM 窗体小程序 oledb技术读取EXCEL表格并展示

    这个项目就是一个典型的示例,它演示了如何使用OleDb技术来读取Excel表格的数据,并在窗体上通过DataGridView控件进行展示。下面将详细讲解这个过程涉及的知识点。 首先,`OleDb`(OLE DB)是微软提供的一种数据...

    读取excel文件到高级表格易语言源码

    在易语言编程环境中,读取Excel文件并将其数据导入到高级表格是一种常见的需求,这有助于数据处理和分析。本文将详细讲解如何使用易语言来实现这一功能,主要涉及的知识点包括: 1. 易语言基础:易语言是中国自主...

    用idl读取excel

    这个函数能够直接读取Excel文件中的数据,包括工作表名称、单元格内容等。例如,要读取名为“Sheet1”的工作表,可以这样编写代码: ```idl ; 加载xlsread库 loadct, /xlsread ; 指定Excel文件路径 file_path = '...

    专门为读取excel表格的程序源码的插件

    "专门为读取excel表格的程序源码的插件"是一个针对这个需求而设计的工具,它提供了用于读取Excel文件的源代码,方便开发者集成到自己的应用程序中。以下是对这个主题的详细讲解: 首先,我们来了解一下什么是Excel...

    AutoLISP例程:读取excel文件.doc

    使用 AutoLISP 读取 Excel 文件的优点是可以自动化读取和处理 Excel 文件的过程,提高工作效率和准确性。同时,AutoLISP 也可以与其他编程语言集成,实现更复杂的自动化任务。 在实际应用中,AutoLISP 读取 Excel ...

    java批量读取Excel表格

    Java批量读取Excel表格是一种常见的数据处理需求,特别是在大数据导入、报表生成或数据分析场景中。在Java中,我们可以借助Apache POI库来实现这一功能。Apache POI是一个强大的开源库,它允许Java开发者读写...

    lua 操作excel 表格

    例如,使用luaxlsx读取Excel表格的一般步骤如下: ```lua local xlsx = require 'xlsx' -- 打开Excel文件 local workbook = xlsx.open('example.xlsx') -- 选择工作表 local sheet = workbook['Sheet1'] -- 读取...

    定时读取excel更新到数据库

    在IT行业中,定时读取Excel更新到数据库是一项常见的任务,特别是在数据管理、数据分析或业务自动化等领域。本场景中,我们使用的Excel版本是2003,这是一个较早的版本,但依然广泛应用于许多组织。以下将详细介绍...

    批量读取EXCEL表格转换为SQLite的.db数据库文件

    功能:通过批量读取多个excel文件,将每个excel文件创建为sqlite数据库文件中的一个表格,最终形成包含这些excel文件内容的.db数据库文件。 用法:将压缩包内的.exe/.dll文件放在同一文件夹内,双击运行文件内的...

Global site tag (gtag.js) - Google Analytics