java 选择excel文件_JAVA怎么做点击按钮促发事件弹出浏览窗口选择excel文件读取,并显示到另外一个界面上,请给出主要代码...

展开全部

package com.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 javax.swing.JTextArea;

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;

/**

* 解析Excel的类

*/

public class ExcelOperate {

private JTextArea area;

private String fileName;

/**

* 构造方法传值

*

* @param area

* 显示Excel内容的位置

* @param fileName

* Excel文件名

*/

public ExcelOperate(JTextArea area, String fileName) {

32313133353236313431303231363533e59b9ee7ad9431333337386630this.area = area;

this.fileName = fileName;

}

/**

* 解析Excel文件

*/

public void parseExcel() {

File file = new File(fileName);

String[][] result = null;

try {

result = getData(file, 1);

} catch (IOException e) {

e.printStackTrace();

}

int rowLength = result.length;

for (int i = 0; i < rowLength; i++) {

for (int j = 0; j < result[i].length; j++) {

area.append(result[i][j] + "\t\t");

}

area.append("\n");

}

}

/**

* 读取Excel的内容,第一维数组存储的是一行中格列的值,二维数组存储的是多少个行

*

* @param file

* 读取数据的源Excel

* @param ignoreRows

* 读取数据忽略的行数,比喻行头不需要读入 忽略的行数为1

* @return 读出的Excel中数据的内容

* @throws FileNotFoundException

* @throws IOException

*/

public static String[][] getData(File file, int ignoreRows)

throws FileNotFoundException, IOException {

List result = new ArrayList();

int rowSize = 0;

BufferedInputStream in = new BufferedInputStream(new FileInputStream(

file));

// 打开HSSFWorkbook

POIFSFileSystem fs = new POIFSFileSystem(in);

HSSFWorkbook wb = new HSSFWorkbook(fs);

HSSFCell cell = null;

for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) {

HSSFSheet st = wb.getSheetAt(sheetIndex);

// 第一行为标题,不取

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);

}

}

}

in.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);

}

}

------------------------------------------------------------------------------------------

package com.excel;

import java.awt.BorderLayout;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFileChooser;

import javax.swing.JFrame;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import javax.swing.UIManager;

import javax.swing.filechooser.FileNameExtensionFilter;

/**

* 主界面,按钮响应事件,文本域输出Excel内容

*/

public class OpenExcel extends JFrame implements ActionListener {

private JButton button;

private JScrollPane pane;

private JTextArea area;

public OpenExcel() {

super("解析Excel");

button = new JButton("点我选择Excel文件");

button.addActionListener(this);

area = new JTextArea();

pane = new JScrollPane(area);

this.add(button, BorderLayout.NORTH);

this.add(pane);

this.setSize(300, 300);

this.setLocationRelativeTo(null);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

}

// 按钮事件

public void actionPerformed(ActionEvent e) {

JFileChooser chooser = new JFileChooser();// 文件选择对话框

chooser.setAcceptAllFileFilterUsed(false);// 取消所有文件过滤项

chooser.setFileFilter(new FileNameExtensionFilter("Excel文件", "xls"));// 设置只过滤扩展名为.xls的Excel文件

int i = chooser.showOpenDialog(this);// 打开窗口

if (i == JFileChooser.APPROVE_OPTION) {

this.setLocation(0, 0);

this.setSize(Toolkit.getDefaultToolkit().getScreenSize());

new ExcelOperate(area, chooser.getSelectedFile().getAbsolutePath())

.parseExcel();

}

}

public static void main(String[] args) throws Exception {

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

new OpenExcel();

}

}

更多追问追答

追问

69abebdec0e2352b31958d7a92ed5f48.png

请问这个地方报错应该怎么修改???

25eaed4a09c98eec4bd6cda50b1e87cc.png

追问

把这个下载之后应该解压到哪里然后怎么用???比较笨。。。麻烦你了。。。不好意思啊!

追答

图片所示,不懂再追问

e6b69dd05e2340c8d687ab3ed80c52cd.png

baf5ba6070cde9abbaac3193a86648ea.png

追问

69c9eec45fb1bcac23b5abc4c8c91fec.png

那个弄好了买这个又开始报错了。。。这个之前是没有问题的,不知道为什么忽然就显示了一堆错误!!!留个私信来联系吧???谢谢啦!!!

4054ec0226dcc44c75da67822d58ec8c.png

2Q==

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值