java操作excel文件
采用POI操作excel
API:http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFCell.html
poi包:http://pan.baidu.com/s/1hmIQU
一.读取excel内容
1.excel内容的值如果不是string,则用getNumericCellValue(),得到double类型,再做相应转换,如果为string,则用getStringCellValue()
public static String getExcel(int index,int rowNum,int colNum) {
//File file = new File("D:/BaiduYunDownload/excel/testdata.xls");
File file = new File("./POIexcel/testdata.xls");
String cellValue = null;
int rowN = rowNum-1;//将excel的行数-1
Row row = null;
Cell cell= null;
HSSFCell hf = null;
// Cell cell_b = null;
try {
FileInputStream in = new FileInputStream(file);
HSSFWorkbook wb = new HSSFWorkbook(in);
HSSFSheet sheet = wb.getSheetAt(index);//sheet页,index从0开始
//从哪行读取
// int firstRowNum = sheet.getFirstRowNum()+1;
// int lastRowNum = sheet.getLastRowNum();
row = sheet.getRow(rowN); //取得第几行
cell = row.getCell(colNum); //取得行的第3列,从0开始
if(cell!=null){
//((Object) hf).setEncoding(HSSFCell.ENCODING_UTF_16);
//判断excel内容的数值类型
switch(cell.getCellType()) {
case Cell.CELL_TYPE_STRING://String
cellValue = cell.getStringCellValue().trim();
break;
case Cell.CELL_TYPE_NUMERIC://number
if(HSSFDateUtil.isCellDateFormatted(cell)) {
Date date = cell.getDateCellValue();
if (date != null) {//date
cellValue = new SimpleDateFormat("yyyy-MM-dd").format(date);
} else {
cellValue = "";
}
}else {
cellValue = new DecimalFormat("###.###").format(cell.getNumericCellValue());
}
break;
case HSSFCell.CELL_TYPE_FORMULA:
// 导入时如果为公式生成的数据则无值
if (!cell.getStringCellValue().equals("")) {
cellValue = cell.getStringCellValue();
} else {
cellValue = cell.getNumericCellValue() + "";
}
break;
case HSSFCell.CELL_TYPE_BLANK:
break;
case HSSFCell.CELL_TYPE_ERROR:
cellValue = "";
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
cellValue = (cell.getBooleanCellValue() == true ? "Y": "N");
break;
default:
cellValue = "";
/*
if(cell.getCellType()==Cell.CELL_TYPE_NUMERIC) {
double i = cell.getNumericCellValue();
cellValue = String.valueOf(i);
}else{
cellValue = cell.getStringCellValue().trim();
if(cellValue.equals("")){
System.out.println(rowNum+"行的值为空");
}
}
*/
}
}
}catch (Exception e) {
e.printStackTrace();
}
return cellValue;
}
double转换为int:int i_yhfw= (int) Double.parseDouble(Demo.getExcel(index, 13));
二.设置excel内容
public static void setExcel(String path, int sheet, int row, int col,String value) {
try {
File file = new File(path);
FileInputStream in = new FileInputStream(file);
HSSFWorkbook hw = new HSSFWorkbook(in);
HSSFSheet hsheet= hw.getSheetAt(sheet);//目标sheet的索引
HSSFRow hrow = hsheet.getRow(row-1);//目标行的索引
HSSFCell cell = hrow.createCell(col-1);//目标列的索引
HSSFRichTextString val = new HSSFRichTextString(value);
cell.setCellValue(val);
OutputStream out = new FileOutputStream(file);//获取文件输出流
hw.write(out);//将内容写到excel
out.close();
in.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
以上的方法的是HSFF只能操作03的excel,通过官方api介绍,使用XSFF可以操作07的excel,故优化代码如下,自动识别传入的excel是03的还是07的。
package com.excel; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date; import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; /**
* @author QiaoJiafei
* @version 创建时间:2015年11月12日 上午10:35:03
* 类说明
*/
public class TestExcel037 {
public static void main(String args[]) {
System.out.println(getExcel("D:/03excel.xls",1,2,2));
System.out.println(getExcel("D:/07excel.xlsx",1,2,2)); } public static String getExcel(String path,int index,int rowNum,int colNum) {
File file = new File(path);
String cellValue = "";
Workbook wb = null;
Sheet sheet = null;
Row row = null;
Cell cell = null;
try {
FileInputStream in = new FileInputStream(file);
if(path.endsWith(".xls")) {
wb = new HSSFWorkbook(in);
sheet = wb.getSheetAt(index-1);
}else if (path.endsWith(".xlsx")) {
wb = new XSSFWorkbook(in);
sheet = wb.getSheetAt(index-1);
}
row = sheet.getRow(rowNum);
cell = row.getCell(colNum);
if(cell!=null){
switch(cell.getCellType()) {
case Cell.CELL_TYPE_STRING:
cellValue = cell.getStringCellValue().trim();
break;
case Cell.CELL_TYPE_NUMERIC:
if(HSSFDateUtil.isCellDateFormatted(cell)) {
Date date = cell.getDateCellValue();
if (date != null) {
cellValue = new SimpleDateFormat("yyyy-MM-dd").format(date);
} else {
cellValue = "";
}
}else {
cellValue = new DecimalFormat("###.###").format(cell.getNumericCellValue());
}
break;
case Cell.CELL_TYPE_FORMULA: if (!cell.getStringCellValue().equals("")) {
cellValue = cell.getStringCellValue();
} else {
cellValue = cell.getNumericCellValue() + "";
}
break; case Cell.CELL_TYPE_BLANK:
break; case Cell.CELL_TYPE_ERROR:
cellValue = "";
break; case HSSFCell.CELL_TYPE_BOOLEAN: cellValue = (cell.getBooleanCellValue() == true ? "Y": "N");
break; default:
cellValue = "";
}
}
in.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} return cellValue; } }
所用jar包:
关于DecimalFormat的用法,参考http://www.cnblogs.com/lsun/archive/2011/06/22/2087116.html
DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。
DecimalFormat 包含一个模式 和一组符号
符号含义:
0 一个数字
# 一个数字,不包括 0
. 小数的分隔符的占位符
, 分组分隔符的占位符
; 分隔格式。
- 缺省负数前缀。
% 乘以 100 和作为百分比显示
? 乘以 1000 和作为千进制货币符显示;用货币符号代替;如果双写,用
国际货币符号代替。如果出现在一个模式中,用货币十进制分隔符代
替十进制分隔符。
X 前缀或后缀中使用的任何其它字符,用来引用前缀或后缀中的特殊字符。
例子:
DecimalFormat df1 = new DecimalFormat("0.0");
DecimalFormat df2 = new DecimalFormat("#.#");
DecimalFormat df3 = new DecimalFormat("000.000");
DecimalFormat df4 = new DecimalFormat("###.###");
System.out.println(df1.format(12.34));
System.out.println(df2.format(12.34));
System.out.println(df3.format(12.34));
System.out.println(df4.format(12.34));
结果:
12.3
12.3
012.340
12.34
java操作excel文件的更多相关文章
- java 操作excel 文件
JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...
- Java操作Excel文件以及在Android中的应用
本文章由临江仙原创,转载请注明出处:http://blog.csdn.net/zhy_cheng/article/details/10286563 Excel作为一种有格式的文件,可以使用Java来对 ...
- [转载]Java操作Excel文件的两种方案
微软在桌面系统上的成功,令我们不得不大量使用它的办公产品,如:Word,Excel.时至今日,它的源代码仍然不公开已封锁了我们的进一步应用和开发.在我们实际开发企业办公系统的过程中,常常有客户这样子要 ...
- java使用Apache POI操作excel文件
官方介绍 HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file format. XSSF is ...
- java使用POI操作excel文件,实现批量导出,和导入
一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Exc ...
- JXL包大解析;Java程序生成excel文件和解析excel文件内容
最近需求变化,需要把excel导入 我以前没有做过,所以我查了一些资料 和参考别人的代码 以下是多种方式: import java.io.File; import java.io.FileInputS ...
- Java生成和操作Excel文件(转载)
Java生成和操作Excel文件 JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该A ...
- Java生成和操作Excel文件
JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...
- 操作Excel文件--java
java操作Excel首先要导入 JExcelAPI JExcelAPI是一套纯粹使用JAVA开发出来的Excel表格操作组件,本身并不与特定的操作系统进行绑定,可以在不同的操作系统上对Excel文件 ...
随机推荐
- 技巧题---Single boy
Description Today is Christmas day. There are n single boys standing in a line. They are numbered fo ...
- mongodb学习2---常用命令解析
1,mongodb insert()和save()的相同点和区别区别:若新增的数据中存在主键 ,insert() 会提示错误,而save() 则更改原来的内容为新内容.insert({_id : 1, ...
- ahjesus Unity3D界面快捷键
F Frame selection Tab Shift focus between first column and second column (Two columns) Ctrl/Cmd + F ...
- (七)play之yabe项目【CRUD】
(七)play之yabe项目[CRUD] 博客分类: 框架@play framework 增加CRUD功能 使用CRUD能干嘛?----> 在页面对模型进行增删改查操作,这样有什么实际意义 ...
- iphone 使用 soap 服务 介绍
iphone 使用 soap 服务 介绍 目前比较常用的有几个办法: 1. WSDL to Objective C自动根据wsdl文件生成ios可以直接调用的Objective-C (Cocoa) 代 ...
- Exchange 2013 、Lync 2013、SharePoint 2013 二
上一篇简单介绍了安装过程,本篇主要集成 上一篇文章有关于头像的显示问题,engineer 给出了一个连接,介绍了Exchange和Lync的集成过程,根据介绍都配制了一遍. 一.Exchange 和 ...
- JAVA书写规范
java程序书写规范 命名规范 1.一般概念 1.尽量使用完整的英文描述符 2.采用适用于相关领域的术语 3.采用大小写混合使名字可读 4 ...
- 关于JS闭包,作者不详(转)
说明:本文由两篇文章结合而成,系从他人笔记中转过来的, 具体作者不详.因为觉得不错,遂共享之.如有侵权,立删致歉. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变 ...
- JavaScript this特性,静态方法 和实例方法,prototype
<script type="text/javascript"> function logs(str) { document.write(str + "< ...
- IOS中把字符串加密/IOS中怎么样MD5加密/IOS中NSString分类的实现
看完过后,你会学到: 1学习IOS开发中的分类实现, 2以及类方法的书写, 3以及字符串的MD5加密/解密. ---------------------------wolfhous---------- ...