java的poi技术读写excel数据

来源:互联网 发布:宣传片配音软件 编辑:程序博客网 时间:2024/05/17 01:55

Apache POI 是创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE2)的Java API。用它可以使用Java读取和创建,修改MS Excel文件.而且,还可以使用Java读取和创建MSWord和MSPowerPoint文件。Apache POI 提供Java操作Excel解决方案(适用于Excel97-2008)。

HSSF - 提供读写Microsoft Excel XLS格式档案的功能。
XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能。
HWPF - 提供读写Microsoft Word DOC格式档案的功能。
HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
HDGF - 提供读Microsoft Visio格式档案的功能。
HPBF - 提供读Microsoft Publisher格式档案的功能。
HSMF - 提供读Microsoft Outlook格式档案的功能。

1、读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 ReadExcelFile {    /**     * 读取Excel的内容,第一维数组存储的是一行中格列的值,二维数组存储的是多少个行     * @param file 读取数据的源Excel     * @param ignoreRows 读取数据忽略的行数,比喻行头不需要读入 忽略的行数为1     * @param sheetIndex 读取数据的源Excel的表格序号,如sheetIndex=3,表示取得第3个表     * @return 读出的Excel中数据的内容     * @throws FileNotFoundException     * @throws IOException     */    public static String[][] getDate(String filePath, int ignoreRows,int sheetIndex) throws IOException {        File file = new File(filePath);        List<String[]> result=new ArrayList<String[]>();         int rowSize=0;        BufferedInputStream inputStream =new BufferedInputStream(new FileInputStream(file));        POIFSFileSystem fsFileSystem=new POIFSFileSystem(inputStream);        HSSFWorkbook wb=new HSSFWorkbook(fsFileSystem);        //System.out.println("nu"+wb.getNumberOfSheets());        HSSFCell cell=null;        //读取每个表//      for(int sheetIndex=0;sheetIndex<wb.getNumberOfSheets();sheetIndex++){            HSSFSheet st=wb.getSheetAt(sheetIndex-1);            //第一行标题,暂时不取            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) {                         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);                   }                }//          }            inputStream.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);    }}

2、写入一个excel表格:

package cn.cz.excel;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.Date;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFCellStyle;import org.apache.poi.hssf.usermodel.HSSFDataFormat;import org.apache.poi.hssf.usermodel.HSSFFont;import org.apache.poi.hssf.usermodel.HSSFHyperlink;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.hssf.util.CellRangeAddress;import org.apache.poi.hssf.util.HSSFColor;public class WriteExcelFile {    /**     * @param cz     * @throws IOException      */    public static void WriteExcel(String[][] inputResult,String outFilePath) throws IOException {        int rowLenth = inputResult.length;        int columnLenth = inputResult[0].length;        // 创建Excel的工作书册 Workbook,对应到一个excel文档        HSSFWorkbook wb = new HSSFWorkbook();        // 创建Excel的工作sheet,对应到一个excel文档的tab        HSSFSheet sheet = wb.createSheet("sheet1");        // 设置相关基本属性        // 1、设置excel每列宽度        sheet.setColumnWidth(0, 4000);        // /2、创建字体样式        HSSFFont font = wb.createFont();        font.setFontName("Verdana");        font.setBoldweight((short) 70);        font.setFontHeight((short) 210);        font.setColor(HSSFColor.BLACK.index);        // 3、创建单元格样式        HSSFCellStyle style = wb.createCellStyle();        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);    style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);style.setFillForegroundColor(HSSFColor.LIGHT_TURQUOISE.index);        //style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);        // 4、设置边框        style.setBottomBorderColor(HSSFColor.RED.index);        style.setBorderBottom(HSSFCellStyle.BORDER_THIN);        style.setBorderLeft(HSSFCellStyle.BORDER_THIN);        style.setBorderRight(HSSFCellStyle.BORDER_THIN);        style.setBorderTop(HSSFCellStyle.BORDER_THIN);        style.setFont(font);// 设置字体        // 设置单元格内容格式        HSSFCellStyle style1 = wb.createCellStyle();        // style1.setDataFormat(HSSFDataFormat.getBuiltinFormat("h:mm:ss"));        style1.setWrapText(true);// 自动换行        for (int i = 0; i < rowLenth; i++) {            // 创建Excel的sheet的一行            HSSFRow row = sheet.createRow(i);            row.setHeight((short) 500);// 设定行的高度            for (int j = 0; j < columnLenth; j++) {                // 创建一个Excel的单元格                HSSFCell cell = row.createCell(j);                                          // 设置单元格的样式格式                cell.setCellStyle(style1);                              // // 合并单元格(startRow,endRow,startColumn,endColumn)                // sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2));                // 给Excel的单元格设置样式和赋值                //cell.setCellStyle(style);                cell.setCellValue(inputResult[i][j]);            }           }        // // 创建超链接        // HSSFHyperlink link = new HSSFHyperlink(HSSFHyperlink.LINK_URL);        // link.setAddress("http://www.baidu.com");        // cell = row.createCell(1);        // cell.setCellValue("百度");        // cell.setHyperlink(link);// 设定单元格的链接        FileOutputStream os = new FileOutputStream(outFilePath);        wb.write(os);        os.close();    }}
0 0