最近有一个需求,java程序接入excel文件,并读取其中内容,先将调查过程记录如下。
```java
package learning01;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.Jframe;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
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 java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.ss.usermodel.CellType;
public class CountUserServer extends Jframe {
private JButton btn;
private JPanel contentPane; // 内容面板
private JTextField textField; // 文本框
public CountUserServer() {
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);
contentPane.add(panel1, BorderLayout.NORTH); // 将面板放置在边界布局的北部
textField = new JTextField(); // 新建文本框
panel1.add(textField); // 将文本框增加到面板中
textField.setPreferredSize(new Dimension(400, 40));
final JButton btn = new JButton("选择文件");
btn.setPreferredSize(new Dimension(100, 40));
panel1.add(btn);
btn.setBackground(Color.GREEN);
JPanel panel2 = new JPanel(); // 新建面板用于保存按钮
contentPane.add(panel2, BorderLayout.CENTER); // 将面板放置在边界布局的中央
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);
}
}
});
okBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String filepath = textField.getText();
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);
} catch (Exception e1) {
e1.printStackTrace();
}
}
});
}
public void openFile(String filepath) throws IOException {
FileInputStream fileInputStream = new FileInputStream(new File(filepath));
XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream);
XSSFSheet sheet = workbook.getSheetAt(0);
System.out.println(sheet.getLastRowNum());
queryRows(workbook,"平静");
}
public static boolean isRowEmpty(Row row){
for (int i = row.getFirstCellNum(); i < row.getLastCellNum(); i++) {
Cell cell = row.getCell(i);
if (cell != null && cell.getCellType() != CellType.BLANK){
return false;
}else {
break;
}
}
return true;
}
public java.util.List queryRows(XSSFWorkbook workbook, String keys){
List list=new ArrayList<>();
XSSFSheet sheet = workbook.getSheetAt(0);
for(int i=2;i<=sheet.getLastRowNum();i++){
System.out.print(sheet.getRow(i).getCell(0).getStringCellValue()+",");
System.out.print(sheet.getRow(i).getCell(1).getStringCellValue()+",");
System.out.print(sheet.getRow(i).getCell(2).getStringCellValue()+",");
System.out.println(sheet.getRow(i).getCell(3).getStringCellValue());
if(sheet.getRow(i).getCell(0).getStringCellValue().contains(keys)){
list.add(sheet.getRow(i));
}
}
return list;
}
public static void main(String[] args) {
new CountUserServer();
}
}



