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文件 ...
随机推荐
- 在windows下配置Eclipse + go环境
http://blog.csdn.net/hengyunabc/article/details/7371446 本文章地址:http://blog.csdn.net/hengyunabc/articl ...
- sqlite3之基本操作(二)
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python自带一个轻量级的关系型数据库SQLite.这一数据库使用SQL语言.S ...
- RadioButton 自定义控件
在res/drawable新建radiobutton.xml(本案例为video——evaluate.xml)如下 <?xml version="1.0" encoding= ...
- [Architecture Design] 累进式Domain Layer
[Architecture Design] 累进式Domain Layer 前言 本篇的内容大幅度的简化了分析设计.面向对象等等相关知识,用以传达累进式Domain Layer的核心概念.实际开发软件 ...
- ubuntu vps 安装java
Introduction Java is a programming technology originally developed by Sun Microsystems and later acq ...
- AngularJS 最常用的功能
第一 迭代输出之ng-repeat标签ng-repeat让table ul ol等标签和js里的数组完美结合 1 2 3 4 5 <ul> <li ng-repeat="p ...
- HTML中行内元素的竖直方向的padding和margin是否真的无效
参考资料:Inline elements and padding 今天写一个导航栏时遇到了一个问题:行内元素的padding-top,padding-bottom和margin-top,margin- ...
- css实现垂直居中的方法
1,设置其line-height值,使之与其高度相同 2,设置table结构,用vertical-align:middle; 3,应用定位,父级别:position:relative:子级:posit ...
- Office版本问题0x80029C4A
说来奇怪,以前运行正常的程序(涉及excel表格输出),现在运行失败了,一调试,发现了如下问题: 无法将类型为"Microsoft.Office.Interop.Excel.Applicat ...
- 卸载WIN10自带功能
要卸载OneNote,在里面输入 Get-AppxPackage *OneNote* | Remove-AppxPackage 可以复制,回车执行 4 要卸载3D,输入 Get-AppxPackage ...