📦 归档笔记 — 原创建于 WizNote,仅作归档展示;观点以当年为准,非最新。

demo

创建时间2019-04-06最后修改2019-04-18原位置/程序员成长之旅/Java学习/源码/字数2665
目录:程序员成长之旅/Java学习/源码
    package cn.study.excel;


import jdk.nashorn.internal.runtime.regexp.joni.exception.ValueException;
import org.apache.poi.hssf.usermodel.HSSFCell;
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.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import javax.annotation.processing.FilerException;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;

public class ExcelIOTest_2 {
    public static void main(String[] args) {
        JFrame jFrame = new Study();
    }

}

class Study extends JFrame implements ActionListener {
    Study() {
        setVisible(true);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(500, 300);
        setTitle("测试ExcelIO程序");
        Container container = getContentPane();
        JButton start = new JButton("启动!");
        container.add(start, BorderLayout.SOUTH);
        start.addActionListener(this);

        JButton read = new JButton("读取!");
        container.add(read, BorderLayout.NORTH);
        read.addActionListener(this);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        File file = new File("F://TestExcelIO//sushe11.xlsx");
        switch (e.getActionCommand()) {
            case "启动!":
                System.out.println("启动按钮按下!");
                ExcelOutput excelOutput = new ExcelOutput(file);
                break;
            case "读取!":
                System.out.println("读取按钮被按下!");
                ExcelInput excelInput = new ExcelInput(file);
        }
    }
}

