利用java读写Excel文件
一.读取Excel文件内容
java 代码
- public static String readExcel(File file){
- StringBuffer sb = new StringBuffer();
- Workbook wb = null;
- try {
- //构造Workbook(工作薄)对象
- wb=Workbook.getWorkbook(file);
- } catch (BiffException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- if(wb==null)
- return null;
- //获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了
- Sheet[] sheet = wb.getSheets();
- if(sheet!=null&&sheet.length>0){
- //对每个工作表进行循环
- for(int i=0;i
- //得到当前工作表的行数
- int rowNum = sheet[i].getRows();
- for(int j=0;j
- //得到当前行的所有单元格
- Cell[] cells = sheet[i].getRow(j);
- if(cells!=null&&cells.length>0){
- //对每个单元格进行循环
- for(int k=0;k
- //读取当前单元格的值
- String cellValue = cells[k].getContents();
- sb.append(cellValue+"\t");
- }
- }
- sb.append("\r\n");
- }
- sb.append("\r\n");
- }
- }
- //最后关闭资源,释放内存
- wb.close();
- return sb.toString();
- }
二.写入Excel文件
这里有很多格式了,比如文本内容加粗,加上某些颜色等,可以参考jxl的api,同时还推荐一篇不错的文章:http://www.ibm.com/developerworks/cn/java/l-javaExcel/?ca=j-t10
java 代码
- public static void writeExcel(String fileName){
- WritableWorkbook wwb = null;
- try {
- //首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
- wwb = Workbook.createWorkbook(new File(fileName));
- } catch (IOException e) {
- e.printStackTrace();
- }
- if(wwb!=null){
- //创建一个可写入的工作表
- //Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置
- WritableSheet ws = wwb.createSheet("sheet1", 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)+"列");
- try {
- //将生成的单元格添加到工作表中
- ws.addCell(labelC);
- } catch (RowsExceededException e) {
- e.printStackTrace();
- } catch (WriteException e) {
- e.printStackTrace();
- }
- }
- }
- try {
- //从内存中写入文件中
- wwb.write();
- //关闭资源,释放内存
- wwb.close();
- } catch (IOException e) {
- e.printStackTrace();
- } catch (WriteException e) {
- e.printStackTrace();
- }
- }
- }
三.在一个Excel文件中查找是否包含某一个关键字
java 代码
- public static boolean searchKeyWord(File file,String keyWord){
- boolean res = false;
- Workbook wb = null;
- try {
- //构造Workbook(工作薄)对象
- wb=Workbook.getWorkbook(file);
- } catch (BiffException e) {
- return res;
- } catch (IOException e) {
- return res;
- }
- if(wb==null)
- return res;
- //获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了
- Sheet[] sheet = wb.getSheets();
- boolean breakSheet = false;
- if(sheet!=null&&sheet.length>0){
- //对每个工作表进行循环
- for(int i=0;i
- if(breakSheet)
- break;
- //得到当前工作表的行数
- int rowNum = sheet[i].getRows();
- boolean breakRow = false;
- for(int j=0;j
- if(breakRow)
- break;
- //得到当前行的所有单元格
- Cell[] cells = sheet[i].getRow(j);
- if(cells!=null&&cells.length>0){
- boolean breakCell = false;
- //对每个单元格进行循环
- for(int k=0;k
- if(breakCell)
- break;
- //读取当前单元格的值
- String cellValue = cells[k].getContents();
- if(cellValue==null)
- continue;
- if(cellValue.contains(keyWord)){
- res = true;
- breakCell = true;
- breakRow = true;
- breakSheet = true;
- }
- }
- }
- }
- }
- }
- //最后关闭资源,释放内存
- wb.close();
- return res;
- }
四.往Excel中插入图片图标
插入图片的实现很容易,参看以下代码:
java 代码
- 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);
- }
以上代码的注释已经很清楚了,大概也就不用再解释了,我们可以用如下程序验证:
java 代码
- try {
- //创建一个工作薄
- WritableWorkbook workbook = Workbook.createWorkbook(new File("D:/test1.xls"));
- //待插入的工作表
- WritableSheet imgSheet = workbook.createSheet("Images",0);
- //要插入的图片文件
- File imgFile = new File("D:/1.png");
- //图片插入到第二行第一个单元格,长宽各占六个单元格
- insertImg(imgSheet,0,1,6,6,imgFile);
- workbook.write();
- workbook.close();
- catch (IOException e) {
- e.printStackTrace();
- catch (WriteException e) {
- e.printStackTrace();
但是jxl只支持png格式的图片,jpg格式和gif格式都不支持
五.插入页眉页脚
一般的页眉页脚都分为三个部分,左,中,右三部分,利用如下代码可实现插入页眉页脚
java 代码
- public static void setHeader(WritableSheet dataSheet,String left,String center,String right){
- HeaderFooter hf = new HeaderFooter();
- hf.getLeft().append(left);
- hf.getCentre().append(center);
- hf.getRight().append(right);
- //加入页眉
- dataSheet.getSettings().setHeader(hf);
- //加入页脚
- //dataSheet.getSettings().setFooter(hf);
- }
我们可以用如下代码测试该方法:
java 代码
- try {
- //创建一个工作薄
- WritableWorkbook workbook = Workbook.createWorkbook(new File("D:/test1.xls"));
- //待插入的工作表
- WritableSheet dataSheet = workbook.createSheet("加入页眉",0);
- ExcelUtils.setHeader(dataSheet, "chb", "2007-03-06", "第1页,共3页");
- workbook.write();
- workbook.close();
- } catch (IOException e) {
- e.printStackTrace();
- } catch (WriteException e) {
- e.printStackTrace();
- }
- }
合并单元格:
//首先创建一个sheet
WritableSheet sheetWrite=writeWorkbook.createSheet("sheet的名称",0);
//把 单元格(column, row)到单元格(column1, row1)进行合并。
sheetWrite.mergeCells(column, row, column1, row1);
java 操作excel,jxl加边框,jxl合并单元格,单元格的设置,单元
WritableCellFormat headerFormat = new WritableCellFormat(
HEADER_FONT_STYLE);
//水平居中对齐
headerFormat.setAlignment(Alignment.CENTRE);
//竖直方向居中对齐
headerFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
//建立标签,参数依次为:列索引、行索引、内容、格式
Label seqLabel = new Label(0, 0, "序号", headerFormat);
//增加单元格
sheet.addCell(seqLabel);
//合并单元格,参数依次为:列索引、行索引、列索引+需要合并的列的个数、行索引+需要合并的行的个数
sheet.mergeCells(0, 0, 0, 1);
//设置单元格宽度,以字符为单位
sheet.setColumnView(0, "序号".length() + 10);Label basicInfoLabel = new Label(1, 0, "基本信息",
headerFormat);
sheet.addCell(basicInfoLabel);
sheet.mergeCells(1, 0, 3, 0);//合并垮了3行。sheet.mergeCells(1, 1, 1, 3);//合并垮了3列。
label = new Label(0, 1, "苹果”);
sheet.mergeCells(0,1, 0, 3- 1);//合并垮了3列。
WritableCellFormat cellFormat = new WritableCellFormat();
cellFormat.setVerticalAlignment(VerticalAlignment.CENTRE);// 垂直居中
label.setCellFormat(cellFormat);
sheet.addCell(label);注:再次使cellFormat时,需要重新NEW WritableCellFormat 。
一.读取Excel文件内容
java 代码
- public static String readExcel(File file){
- StringBuffer sb = new StringBuffer();
- Workbook wb = null;
- try {
- //构造Workbook(工作薄)对象
- wb=Workbook.getWorkbook(file);
- } catch (BiffException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- if(wb==null)
- return null;
- //获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了
- Sheet[] sheet = wb.getSheets();
- if(sheet!=null&&sheet.length>0){
- //对每个工作表进行循环
- for(int i=0;i
- //得到当前工作表的行数
- int rowNum = sheet[i].getRows();
- for(int j=0;j
- //得到当前行的所有单元格
- Cell[] cells = sheet[i].getRow(j);
- if(cells!=null&&cells.length>0){
- //对每个单元格进行循环
- for(int k=0;k
- //读取当前单元格的值
- String cellValue = cells[k].getContents();
- sb.append(cellValue+"\t");
- }
- }
- sb.append("\r\n");
- }
- sb.append("\r\n");
- }
- }
- //最后关闭资源,释放内存
- wb.close();
- return sb.toString();
- }
二.写入Excel文件
这里有很多格式了,比如文本内容加粗,加上某些颜色等,可以参考jxl的api,同时还推荐一篇不错的文章:http://www.ibm.com/developerworks/cn/java/l-javaExcel/?ca=j-t10
java 代码
- public static void writeExcel(String fileName){
- WritableWorkbook wwb = null;
- try {
- //首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
- wwb = Workbook.createWorkbook(new File(fileName));
- } catch (IOException e) {
- e.printStackTrace();
- }
- if(wwb!=null){
- //创建一个可写入的工作表
- //Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置
- WritableSheet ws = wwb.createSheet("sheet1", 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)+"列");
- try {
- //将生成的单元格添加到工作表中
- ws.addCell(labelC);
- } catch (RowsExceededException e) {
- e.printStackTrace();
- } catch (WriteException e) {
- e.printStackTrace();
- }
- }
- }
- try {
- //从内存中写入文件中
- wwb.write();
- //关闭资源,释放内存
- wwb.close();
- } catch (IOException e) {
- e.printStackTrace();
- } catch (WriteException e) {
- e.printStackTrace();
- }
- }
- }
三.在一个Excel文件中查找是否包含某一个关键字
java 代码
- public static boolean searchKeyWord(File file,String keyWord){
- boolean res = false;
- Workbook wb = null;
- try {
- //构造Workbook(工作薄)对象
- wb=Workbook.getWorkbook(file);
- } catch (BiffException e) {
- return res;
- } catch (IOException e) {
- return res;
- }
- if(wb==null)
- return res;
- //获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了
- Sheet[] sheet = wb.getSheets();
- boolean breakSheet = false;
- if(sheet!=null&&sheet.length>0){
- //对每个工作表进行循环
- for(int i=0;i
- if(breakSheet)
- break;
- //得到当前工作表的行数
- int rowNum = sheet[i].getRows();
- boolean breakRow = false;
- for(int j=0;j
- if(breakRow)
- break;
- //得到当前行的所有单元格
- Cell[] cells = sheet[i].getRow(j);
- if(cells!=null&&cells.length>0){
- boolean breakCell = false;
- //对每个单元格进行循环
- for(int k=0;k
- if(breakCell)
- break;
- //读取当前单元格的值
- String cellValue = cells[k].getContents();
- if(cellValue==null)
- continue;
- if(cellValue.contains(keyWord)){
- res = true;
- breakCell = true;
- breakRow = true;
- breakSheet = true;
- }
- }
- }
- }
- }
- }
- //最后关闭资源,释放内存
- wb.close();
- return res;
- }
四.往Excel中插入图片图标
插入图片的实现很容易,参看以下代码:
java 代码
- 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);
- }
以上代码的注释已经很清楚了,大概也就不用再解释了,我们可以用如下程序验证:
java 代码
- try {
- //创建一个工作薄
- WritableWorkbook workbook = Workbook.createWorkbook(new File("D:/test1.xls"));
- //待插入的工作表
- WritableSheet imgSheet = workbook.createSheet("Images",0);
- //要插入的图片文件
- File imgFile = new File("D:/1.png");
- //图片插入到第二行第一个单元格,长宽各占六个单元格
- insertImg(imgSheet,0,1,6,6,imgFile);
- workbook.write();
- workbook.close();
- catch (IOException e) {
- e.printStackTrace();
- catch (WriteException e) {
- e.printStackTrace();
但是jxl只支持png格式的图片,jpg格式和gif格式都不支持
五.插入页眉页脚
一般的页眉页脚都分为三个部分,左,中,右三部分,利用如下代码可实现插入页眉页脚
java 代码
- public static void setHeader(WritableSheet dataSheet,String left,String center,String right){
- HeaderFooter hf = new HeaderFooter();
- hf.getLeft().append(left);
- hf.getCentre().append(center);
- hf.getRight().append(right);
- //加入页眉
- dataSheet.getSettings().setHeader(hf);
- //加入页脚
- //dataSheet.getSettings().setFooter(hf);
- }
我们可以用如下代码测试该方法:
java 代码
- try {
- //创建一个工作薄
- WritableWorkbook workbook = Workbook.createWorkbook(new File("D:/test1.xls"));
- //待插入的工作表
- WritableSheet dataSheet = workbook.createSheet("加入页眉",0);
- ExcelUtils.setHeader(dataSheet, "chb", "2007-03-06", "第1页,共3页");
- workbook.write();
- workbook.close();
- } catch (IOException e) {
- e.printStackTrace();
- } catch (WriteException e) {
- e.printStackTrace();
- }
- }
合并单元格:
//首先创建一个sheet
WritableSheet sheetWrite=writeWorkbook.createSheet("sheet的名称",0);
//把 单元格(column, row)到单元格(column1, row1)进行合并。
sheetWrite.mergeCells(column, row, column1, row1);
java 操作excel,jxl加边框,jxl合并单元格,单元格的设置,单元
WritableCellFormat headerFormat = new WritableCellFormat(
HEADER_FONT_STYLE);
//水平居中对齐
headerFormat.setAlignment(Alignment.CENTRE);
//竖直方向居中对齐
headerFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
//建立标签,参数依次为:列索引、行索引、内容、格式
Label seqLabel = new Label(0, 0, "序号", headerFormat);
//增加单元格
sheet.addCell(seqLabel);
//合并单元格,参数依次为:列索引、行索引、列索引+需要合并的列的个数、行索引+需要合并的行的个数
sheet.mergeCells(0, 0, 0, 1);
//设置单元格宽度,以字符为单位
sheet.setColumnView(0, "序号".length() + 10);Label basicInfoLabel = new Label(1, 0, "基本信息",
headerFormat);
sheet.addCell(basicInfoLabel);
sheet.mergeCells(1, 0, 3, 0);//合并垮了3行。sheet.mergeCells(1, 1, 1, 3);//合并垮了3列。
label = new Label(0, 1, "苹果”);
sheet.mergeCells(0,1, 0, 3- 1);//合并垮了3列。
WritableCellFormat cellFormat = new WritableCellFormat();
cellFormat.setVerticalAlignment(VerticalAlignment.CENTRE);// 垂直居中
label.setCellFormat(cellFormat);
sheet.addCell(label);注:再次使cellFormat时,需要重新NEW WritableCellFormat 。
利用java读写Excel文件的更多相关文章
- C++读写EXCEL文件OLE,java读写excel文件POI 对比
C++读写EXCEL文件方式比较 有些朋友问代码的问题,将OLE读写的代码分享在这个地方,大家请自己看.http://www.cnblogs.com/destim/p/5476915.html C++ ...
- java读写excel文件
近期处理的数据规模比较大,正好又是统计合并的事情,想着借助excel就可以完成了,然后就了解了下java读取excel的事情. 读取的文件主要分两类:xls文件.xlsx文件.xls文件的相关操作用的 ...
- Java读写Excel文件,利用POI
直接看工具类代码吧, package com.example.demo.util; import com.example.demo.entity.ExcelDataVO; import org.apa ...
- java读写excel文件( POI解析Excel)
package com.zhx.base.utils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi ...
- C# WPF 利用NPOI读写Excel文件
https://blog.csdn.net/a312024054/article/details/70139172 [各种样式] https://www.cnblogs.com/xwgli/archi ...
- JXL包大解析;Java程序生成excel文件和解析excel文件内容
最近需求变化,需要把excel导入 我以前没有做过,所以我查了一些资料 和参考别人的代码 以下是多种方式: import java.io.File; import java.io.FileInputS ...
- 《手把手教你》系列技巧篇(六十六)-java+ selenium自动化测试 - 读写excel文件 - 上篇(详细教程)
1.简介 在自动化测试,有些我们的测试数据是放到excel文件中,尤其是在做数据驱动测试的时候,所以需要懂得如何操作获取excel内的内容.由于java不像python那样有直接操作Excle文件的类 ...
- 《手把手教你》系列技巧篇(六十七)-java+ selenium自动化测试 - 读写excel文件 - 中篇(详细教程)
1.简介 前面介绍了POI可以操作excel,也简单的提到另一个操作excle的工具,本篇介绍一个其他的可以操作excel的工具,但是这个工具有一个前提,excel文件版本只能是97-2003版本,如 ...
- 《手把手教你》系列技巧篇(六十八)-java+ selenium自动化测试 - 读写excel文件 - 下篇(详细教程)
1.简介 今天继续操作Excle,小伙伴或者童鞋们是不是觉得宏哥会介绍第三种工具操作Excle,今天不介绍了,有两种就够用了,其实一种就够用了,今天主要是来介绍如何使用不同的数据类型读取Excel文件 ...
随机推荐
- UI_RD协作开发流程
1. 背景 由于android端需要进行多屏幕适配,这就给UI&RD之间的沟通产生了一些困难.我下面将会对这两种角色的沟通,说明了一下我们项目中沟通的方式和规则. 原则:客户端跟UI约定了各种 ...
- javascript里面支持el表达式和<s:iterator>
javascript不支持jstl标签,支持<s:iterator>和el表达式
- jQuery基础---filter()和find()
这是jQuery里常用的2个方法.他们2者功能是完全不同的,而初学者往往会被误导. 首先 我们看.find()方法:现在有一个页面,里面HTML代码为;程序代码 <div class=" ...
- Junit4
package test.code; import static org.junit.Assert.*; import org.junit.Test; import code.MyCode; publ ...
- iOS 5.0 后UIViewController新增:willMoveToParentViewController和didMoveToParentViewCon[转]
在iOS 5.0以前,我们在一个UIViewController中这样组织相关的UIView 在以前,一个UIViewController的View可能有很多小的子view.这些子view很多时候 ...
- 关于 profile文件(转)
登录shell执行了两个特殊文件, 1个是:\etc\profile, 这个文件由系统管理员设置,通常做一些如检查是否有邮件,设置默认的创建文件的掩码,给某些表转到处变量赋值,已经任何管理员希望每当用 ...
- 加链接太麻烦?使用 linkit 模块提升用户编辑体验
在制作网站内容时,适当地添加链接会非常用利于网站内容的SEO.加入链接的文章可以让访客了解到更多相关内容,从而提升文章的质量.被链接到的内容也能因此获得更多的访问和关注.只不过,在内容编辑时添加链接却 ...
- HTML DOM(学习笔记二)
嗯,在HTML DOM(学习笔记一)中简单描述了一下HTML DOM 是什么,这一篇将记录下来有关HTML DOM的内容! 1:DOM节点 首先,再来看一下HTML DOM的树状结构,如下图所示: 这 ...
- Eclipse中Jsp页面警告的解决方法小结
恩,只要是开发人员,这样的小事情总会遇到的,对于这其中的某些警告性的错误是不影响代码的运行的,对应的功能也是能实现的,不过总给人一种不太好看的感觉!如果代码写的比较符合规范,这些问题也就自然而然的消失 ...
- 操作笔记:linux下安装mysql
1,检查linux下是否安装了mysql shell指令如下: [root@iZ945sgm0ugZ ~]# rpm -qa|grep -i mysql 如果有的话:做出挨个删除(eg:rpm -ev ...