Swing实现Excel文件的处理

代码前景:实现一个可以读取Excel文件的小功能,并能通过数据去计算和值(类似功能)

在这里插入图片描述

/**
 * @author 熊
 * #Description Main
 * #Date: 2021/8/16 09:11
 */

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
public class Main extends JFrame {

    private JButton btn;
    private JPanel contentPane;    //内容面板
    private JTextField textField;    //文本框
    private FileOutputStream out = null;
    private JTextField retrunTextField;    //文本框

    public Main(){
        setTitle("选择文件");    //设置窗体的标题
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    //设置窗体退出时操作
        setBounds(100, 100, 800, 400);    //设置窗体位置和大小
        contentPane=new JPanel();    //创建内容面板
        contentPane.setBorder(new EmptyBorder(100,5,5,5));    //设置面板的边框
        contentPane.setLayout(new BorderLayout(0,0));    //设置内容面板为边界布局
        setContentPane(contentPane);    //应用内容面板
        JPanel panel1=new JPanel();    //新建面板用于保存文本框
        panel1.setBounds(5,100,800,100);

        JPanel panel3=new JPanel();    //新建面板用于保存文本框
        panel3.setBounds(5,100,800,100);
        contentPane.add(panel3, BorderLayout.CENTER);    //将面板放置在边界布局的中央

        contentPane.add(panel1,BorderLayout.NORTH);    //将面板放置在边界布局的北部
        textField=new JTextField();    //新建文本框
        panel1.add(textField);    //将文本框增加到面板中
        textField.setPreferredSize(new Dimension (400,40));


        retrunTextField=new JTextField();    //新建返回文本框
        panel3.add(retrunTextField);    //将文本框增加到面板中
        retrunTextField.setPreferredSize(new Dimension (400,40));

        final JButton btn=new JButton("选择文件");
        btn.setPreferredSize(new Dimension (100,40));
        panel1.add(btn);
        btn.setBackground(Color.GREEN);

        final JButton btn2=new JButton("选择目录");
        btn2.setPreferredSize(new Dimension (100,40));
        panel3.add(btn2);
        btn2.setBackground(Color.GREEN);

        JPanel panel2=new JPanel();    //新建面板用于保存按钮
        contentPane.add(panel2, BorderLayout.SOUTH);    //将面板放置在边界布局的中央
        JButton okBtn=new JButton("确定");

        okBtn.setPreferredSize(new Dimension(100,40));
        panel2.add(okBtn);

        setVisible(true);
        btn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                //按钮点击事件
                JFileChooser chooser = new JFileChooser();             //设置选择器
                chooser.setMultiSelectionEnabled(true);             //设为多选
                int returnVal = chooser.showOpenDialog(btn);        //是否打开文件选择框
                System.out.println("returnVal="+returnVal);

                if (returnVal == JFileChooser.APPROVE_OPTION) {          //如果符合文件类型

                    String filepath = chooser.getSelectedFile().getAbsolutePath();      //获取绝对路径
                    System.out.println(filepath);
                    textField.setText(filepath);
                }
            }
        });


        //选择目录
        btn2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JFileChooser jfc = new JFileChooser();
                jfc.setDialogTitle("请选择要导出目录");
                jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
                int result = jfc.showOpenDialog(null);
                File file = null;
                if(JFileChooser.APPROVE_OPTION == result) {
                    file = jfc.getSelectedFile();
                    if (!file.isDirectory()) {
                        JOptionPane.showMessageDialog(null, "你选择的目录不存在");
                        return;
                    }
                    String path = file.getAbsolutePath();
                    System.out.println(path);
                    retrunTextField.setText(path);
                }
            }
        });


        /* 确定点击 */
        okBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String filepath=textField.getText();
                String returnFilepath=retrunTextField.getText()+"\\"+LocalDate.now()+".xlsx";
                if("".equals(filepath)||filepath==null){
                    JOptionPane.showMessageDialog(getContentPane(), "请先选择文件~",
                            "警告", JOptionPane.WARNING_MESSAGE);
                    return;
                }

                String suffix=filepath.substring(filepath.lastIndexOf(".")+1);
                System.out.println(suffix);
                if(!(suffix.equals("xlsx")||(suffix.equals("xls")))){
                    JOptionPane.showMessageDialog(getContentPane(), "请选择Excel文件~",
                            "警告", JOptionPane.WARNING_MESSAGE);
                    return;
                }

                /* 打开文件 */
                try {
                    openFile(filepath,returnFilepath);
                } catch (Exception e1) {
                    e1.printStackTrace();
                }


            }

        });


    }

    public static String getFilePath() {
        JFileChooser jf = new JFileChooser();
        jf.setVisible(true);
        jf.setDialogTitle("选择文件");
        int result = jf.showOpenDialog(null);
        if (result == JFileChooser.CANCEL_OPTION) {
            return "没有选择文件";
        } else {
            String path = jf.getSelectedFile().getAbsolutePath();
            return path;
        }
    }
 
    /* 打开对应的Excel文件 */
    public void openFile(String filePath,String returnFilePath) throws IOException {
        File file = new File((filePath));
        File returnFile = new File(returnFilePath);
        // 创建输入流
        FileInputStream fileInputStream = new FileInputStream(file);

        System.out.println(filePath);
        System.out.println(returnFilePath);
        // 读取文件
        XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream);

        // 创建输出流,后面复制一份到另一个文件夹
        FileOutputStream fileOutputStream = new FileOutputStream(returnFile);
        queryRows(workbook,fileOutputStream);
    }

    /* 检索需要信息 */

    public static java.util.List<Row> queryRows(XSSFWorkbook workbook,FileOutputStream out){

        List<Row> list=new ArrayList<>();
        XSSFSheet sheet = workbook.getSheetAt(0);

        for(int i=0;i<=sheet.getLastRowNum();i++){
            Cell cell = sheet.getRow(i).createCell(1);
            //  把当前文件类每第二行加此字段
            cell.setCellValue("zzzzz");
        }

        try {
            if (out != null) {
                out.flush();
            }

            if (workbook != null) {
                workbook.write(out);
            }

            if (out != null) {
                out.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;

    }


    public static void main(String[] args) {
        new Main();
    }

}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值