class ExcelOutput {
    ExcelOutput(File file) {
        int Row, Component;
        System.out.println("================成功调用ExcelOutput类!================");
        HSSFWorkbook newWorkbook = new HSSFWorkbook();
        HSSFSheet newSheet = newWorkbook.createSheet();
        HSSFRow newRow = newSheet.createRow(Row = (Integer.valueOf(JOptionPane.showInputDialog(null, "Row"))));
        HSSFCell newCell = newRow.createCell(Component = (Integer.valueOf(JOptionPane.showInputDialog(null, "Cell"))));
        newCell.setCellValue("R:" + Row + "  C:" + Component);
        System.out.println(newCell.getStringCellValue());
        JOptionPane.showMessageDialog(null, "Row: " + newCell.getRowIndex() + "\nColumn: " + newCell.getColumnIndex());
        try {//写入文件
//            File file = new File("F://TestExcelIO//MyFirstExcel.xls");
            if (file.exists()) {//如果已存在则询问是否覆盖
                if (ExcelTool.really("覆盖" + file)) {
                    file.delete();
                    file.createNewFile();
                }
            } else {
                file.createNewFile();
            }
            OutputStream newfile = new FileOutputStream(file);
            newWorkbook.write(newfile);

            newWorkbook.close();
            newfile.close();

        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

}

class ExcelInput {
    ExcelInput(File file) {
        System.out.println("================方法ExcelInput调用成功!================");

        WorkbookTool workbookTool = new WorkbookTool();
        ExcelCellInputStream inputStream = new ExcelCellInputStream(workbookTool.getWorkbook(file));
        try {

            String date[][]=inputStream.readStringLine(1, 3, 11, 17, 11);
            for (int i=0;i< date.length;i++){
                for (int j =0;j<date[i].length;j++){
                    System.out.print(date[i][j]+"\t\t");
                }
                System.out.println();
            }


        } catch (Exception e) {
            System.out.println("在ExcelInput["+e.getClass()+"]捕捉到错误:" + e.getCause() + e.getMessage());
        }
        finally{
            workbookTool.close();
        }
    }

}

class ExcelCellInputStream{
    Workbook workbook;
    Sheet sheet;
    Row row;
    Cell cell;
    int numberOfSheets;
    int numberOfRow;
    int numberOfCell;
    int sheetIndex,rowIndex,columnIndex;
    ExcelCellInputStream(Workbook workbook){
        this.workbook=workbook;
        numberOfSheets = workbook.getNumberOfSheets();
    }

    String readString(int sheetIndex,int rowIndex,int columnIndex){
        this.sheetIndex=sheetIndex;this.rowIndex=rowIndex;this.columnIndex=columnIndex;
        try {
//            System.out.println("numberOfSheets = " + numberOfSheets);//排错
            if (sheetIndex<0||sheetIndex>numberOfSheets){
                throw new ValueException("未找到您想要找的sheet编号:["+sheetIndex+"]");
            }
            sheet = workbook.getSheetAt(sheetIndex-1);
            numberOfRow = sheet.getLastRowNum()+1;//修复了错误报到达Row边界的问题 这里不知道怎么回事但是返回的数组确实比真实的行数少了一行
//            System.out.println("numberOfRow = " + numberOfRow);//排错
            if (rowIndex<0||rowIndex>numberOfRow){
                throw new ValueException("未找到您想要找的row编号:["+rowIndex+"]");
            }
            row = sheet.getRow(rowIndex-1);
            numberOfCell = row.getLastCellNum();
//            System.out.println(numberOfCell);//排错
            if (columnIndex<0||columnIndex>numberOfCell){
                throw new ValueException("未找到您想要找的column编号:["+columnIndex+"]");
            }
            cell = row.getCell(columnIndex-1);
            cell.setCellType(CellType.STRING);

            return cell.getStringCellValue();
        }
        catch (Exception e){
            System.out.println("在read方法内发生错误:["+e.getClass()+e.getCause()+e.getMessage()+"]");
            return null;
        }

    }
    double readNumber(int sheetIndex,int rowIndex,int columnIndex){
        this.sheetIndex=sheetIndex;this.rowIndex=rowIndex;this.columnIndex=columnIndex;
        try {
            if (sheetIndex<0||sheetIndex>numberOfSheets){
                throw new ValueException("未找到您想要找的sheet编号:["+sheetIndex+"]");
            }
            sheet = workbook.getSheetAt(sheetIndex-1);
            numberOfRow = sheet.getLastRowNum();
            if (rowIndex<0||rowIndex>numberOfRow){
                throw new ValueException("未找到您想要找的row编号:["+rowIndex+"]");
            }
            row = sheet.getRow(rowIndex-1);
            numberOfCell = row.getLastCellNum();
            if (columnIndex<0||columnIndex>numberOfCell){
                throw new ValueException("未找到您想要找的column编号:["+columnIndex+"]");
            }
            cell = row.getCell(columnIndex-1);
            cell.setCellType(CellType.NUMERIC);

            return cell.getNumericCellValue();
        }
        catch (Exception e){
            System.out.println("在read方法内发生错误:["+e.getClass()+e.getCause()+e.getMessage()+"]");
            return Integer.MIN_VALUE;
        }

    }



    String[][][] readStringLine(int startSheetIndex,int endSheetIndex,int startRow,int startColumn,int endRow,int endColumn){
        String[][][] data= new String[endSheetIndex-startSheetIndex+1][endRow-startRow+1][endColumn-startColumn+1];
        for (int i=0;i<endSheetIndex-startSheetIndex+1;i++){
            for (int j=0;j<endRow-startRow+1;j++){
                for (int k=0;k<endColumn-startColumn+1;k++){
                    data[i][j][k] = readString(startSheetIndex+i,startRow+j, startColumn+k);
                }
            }
        }
        return data;
    }
    String[][] readStringLine(int sheetIndex,int startRow,int startColumn,int endRow,int endColumn){
        String[][][] data= readStringLine(sheetIndex,sheetIndex,startRow,startColumn,endRow,endColumn);
        String[][] cleanData = data[0];
        return cleanData;
    }
}
class ExcelCellOutputStream{
    Workbook workbook;
    Sheet sheet;
    Row row;
    Cell cell;
    int numberOfSheets;
    int numberOfRow;
    int numberOfCell;
    int sheetIndex,rowIndex,columnIndex;

    ExcelCellOutputStream(Workbook workbook){
        this.workbook=workbook;
        numberOfSheets = workbook.getNumberOfSheets();
    }

    boolean writeString(String string,int sheetIndex,int rowIndex,int columnIndex){
        this.sheetIndex=sheetIndex;this.rowIndex=rowIndex;this.columnIndex=columnIndex;
        try {
            if (sheetIndex<0||sheetIndex>numberOfSheets){
                throw new ValueException("未找到您想要找的sheet编号:["+sheetIndex+"]");
            }
            sheet = workbook.getSheetAt(sheetIndex-1);
            numberOfRow = sheet.getLastRowNum();
            if (rowIndex<0){
                throw new ValueException("您输入的row编号为:["+rowIndex+"],"+"错误,应>0!");
            }
            row = sheet.getRow(rowIndex-1);
            numberOfCell = row.getLastCellNum();
            if (columnIndex<0){
                throw new ValueException("您输入的column编号为:["+columnIndex+"],"+"错误,应>0!");
            }
            cell = row.getCell(columnIndex-1);
            cell.setCellType(CellType.STRING);
            cell.setCellValue(string);

            return true;
        }
        catch (Exception e){
            System.out.println("在read方法内发生错误:["+e.getClass()+e.getCause()+e.getMessage()+"]");
            return false;
        }

    }
    boolean writeNumber(double doubleValue,int sheetIndex,int rowIndex,int columnIndex){
        this.sheetIndex=sheetIndex;this.rowIndex=rowIndex;this.columnIndex=columnIndex;
        try {
            if (sheetIndex<0||sheetIndex>numberOfSheets){
                throw new ValueException("未找到您想要找的sheet编号:["+sheetIndex+"]");
            }
            sheet = workbook.getSheetAt(sheetIndex-1);
            numberOfRow = sheet.getLastRowNum();
            if (rowIndex<0){
                throw new ValueException("您输入的row编号为:["+rowIndex+"],"+"错误,应>0!");
            }
            row = sheet.getRow(rowIndex-1);
            numberOfCell = row.getLastCellNum();
            if (columnIndex<0){
                throw new ValueException("您输入的column编号为:["+columnIndex+"],"+"错误,应>0!");
            }
            cell = row.getCell(columnIndex-1);
            cell.setCellType(CellType.NUMERIC);
            cell.setCellValue(doubleValue);

            return true;
        }
        catch (Exception e){
            System.out.println("在read方法内发生错误:["+e.getClass()+e.getCause()+e.getMessage()+"]");
            return false;
        }

    }


}

class WorkbookTool {
    private Workbook workbook;
    private InputStream in;
    Workbook getWorkbook(File file){
        try {
            if (!file.exists()) {
                JOptionPane.showMessageDialog(null, "文件" + file.getName() + "不存在!");
                throw new FileNotFoundException("文件" + file.getName() + "不存在!");
            }
            else if(!file.isFile()){
                JOptionPane.showMessageDialog(null, file.getName()+"不是文件!");
                throw new FilerException(file.getName()+"不是文件!");
            }
            in  = new FileInputStream(file);
            String fileName = file.getName();
            String nameLast = fileName.substring(fileName.lastIndexOf("."));
            if (nameLast.equals(".xls")){
                workbook = new HSSFWorkbook(in);
                return workbook;
            }
            else if (nameLast.equals(".xlsx")){
                workbook = new XSSFWorkbook(in);
                return workbook;
            }
            else {
                System.out.println("获取workbook时发生错误,未知的扩展名");
                return null;
            }
        }
        catch (FilerException e){
            System.out.println("获取文件流是发生错误:"+e.getClass()+e.getCause()+e.getMessage());
        }
        catch (Exception e){
            System.out.println("在GetWorkbook中捕获到其他错误:"+e.getClass()+e.getCause()+e.getMessage());
        }
        return null;
    }

    void close(){
        try {
            workbook.close();
            in.close();
        }
        catch (Exception e){
            System.out.println("关闭流时发生错误:"+e.getClass()+e.getCause()+e.getMessage());
        }
    }
}package cn.study.excel;


import jdk.nashorn.internal.runtime.regexp.joni.exception.ValueException;
import org.apache.poi.hssf.usermodel.HSSFCell;
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.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import javax.annotation.processing.FilerException;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;

public class ExcelIOTest_2 {
    public static void main(String[] args) {
        JFrame jFrame = new Study();
    }

}

class Study extends JFrame implements ActionListener {
    Study() {
        setVisible(true);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(500, 300);
        setTitle("测试ExcelIO程序");
        Container container = getContentPane();
        JButton start = new JButton("启动!");
        container.add(start, BorderLayout.SOUTH);
        start.addActionListener(this);

        JButton read = new JButton("读取!");
        container.add(read, BorderLayout.NORTH);
        read.addActionListener(this);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        File file = new File("F://TestExcelIO//sushe11.xlsx");
        switch (e.getActionCommand()) {
            case "启动!":
                System.out.println("启动按钮按下!");
                ExcelOutput excelOutput = new ExcelOutput(file);
                break;
            case "读取!":
                System.out.println("读取按钮被按下!");
                ExcelInput excelInput = new ExcelInput(file);
        }
    }
}

class ExcelOutput {
    ExcelOutput(File file) {
        int Row, Component;
        System.out.println("================成功调用ExcelOutput类!================");
        HSSFWorkbook newWorkbook = new HSSFWorkbook();
        HSSFSheet newSheet = newWorkbook.createSheet();
        HSSFRow newRow = newSheet.createRow(Row = (Integer.valueOf(JOptionPane.showInputDialog(null, "Row"))));
        HSSFCell newCell = newRow.createCell(Component = (Integer.valueOf(JOptionPane.showInputDialog(null, "Cell"))));
        newCell.setCellValue("R:" + Row + "  C:" + Component);
        System.out.println(newCell.getStringCellValue());
        JOptionPane.showMessageDialog(null, "Row: " + newCell.getRowIndex() + "\nColumn: " + newCell.getColumnIndex());
        try {//写入文件
//            File file = new File("F://TestExcelIO//MyFirstExcel.xls");
            if (file.exists()) {//如果已存在则询问是否覆盖
                if (ExcelTool.really("覆盖" + file)) {
                    file.delete();
                    file.createNewFile();
                }
            } else {
                file.createNewFile();
            }
            OutputStream newfile = new FileOutputStream(file);
            newWorkbook.write(newfile);

            newWorkbook.close();
            newfile.close();

        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

}

class ExcelInput {
    ExcelInput(File file) {
        System.out.println("================方法ExcelInput调用成功!================");

        WorkbookTool workbookTool = new WorkbookTool();
        ExcelCellInputStream inputStream = new ExcelCellInputStream(workbookTool.getWorkbook(file));
        try {

            String date[][]=inputStream.readStringLine(1, 3, 11, 17, 11);
            for (int i=0;i< date.length;i++){
                for (int j =0;j<date[i].length;j++){
                    System.out.print(date[i][j]+"\t\t");
                }
                System.out.println();
            }


        } catch (Exception e) {
            System.out.println("在ExcelInput["+e.getClass()+"]捕捉到错误:" + e.getCause() + e.getMessage());
        }
        finally{
            workbookTool.close();
        }
    }

}

class ExcelCellInputStream{
    Workbook workbook;
    Sheet sheet;
    Row row;
    Cell cell;
    int numberOfSheets;
    int numberOfRow;
    int numberOfCell;
    int sheetIndex,rowIndex,columnIndex;
    ExcelCellInputStream(Workbook workbook){
        this.workbook=workbook;
        numberOfSheets = workbook.getNumberOfSheets();
    }

    String readString(int sheetIndex,int rowIndex,int columnIndex){
        this.sheetIndex=sheetIndex;this.rowIndex=rowIndex;this.columnIndex=columnIndex;
        try {
//            System.out.println("numberOfSheets = " + numberOfSheets);//排错
            if (sheetIndex<0||sheetIndex>numberOfSheets){
                throw new ValueException("未找到您想要找的sheet编号:["+sheetIndex+"]");
            }
            sheet = workbook.getSheetAt(sheetIndex-1);
            numberOfRow = sheet.getLastRowNum()+1;//修复了错误报到达Row边界的问题 这里不知道怎么回事但是返回的数组确实比真实的行数少了一行
//            System.out.println("numberOfRow = " + numberOfRow);//排错
            if (rowIndex<0||rowIndex>numberOfRow){
                throw new ValueException("未找到您想要找的row编号:["+rowIndex+"]");
            }
            row = sheet.getRow(rowIndex-1);
            numberOfCell = row.getLastCellNum();
//            System.out.println(numberOfCell);//排错
            if (columnIndex<0||columnIndex>numberOfCell){
                throw new ValueException("未找到您想要找的column编号:["+columnIndex+"]");
            }
            cell = row.getCell(columnIndex-1);
            cell.setCellType(CellType.STRING);

            return cell.getStringCellValue();
        }
        catch (Exception e){
            System.out.println("在read方法内发生错误:["+e.getClass()+e.getCause()+e.getMessage()+"]");
            return null;
        }

    }
    double readNumber(int sheetIndex,int rowIndex,int columnIndex){
        this.sheetIndex=sheetIndex;this.rowIndex=rowIndex;this.columnIndex=columnIndex;
        try {
            if (sheetIndex<0||sheetIndex>numberOfSheets){
                throw new ValueException("未找到您想要找的sheet编号:["+sheetIndex+"]");
            }
            sheet = workbook.getSheetAt(sheetIndex-1);
            numberOfRow = sheet.getLastRowNum();
            if (rowIndex<0||rowIndex>numberOfRow){
                throw new ValueException("未找到您想要找的row编号:["+rowIndex+"]");
            }
            row = sheet.getRow(rowIndex-1);
            numberOfCell = row.getLastCellNum();
            if (columnIndex<0||columnIndex>numberOfCell){
                throw new ValueException("未找到您想要找的column编号:["+columnIndex+"]");
            }
            cell = row.getCell(columnIndex-1);
            cell.setCellType(CellType.NUMERIC);

            return cell.getNumericCellValue();
        }
        catch (Exception e){
            System.out.println("在read方法内发生错误:["+e.getClass()+e.getCause()+e.getMessage()+"]");
            return Integer.MIN_VALUE;
        }

    }



    String[][][] readStringLine(int startSheetIndex,int endSheetIndex,int startRow,int startColumn,int endRow,int endColumn){
        String[][][] data= new String[endSheetIndex-startSheetIndex+1][endRow-startRow+1][endColumn-startColumn+1];
        for (int i=0;i<endSheetIndex-startSheetIndex+1;i++){
            for (int j=0;j<endRow-startRow+1;j++){
                for (int k=0;k<endColumn-startColumn+1;k++){
                    data[i][j][k] = readString(startSheetIndex+i,startRow+j, startColumn+k);
                }
            }
        }
        return data;
    }
    String[][] readStringLine(int sheetIndex,int startRow,int startColumn,int endRow,int endColumn){
        String[][][] data= readStringLine(sheetIndex,sheetIndex,startRow,startColumn,endRow,endColumn);
        String[][] cleanData = data[0];
        return cleanData;
    }
}
class ExcelCellOutputStream{
    Workbook workbook;
    Sheet sheet;
    Row row;
    Cell cell;
    int numberOfSheets;
    int numberOfRow;
    int numberOfCell;
    int sheetIndex,rowIndex,columnIndex;

    ExcelCellOutputStream(Workbook workbook){
        this.workbook=workbook;
        numberOfSheets = workbook.getNumberOfSheets();
    }

    boolean writeString(String string,int sheetIndex,int rowIndex,int columnIndex){
        this.sheetIndex=sheetIndex;this.rowIndex=rowIndex;this.columnIndex=columnIndex;
        try {
            if (sheetIndex<0||sheetIndex>numberOfSheets){
                throw new ValueException("未找到您想要找的sheet编号:["+sheetIndex+"]");
            }
            sheet = workbook.getSheetAt(sheetIndex-1);
            numberOfRow = sheet.getLastRowNum();
            if (rowIndex<0){
                throw new ValueException("您输入的row编号为:["+rowIndex+"],"+"错误,应>0!");
            }
            row = sheet.getRow(rowIndex-1);
            numberOfCell = row.getLastCellNum();
            if (columnIndex<0){
                throw new ValueException("您输入的column编号为:["+columnIndex+"],"+"错误,应>0!");
            }
            cell = row.getCell(columnIndex-1);
            cell.setCellType(CellType.STRING);
            cell.setCellValue(string);

            return true;
        }
        catch (Exception e){
            System.out.println("在read方法内发生错误:["+e.getClass()+e.getCause()+e.getMessage()+"]");
            return false;
        }

    }
    boolean writeNumber(double doubleValue,int sheetIndex,int rowIndex,int columnIndex){
        this.sheetIndex=sheetIndex;this.rowIndex=rowIndex;this.columnIndex=columnIndex;
        try {
            if (sheetIndex<0||sheetIndex>numberOfSheets){
                throw new ValueException("未找到您想要找的sheet编号:["+sheetIndex+"]");
            }
            sheet = workbook.getSheetAt(sheetIndex-1);
            numberOfRow = sheet.getLastRowNum();
            if (rowIndex<0){
                throw new ValueException("您输入的row编号为:["+rowIndex+"],"+"错误,应>0!");
            }
            row = sheet.getRow(rowIndex-1);
            numberOfCell = row.getLastCellNum();
            if (columnIndex<0){
                throw new ValueException("您输入的column编号为:["+columnIndex+"],"+"错误,应>0!");
            }
            cell = row.getCell(columnIndex-1);
            cell.setCellType(CellType.NUMERIC);
            cell.setCellValue(doubleValue);

            return true;
        }
        catch (Exception e){
            System.out.println("在read方法内发生错误:["+e.getClass()+e.getCause()+e.getMessage()+"]");
            return false;
        }

    }


}

class WorkbookTool {
    private Workbook workbook;
    private InputStream in;
    Workbook getWorkbook(File file){
        try {
            if (!file.exists()) {
                JOptionPane.showMessageDialog(null, "文件" + file.getName() + "不存在!");
                throw new FileNotFoundException("文件" + file.getName() + "不存在!");
            }
            else if(!file.isFile()){
                JOptionPane.showMessageDialog(null, file.getName()+"不是文件!");
                throw new FilerException(file.getName()+"不是文件!");
            }
            in  = new FileInputStream(file);
            String fileName = file.getName();
            String nameLast = fileName.substring(fileName.lastIndexOf("."));
            if (nameLast.equals(".xls")){
                workbook = new HSSFWorkbook(in);
                return workbook;
            }
            else if (nameLast.equals(".xlsx")){
                workbook = new XSSFWorkbook(in);
                return workbook;
            }
            else {
                System.out.println("获取workbook时发生错误,未知的扩展名");
                return null;
            }
        }
        catch (FilerException e){
            System.out.println("获取文件流是发生错误:"+e.getClass()+e.getCause()+e.getMessage());
        }
        catch (Exception e){
            System.out.println("在GetWorkbook中捕获到其他错误:"+e.getClass()+e.getCause()+e.getMessage());
        }
        return null;
    }

    void close(){
        try {
            workbook.close();
            in.close();
        }
        catch (Exception e){
            System.out.println("关闭流时发生错误:"+e.getClass()+e.getCause()+e.getMessage());
        }
    }
}