zoukankan      html  css  js  c++  java
  • JAVA用POI读取和创建2003和2007版本Excel完美示例

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.text.DecimalFormat;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.LinkedList;
    import java.util.List;
     
    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.HSSFDateUtil;
    import org.apache.poi.hssf.usermodel.HSSFFont;
    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.HSSFColor;
    import org.apache.poi.xssf.usermodel.XSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFCellStyle;
    import org.apache.poi.xssf.usermodel.XSSFFont;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
     
    /**
     * 可以从http://poi.apache.org/ 这里下载到POI的jar包 POI 
    创建和读取2003-2007版本Excel文件
     * 
     */
     
    public class CreatAndReadExcel {
     
    public static void main(String[] args) throws Exception {
     
    creat2003Excel();// 创建2007版Excel文件
    creat2007Excel();// 创建2003版Excel文件
    //读取2003Excel文件
    String path2003 = System.getProperty("user.dir")
    + System.getProperty("file.separator") + "style_2003.xls";// 获取项目文件路径 
    +2003版文件名
    System.out.println("路径:" + path2003);
    File f2003 = new File(path2003);
    try {
    readExcel(f2003);
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
            //读取2007Excel文件
    String path2007 = System.getProperty("user.dir")
    + System.getProperty("file.separator") + "style_2007.xlsx";// 获取项目文件路径 
    +2007版文件名
    System.out.println("路径:" + path2007);
    File f2007 = new File(path2007);
    try {
    readExcel(f2007);
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
     
    }
     
    /**
    * 创建2007版Excel文件
    * @throws FileNotFoundException
    * @throws IOException
    */
    private static void creat2007Excel() throws FileNotFoundException,
    IOException {
    // HSSFWorkbook workBook = new HSSFWorkbook();// 创建 一个excel文档对象
    XSSFWorkbook workBook = new XSSFWorkbook();
    XSSFSheet sheet = workBook.createSheet();// 创建一个工作薄对象
     
    sheet.setColumnWidth(1, 10000);// 设置第二列的宽度为
     
    XSSFRow row = sheet.createRow(1);// 创建一个行对象
     
    row.setHeightInPoints(23);// 设置行高23像素
     
    XSSFCellStyle style = workBook.createCellStyle();// 创建样式对象
     
    // 设置字体
     
    XSSFFont font = workBook.createFont();// 创建字体对象
     
    font.setFontHeightInPoints((short) 15);// 设置字体大小
     
    font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 设置粗体
     
    font.setFontName("黑体");// 设置为黑体字
     
    style.setFont(font);// 将字体加入到样式对象
     
    // 设置对齐方式
     
    style.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);// 水平居中
     
    style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直居中
     
    // 设置边框
     
    style.setBorderTop(HSSFCellStyle.BORDER_THICK);// 顶部边框粗线
     
    style.setTopBorderColor(HSSFColor.RED.index);// 设置为红色
     
    style.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE);// 底部边框双线
     
    style.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);// 左边边框
     
    style.setBorderRight(HSSFCellStyle.BORDER_MEDIUM);// 右边边框
     
    // 格式化日期
     
    style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
     
    XSSFCell cell = row.createCell(1);// 创建单元格
     
    cell.setCellValue(new Date());// 写入当前日期
     
    cell.setCellStyle(style);// 应用样式对象
     
    // 文件输出流
     
    FileOutputStream os = new FileOutputStream("style_2007.xlsx");
     
    workBook.write(os);// 将文档对象写入文件输出流
     
    os.close();// 关闭文件输出流
    System.out.println("创建成功 office 2007 excel");
    }
     
    /**
    * 创建2003版本的Excel文件
    */
    private static void creat2003Excel() throws FileNotFoundException,
    IOException {
    HSSFWorkbook workBook = new HSSFWorkbook();// 创建 一个excel文档对象
     
    HSSFSheet sheet = workBook.createSheet();// 创建一个工作薄对象
     
    sheet.setColumnWidth(1, 10000);// 设置第二列的宽度为
     
    HSSFRow row = sheet.createRow(1);// 创建一个行对象
     
    row.setHeightInPoints(23);// 设置行高23像素
     
    HSSFCellStyle style = workBook.createCellStyle();// 创建样式对象
     
    // 设置字体
     
    HSSFFont font = workBook.createFont();// 创建字体对象
     
    font.setFontHeightInPoints((short) 15);// 设置字体大小
     
    font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 设置粗体
     
    font.setFontName("黑体");// 设置为黑体字
     
    style.setFont(font);// 将字体加入到样式对象
     
    // 设置对齐方式
     
    style.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);// 水平居中
     
    style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直居中
     
    // 设置边框
     
    style.setBorderTop(HSSFCellStyle.BORDER_THICK);// 顶部边框粗线
     
    style.setTopBorderColor(HSSFColor.RED.index);// 设置为红色
     
    style.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE);// 底部边框双线
     
    style.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);// 左边边框
     
    style.setBorderRight(HSSFCellStyle.BORDER_MEDIUM);// 右边边框
     
    // 格式化日期
     
    style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
     
    HSSFCell cell = row.createCell(1);// 创建单元格
     
    cell.setCellValue(new Date());// 写入当前日期
     
    cell.setCellStyle(style);// 应用样式对象
     
    // 文件输出流
     
    FileOutputStream os = new FileOutputStream("style_2003.xls");
     
    workBook.write(os);// 将文档对象写入文件输出流
     
    os.close();// 关闭文件输出流
    System.out.println("创建成功 office 2003 excel");
    }
     
    /**
    * 对外提供读取excel 的方法
    */
    public static List<List<Object>> readExcel(File file) throws IOException {
    String fileName = file.getName();
    String extension = fileName.lastIndexOf(".") == -1 ? "" : fileName
    .substring(fileName.lastIndexOf(".") + 1);
    if ("xls".equals(extension)) {
    return read2003Excel(file);
    } else if ("xlsx".equals(extension)) {
    return read2007Excel(file);
    } else {
    throw new IOException("不支持的文件类型");
    }
    }
     
    /**
    * 读取 office 2003 excel
    * @throws IOException
    * @throws FileNotFoundException
    */
    private static List<List<Object>> read2003Excel(File file)
    throws IOException {
    List<List<Object>> list = new LinkedList<List<Object>>();
    HSSFWorkbook hwb = new HSSFWorkbook(new FileInputStream(file));
    HSSFSheet sheet = hwb.getSheetAt(0);
    Object value = null;
    HSSFRow row = null;
    HSSFCell cell = null;
    System.out.println("读取office 2003 excel内容如下:");
    for (int i = sheet.getFirstRowNum(); i <= sheet
    .getPhysicalNumberOfRows(); i++) {
    row = sheet.getRow(i);
    if (row == null) {
    continue;
    }
    List<Object> linked = new LinkedList<Object>();
    for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {
    cell = row.getCell(j);
    if (cell == null) {
    continue;
    }
    DecimalFormat df = new DecimalFormat("0");// 格式化 number String
    // 字符
    SimpleDateFormat sdf = new SimpleDateFormat(
    "yyyy-MM-dd HH:mm:ss");// 格式化日期字符串
    DecimalFormat nf = new DecimalFormat("0.00");// 格式化数字
    switch (cell.getCellType()) {
    case XSSFCell.CELL_TYPE_STRING:
    // System.out.println(i + "行" + j + " 列 is String type");
    value = cell.getStringCellValue();
    System.out.print("  " + value + "  ");
    break;
    case XSSFCell.CELL_TYPE_NUMERIC:
    // System.out.println(i + "行" + j
    // + " 列 is Number type ; DateFormt:"
    // + cell.getCellStyle().getDataFormatString());
    if ("@".equals(cell.getCellStyle().getDataFormatString())) {
    value = df.format(cell.getNumericCellValue());
     
    } else if ("General".equals(cell.getCellStyle()
    .getDataFormatString())) {
    value = nf.format(cell.getNumericCellValue());
    } else {
    value = sdf.format(HSSFDateUtil.getJavaDate(cell
    .getNumericCellValue()));
    }
    System.out.print("  " + value + "  ");
    break;
    case XSSFCell.CELL_TYPE_BOOLEAN:
    // System.out.println(i + "行" + j + " 列 is Boolean type");
    value = cell.getBooleanCellValue();
    System.out.print("  " + value + "  ");
    break;
    case XSSFCell.CELL_TYPE_BLANK:
    // System.out.println(i + "行" + j + " 列 is Blank type");
    value = "";
    System.out.print("  " + value + "  ");
    break;
    default:
    // System.out.println(i + "行" + j + " 列 is default type");
    value = cell.toString();
    System.out.print("  " + value + "  ");
    }
    if (value == null || "".equals(value)) {
    continue;
    }
    linked.add(value);
     
    }
    System.out.println("");
    list.add(linked);
    }
     
    return list;
    }
     
    /**
    * 读取Office 2007 excel
    */
     
    private static List<List<Object>> read2007Excel(File file)
    throws IOException {
     
    List<List<Object>> list = new LinkedList<List<Object>>();
    // String path = System.getProperty("user.dir") +
    // System.getProperty("file.separator")+"dd.xlsx";
    // System.out.println("路径:"+path);
    // 构造 XSSFWorkbook 对象,strPath 传入文件路径
    XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(file));
     
    // 读取第一章表格内容
    XSSFSheet sheet = xwb.getSheetAt(0);
    Object value = null;
    XSSFRow row = null;
    XSSFCell cell = null;
    System.out.println("读取office 2007 excel内容如下:");
    for (int i = sheet.getFirstRowNum(); i <= sheet
    .getPhysicalNumberOfRows(); i++) {
    row = sheet.getRow(i);
    if (row == null) {
    continue;
    }
    List<Object> linked = new LinkedList<Object>();
    for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {
    cell = row.getCell(j);
    if (cell == null) {
    continue;
    }
    DecimalFormat df = new DecimalFormat("0");// 格式化 number String
    // 字符
    SimpleDateFormat sdf = new SimpleDateFormat(
    "yyyy-MM-dd HH:mm:ss");// 格式化日期字符串
    DecimalFormat nf = new DecimalFormat("0.00");// 格式化数字
     
    switch (cell.getCellType()) {
    case XSSFCell.CELL_TYPE_STRING:
    // System.out.println(i + "行" + j + " 列 is String type");
    value = cell.getStringCellValue();
    System.out.print("  " + value + "  ");
    break;
    case XSSFCell.CELL_TYPE_NUMERIC:
    // System.out.println(i + "行" + j
    // + " 列 is Number type ; DateFormt:"
    // + cell.getCellStyle().getDataFormatString());
    if ("@".equals(cell.getCellStyle().getDataFormatString())) {
    value = df.format(cell.getNumericCellValue());
     
    } else if ("General".equals(cell.getCellStyle()
    .getDataFormatString())) {
    value = nf.format(cell.getNumericCellValue());
    } else {
    value = sdf.format(HSSFDateUtil.getJavaDate(cell
    .getNumericCellValue()));
    }
    System.out.print("  " + value + "  ");
    break;
    case XSSFCell.CELL_TYPE_BOOLEAN:
    // System.out.println(i + "行" + j + " 列 is Boolean type");
    value = cell.getBooleanCellValue();
    System.out.print("  " + value + "  ");
    break;
    case XSSFCell.CELL_TYPE_BLANK:
    // System.out.println(i + "行" + j + " 列 is Blank type");
    value = "";
    // System.out.println(value);
    break;
    default:
    // System.out.println(i + "行" + j + " 列 is default type");
    value = cell.toString();
    System.out.print("  " + value + "  ");
    }
    if (value == null || "".equals(value)) {
    continue;
    }
    linked.add(value);
    }
    System.out.println("");
    list.add(linked);
    }
    return list;
    }
    }
     
  • 相关阅读:
    [翻译] C++ STL容器参考手册 (总册)
    仿淘宝TAB切换搜索框
    超简单TAB切换
    程序员和项目经理驰骋职场的故事
    eclispse 闪退问题解决
    Jennic 之API学习
    JN5139 DIO中断机制
    HTTP Error503 .The service is unavailable
    纯CSS3动画:一棵跳舞的树
    【学习笔记】python 简单创建新建一个网络客户端,并返回相关的信息
  • 原文地址:https://www.cnblogs.com/jym-sunshine/p/4912486.html
Copyright © 2011-2022 走看看