如何用java解析excle??

以下代码需求加载jar包:  poi-3.9.jar   ;

package JavaExcle;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;


import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.DateUtil;


import jxl.Cell;
import jxl.Range;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.read.biff.PasswordException;
import jxl.read.biff.RowRecord;


public class JavaExcle {
public static void javaExcle(String excleUrl) {
File file = new File(excleUrl);
String excleString = "";
try {
InputStream is = new FileInputStream(file);
try {
HSSFWorkbook wb = new HSSFWorkbook(is);
// 得到本文档的页数
int sheetnum = wb.getNumberOfSheets();
System.out.println("一共有" + sheetnum + "页!\n");
for (int i = 0; i < sheetnum; i++) {
// 打印文档的名称
System.out.print(wb.getSheetName(i));
// 得到当前页的行数
int rownum = wb.getSheetAt(i).getPhysicalNumberOfRows();
System.out.println("\t本页有 " + rownum + " 行数据!");
for (int j = 0; j < rownum; j++) {
// 得到当前行的列数
if (wb.getSheetAt(i).getRow(j) == null) {
continue;
}
int cellNum = wb.getSheetAt(i).getRow(j)
.getPhysicalNumberOfCells();
if (cellNum < 1) {
continue;
}
System.out.println("\t本行有 " + cellNum + " 列数据!");
for (int k = 0; k < cellNum; k++) {
HSSFCell cell = wb.getSheetAt(i).getRow(j)
.getCell(k);
excleString += paseCell(cell) + "\t";
}
excleString += "\n";
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("文件异常或不存在: " + excleUrl);
e.printStackTrace();
}


} catch (FileNotFoundException e) {
System.out.println("文件不存在或地址有误: " + excleUrl);
e.printStackTrace();
}
System.out.println(excleString);
}


/**
* 解析单元格数据的方法

* */
public static String paseCell(HSSFCell cell) {
String value = "";
if (cell == null) {
return value;
}
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC:// 如果是数字类型
if (DateUtil.isCellDateFormatted(cell)) {// 如果是时间类型
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
value = sdf.format(cell.getDateCellValue());
} else {
/*
* 符号含义:   0 一个数字   # 一个数字,不包括 0   . 小数的分隔符的占位符   , 分组分隔符的占位符
*   ; 分隔格式。   - 缺省负数前缀。   % 乘以 100 和作为百分比显示   ? 乘以 1000
* 和作为千进制货币符显示;用货币符号代替;如果双写,用   国际货币符号代替。如果出现在一个模式中,用货币十进制分隔符代
*   替十进制分隔符。   X 前缀或后缀中使用的任何其它字符,用来引用前缀或后缀中的特殊字符。
*/
DecimalFormat df = new DecimalFormat("###.###");
value = df.format(cell.getNumericCellValue());
}
break;
case HSSFCell.CELL_TYPE_STRING:// 如果是文本类型
value = cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_BLANK:
break;
default:
break;
}
return value;
}


public static void main(String[] args) {
javaExcle("F:\\aa.xls");
}
}

猜你喜欢

转载自blog.csdn.net/qq_20446879/article/details/79595060