- 借助于apathe的<a target="_blank" href="http://files.cnblogs.com/gmq/poi.rar">poi.jar</a>,由于上传文件不支持.jar所以请下载后将文件改为.jar,在应用程序中添加poi.jar包,并将需要读取的excel文件放入根目录即可<p>本例使用<a href="http://lib.csdn.net/base/javase" class="replace_word" title="Java SE知识库" target="_blank" style="color:#df3434; font-weight:bold;">Java</a>来读取excel的内容并展出出结果,代码如下:</p>
- import java.io.BufferedInputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.text.DecimalFormat;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Date;
- import java.util.List;
- import org.apache.poi.hssf.usermodel.HSSFCell;
- importorg.apache.poi.hssf.usermodel.HSSFDateUtil;
- import org.apache.poi.hssf.usermodel.HSSFRow;
- import org.apache.poi.hssf.usermodel.HSSFSheet;
- import org.apache.poi.hssf.usermodel.HSSFWorkbook;
- import org.apache.poi.poifs.filesystem.POIFSFileSystem;
- publicclass ExcelOperate {
- publicstaticvoid main(String[] args)throws Exception {
- File file = new File("ExcelDemo.xls");
- String[][] result = getData(file, 1);
- int rowLength = result.length;
- for(int i=0;i<rowLength;i++) {
- for(int j=0;j<result[i].length;j++) {
- System.out.print(result[i][j]+"\t\t");
- }
- System.out.println();
- }
- }
- /**
- *读取Excel的内容,第一维数组存储的是一行中格列的值,二维数组存储的是多少个行
- *@paramfile读取数据的源Excel
- *@paramignoreRows读取数据忽略的行数,比喻行头不需要读入忽略的行数为1
- *@return读出的Excel中数据的内容
- *@throwsFileNotFoundException
- *@throwsIOException
- */
- publicstatic String[][] getData(File file,int ignoreRows)
- throws FileNotFoundException, IOException {
- List<String[]> result = new ArrayList<String[]>();
- int rowSize = 0;
- BufferedInputStream in = new BufferedInputStream(new FileInputStream(
- file));
- // 打开HSSFWorkbook
- POIFSFileSystem fs = new POIFSFileSystem(in);
- HSSFWorkbook wb = new HSSFWorkbook(fs);
- HSSFCell cell = null;
- for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) {
- HSSFSheet st = wb.getSheetAt(sheetIndex);
- // 第一行为标题,不取
- for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) {
- HSSFRow row = st.getRow(rowIndex);
- if (row ==null) {
- continue;
- }
- int tempRowSize = row.getLastCellNum() + 1;
- if (tempRowSize > rowSize) {
- rowSize = tempRowSize;
- }
- String[] values = new String[rowSize];
- Arrays.fill(values, "");
- boolean hasValue =false;
- for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++) {
- String value = "";
- cell = row.getCell(columnIndex);
- if (cell !=null) {
- // 注意:一定要设成这个,否则可能会出现乱码
- cell.setEncoding(HSSFCell.ENCODING_UTF_16);
- switch (cell.getCellType()) {
- case HSSFCell.CELL_TYPE_STRING:
- value = cell.getStringCellValue();
- break;
- case HSSFCell.CELL_TYPE_NUMERIC:
- if (HSSFDateUtil.isCellDateFormatted(cell)) {
- Date date = cell.getDateCellValue();
- if (date !=null) {
- value = new SimpleDateFormat("yyyy-MM-dd")
- .format(date);
- } else {
- value = "";
- }
- } else {
- value = new DecimalFormat("0").format(cell
- .getNumericCellValue());
- }
- break;
- case HSSFCell.CELL_TYPE_FORMULA:
- // 导入时如果为公式生成的数据则无值
- if (!cell.getStringCellValue().equals("")) {
- value = cell.getStringCellValue();
- } else {
- value = cell.getNumericCellValue() + "";
- }
- break;
- case HSSFCell.CELL_TYPE_BLANK:
- break;
- case HSSFCell.CELL_TYPE_ERROR:
- value = "";
- break;
- case HSSFCell.CELL_TYPE_BOOLEAN:
- value = (cell.getBooleanCellValue() == true ?"Y"
- : "N");
- break;
- default:
- value = "";
- }
- }
- if (columnIndex == 0 && value.trim().equals("")) {
- break;
- }
- values[columnIndex] = rightTrim(value);
- hasValue = true;
- }
- if (hasValue) {
- result.add(values);
- }
- }
- }
- in.close();
- String[][] returnArray = new String[result.size()][rowSize];
- for (int i = 0; i < returnArray.length; i++) {
- returnArray[i] = (String[]) result.get(i);
- }
- return returnArray;
- }
- /**
- *去掉字符串右边的空格
- *@paramstr要处理的字符串
- *@return处理后的字符串
- */
- publicstatic String rightTrim(String str) {
- if (str ==null) {
- return"";
- }
- int length = str.length();
- for (int i = length - 1; i >= 0; i--) {
- if (str.charAt(i) != 0x20) {
- break;
- }
- length--;
- }
- return str.substring(0, length);
- }
- }
本文转自--http://blog.csdn.net/ygzk123/article/details/12623985