Jul 5

java读取excel表格 晴

admin365 , 09:04 , Excel , 评论(0) , 引用(0) , 阅读(46) , Via 本站原创 | |



[转载]

/**

* <p>读取Excel表格,拷贝、更新Excel工作薄 </p>

* <p>Description: 可以读取Excel文件的内容,更新Excel工作薄

* </p>

* <p>Copyright: Copyright (c) Corparation 2005</p>

* <p>程序开发环境为eclipse</p>

* @author Walker

* @version 1.0

*/

package cn.com.yitong.xls;

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStream;

import java.util.Vector;

import cn.com.yitong.ChartImg;

import cn.com.yitong.VireObj;

import cn.com.yitong.platform.log.YTLogger;

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:/Workspace/testproj/source.xls");

workbook = Workbook.getWorkbook(ins);

// 利用已经创建的Excel工作薄创建新的可写入的Excel工作薄

File outFile = new File("D:/Workspace/testproj/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:/Workspace/testproj/images/barchart.png");

vecImg.add(img);

}

// 插入图表

insertImgsheet(wwb, vecImg);

//写入Excel对象

wwb.write();

wwb.close();

} catch (Exception e)

{

YTLogger.logDebug(e);

} 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());

}

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)

{

YTLogger.logWarn("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();

}

}


[转载]原文链接: http://ml1812650.blog.163.com/blog/static/46143313200864222182

百度搜索:Excel
Google搜索:Excel
雅虎搜索:Excel
SOSO搜索:Excel



Tags:
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]