• Java读取Excel内容


    借助于apathe的poi.jar,由于上传文件不支持.jar所以请下载后将文件改为.jar,在应用程序中添加poi.jar包,并将需要读取的excel文件放入根目录即可

    本例使用java来读取excel的内容并展出出结果,代码如下:

     

    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;

    import org.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;

     

    public class ExcelOperate {

     

        public static void 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的内容,第一维数组存储的是一行中格列的值,二维数组存储的是多少个行

         * @param file 读取数据的源Excel

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

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

         * @throws FileNotFoundException

         * @throws IOException

         */

        public static 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;

        }

       

        /**

         * 去掉字符串右边的空格

         * @param str 要处理的字符串

         * @return 处理后的字符串

         */

         public static 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);

        }

    }

  • 相关阅读:
    在CentOS中安装VMware Tools
    引用
    iomanip头文件库函数
    第2章 寄存器(CPU工作原理)
    二维差分
    组合数学——康托展开和逆康托展开
    动态规划精讲(一)区域和检索
    动态规划精讲(一)最大子矩阵
    freopen
    动态规划精讲(一)环形子组数的最大和
  • 原文地址:https://www.cnblogs.com/gmq/p/1521496.html
Copyright © 2020-2023  润新知