免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1782 | 回复: 1
打印 上一主题 下一主题

java读取excel文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-20 23:56 |只看该作者 |倒序浏览

java读取excel文件
  1. package com.whty.aam.utils;

  2. import java.io.BufferedInputStream;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.IOException;
  7. import java.text.DecimalFormat;
  8. import java.text.ParseException;
  9. import java.text.SimpleDateFormat;
  10. import java.util.ArrayList;
  11. import java.util.Arrays;
  12. import java.util.Date;
  13. import java.util.List;

  14. import org.apache.poi.hssf.usermodel.HSSFCell;
  15. import org.apache.poi.hssf.usermodel.HSSFDateUtil;
  16. import org.apache.poi.hssf.usermodel.HSSFRow;
  17. import org.apache.poi.hssf.usermodel.HSSFSheet;
  18. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  19. import org.apache.poi.poifs.filesystem.POIFSFileSystem;
复制代码
//需要下载apache的poi.jar包放在lib目录下,还有excel文件不能是2003以上版本
  1. public class ExcelUtil {

  2. public static void main(String[] args) throws Exception {

  3.        File file = new File("E://user2.xls");

  4.        String[][] result = getData(file, 1);
  5.        System.out.println(result);
  6.        int rowLength = result.length;

  7.        for(int i=0;i<rowLength;i++) {

  8.            for(int j=0;j<result[i].length;j++) {

  9.               System.out.print(result[i][j]+",");

  10.            }

  11.            System.out.println();

  12.        }
  13.       
  14.       

  15.     }

  16.     /**

  17.      * 读取Excel的内容,第一维数组存储的是一行中格列的值,二维数组存储的是多少个行

  18.      * @param file 读取数据的源Excel

  19.      * @param ignoreRows 读取数据忽略的行数,比喻行头不需要读入 忽略的行数为1

  20.      * @return 读出的Excel中数据的内容

  21.      * @throws FileNotFoundException

  22.      * @throws IOException

  23.      */

  24.     public static String[][] getData(File file, int ignoreRows)

  25.            throws FileNotFoundException, IOException {

  26.        List<String[]> result = new ArrayList<String[]>();

  27.        int rowSize = 0;

  28.        BufferedInputStream in = new BufferedInputStream(new FileInputStream(

  29.               file));

  30.        // 打开HSSFWorkbook

  31.        POIFSFileSystem fs = new POIFSFileSystem(in);

  32.        HSSFWorkbook wb = new HSSFWorkbook(fs);

  33.        HSSFCell cell = null;

  34.        for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) {

  35.            HSSFSheet st = wb.getSheetAt(sheetIndex);

  36.            // 第一行为标题,不取

  37.            for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) {

  38.               HSSFRow row = st.getRow(rowIndex);

  39.               if (row == null) {

  40.                   continue;

  41.               }

  42.               int tempRowSize = row.getLastCellNum() + 1;

  43.               if (tempRowSize > rowSize) {

  44.                   rowSize = tempRowSize;

  45.               }

  46.               String[] values = new String[rowSize];

  47.               Arrays.fill(values, "");

  48.               boolean hasValue = false;

  49.               for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++) {

  50.                   String value = "";

  51.                   cell = row.getCell(columnIndex);

  52.                   if (cell != null) {

  53.                      // 注意:一定要设成这个,否则可能会出现乱码

  54.                      cell.setEncoding(HSSFCell.ENCODING_UTF_16);

  55.                      switch (cell.getCellType()) {

  56.                      case HSSFCell.CELL_TYPE_STRING:

  57.                          value = cell.getStringCellValue();

  58.                          break;

  59.                      case HSSFCell.CELL_TYPE_NUMERIC:

  60.                          if (HSSFDateUtil.isCellDateFormatted(cell)) {

  61.                             Date date = cell.getDateCellValue();

  62.                             if (date != null) {

  63.                                 value = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")

  64.                                        .format(date);

  65.                             } else {

  66.                                 value = "";

  67.                             }

  68.                          } else {

  69.                             value = new DecimalFormat("0").format(cell

  70.                                    .getNumericCellValue());

  71.                          }

  72.                          break;

  73.                      case HSSFCell.CELL_TYPE_FORMULA:

  74.                          // 导入时如果为公式生成的数据则无值

  75.                          if (!cell.getStringCellValue().equals("")) {

  76.                             value = cell.getStringCellValue();

  77.                          } else {

  78.                             value = cell.getNumericCellValue() + "";

  79.                          }

  80.                          break;

  81.                      case HSSFCell.CELL_TYPE_BLANK:

  82.                          break;

  83.                      case HSSFCell.CELL_TYPE_ERROR:

  84.                          value = "";

  85.                          break;

  86.                      case HSSFCell.CELL_TYPE_BOOLEAN:

  87.                          value = (cell.getBooleanCellValue() == true ? "Y"

  88.                                 : "N");

  89.                          break;

  90.                      default:

  91.                          value = "";

  92.                      }

  93.                   }

  94.                   if (columnIndex == 0 && value.trim().equals("")) {

  95.                      break;

  96.                   }

  97.                   values[columnIndex] = rightTrim(value);

  98.                   hasValue = true;

  99.               }



  100.               if (hasValue) {

  101.                   result.add(values);

  102.               }

  103.            }

  104.        }

  105.        in.close();

  106.        String[][] returnArray = new String[result.size()][rowSize];

  107.        for (int i = 0; i < returnArray.length; i++) {

  108.            returnArray[i] = (String[]) result.get(i);

  109.        }

  110.        return returnArray;

  111.     }

  112.    

  113.     /**

  114.      * 去掉字符串右边的空格

  115.      * @param str 要处理的字符串

  116.      * @return 处理后的字符串

  117.      */

  118.      public static String rightTrim(String str) {

  119.        if (str == null) {

  120.            return "";

  121.        }

  122.        int length = str.length();

  123.        for (int i = length - 1; i >= 0; i--) {

  124.            if (str.charAt(i) != 0x20) {

  125.               break;

  126.            }

  127.            length--;

  128.        }

  129.        return str.substring(0, length);

  130.     }


  131. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2011-12-21 21:36 |只看该作者
学习鸟 谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP