最近在做Java Swing的小项目练手,其中关于数据的采集和统计离不开Excel,目前所了解的可以通过jxl和poi两种jar包完成操作,目前只研究了jxl的常用用法,poi将会补充。
通过老师的代码以及网上各路大神的代码,加之使用FileChooser来进行确定选择文件和导出文件的路径,综合成了OutExcel.java和ImportExcel.java两个自己的常用工具类,特此总结!
jxl包下载地址:http://jexcelapi.sourceforge.net/
导出Excel需要的参数就两个,一个是标题的Object数组,一个是每个单元格数据的Object的二维数组,标题默认加粗,所有单元格字体居中,可根据需要修改。
调用时只需要 new OutExcel(标题数组,数据数组); 就可以了,目前应对简单的数据处理需求感觉十分方便。
OutExcel.java
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileNameExtensionFilter;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Colour;
import jxl.format.ScriptStyle;
import jxl.format.UnderlineStyle;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
/**
*
* @author 96151
*/
public class OutExcel {
public OutExcel(String[] title, String[][] context) {
File f = FileChooser();
if (f != null) {
try {
WritableWorkbook book = Workbook.createWorkbook(f);
WritableSheet sheet = book.createSheet("Sheet1", 0);
//创建字体,7个参数分别是字体名称,字号,是否粗体,是否斜体,下划线,颜色,上下标
WritableFont font = new WritableFont(WritableFont.ARIAL, 12, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK, ScriptStyle.NORMAL_SCRIPT);
WritableCellFormat format = new WritableCellFormat(font);
format.setAlignment(Alignment.CENTRE); //对齐方
WritableCellFormat format2 = new WritableCellFormat();
format2.setAlignment(Alignment.CENTRE);
for (int i = 0; i < title.length; i++) //title
{
sheet.setColumnView(i, 15);
sheet.addCell(new Label(i, 0, title[i], format));
}
for (int i = 0; i < context.length; i++) //context
{
for (int j = 0; j < context[i].length; j++) {
sheet.addCell(new Label(j, i + 1, context[i][j], format2));
}
}
book.write();
//关闭文件
book.close();
JOptionPane.showMessageDialog(null, "导出成功");
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, "导出失败");
}
}
}
private File FileChooser() {
JFileChooserDemo fc = new JFileChooserDemo("C:");
//是否可多选
fc.setMultiSelectionEnabled(false);
//选择模式,可选择文件和文件夹
//fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
//fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
//设置是否显示隐藏文件
fc.setFileHidingEnabled(true);
fc.setAcceptAllFileFilterUsed(false);
//设置文件筛选器
// fc.setFileFilter(new MyFilter("java"));
fc.setFileFilter(new FileNameExtensionFilter("Excel文件(*.xls)", "xls"));
int returnValue = fc.showSaveDialog(null);
if (returnValue == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
String ftype = file.getAbsolutePath().substring(file.getAbsolutePath().length() - 4);
if (!ftype.equals(".xls")) {
//如果用户没有填写扩展名,自动添加扩展名.xls
file = new File(file.getAbsolutePath() + ".xls");
}
return file;
}
return null;
}
}
class JFileChooserDemo extends javax.swing.JFileChooser {
public JFileChooserDemo(String currentDirectoryPath) {
super(currentDirectoryPath);
}
@Override
public void approveSelection() {
File file = new File(getSelectedFile() + ".xls");
if (file.exists()) {
JOptionPane.showMessageDialog(getParent(), "文件名已被占用");
return;
} else {
super.approveSelection();
}
}
}
导入表返回的也是单元格数据形成的二维Project数组,但是不严谨,因为目前默认只是要第一个工作表的数据,若是考虑多个工作表的数据,建议返回类型为List<? extends Project[][]>
ImportExcel.java
import java.io.File;
import java.io.IOException;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
/**
*
* @author 96151
*/
public class ImportExcel {
private Object[][] obj;
public ImportExcel() throws IOException, BiffException {
File excelFile = FileChooser();
Workbook workBook = Workbook.getWorkbook(excelFile);
// 得到工作簿所有的工作表对象
Sheet sheet = workBook.getSheet(0);//默认选择第一个表,可根据需求遍历所有表
// 遍历所有行
int rowsCount = sheet.getRows();
int columnsCount = sheet.getRow(0).length;
obj = new Object[rowsCount - 1][columnsCount];
for (int i = 1; i < sheet.getRows(); i++) {
// 得到所有列,在输出列中的内容
Cell[] cells = sheet.getRow(i);
for (int j = 0; j < cells.length; j++) {
obj[i - 1][j] = cells[j].getContents() + "";
}
}
workBook.close();
}
private File FileChooser() {
JFileChooserDemo fc = new JFileChooserDemo("C:");
//是否可多选
fc.setMultiSelectionEnabled(false);
//选择模式,可选择文件和文件夹
//fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
//fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
//设置是否显示隐藏文件
fc.setFileHidingEnabled(true);
fc.setAcceptAllFileFilterUsed(false);
//设置文件筛选器
// fc.setFileFilter(new MyFilter("java"));
fc.setFileFilter(new FileNameExtensionFilter("Excel文件(*.xls)", "xls"));
int returnValue = fc.showOpenDialog(null);
if (returnValue == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
file = new File(file.getAbsolutePath());
return file;
}
return null;
}
/**
* @return the obj
*/
public Object[][] getObj() {
return obj;
}
}
本文介绍了在Java Swing项目中如何使用jxl库进行Excel文件的导入与导出。作者分享了自己编写的OutExcel和ImportExcel工具类,它们简化了Excel操作流程。OutExcel类用于导出Excel,只需提供标题和数据即可;ImportExcel则用于导入,返回第一个工作表的数据。文章提供了jxl包的下载链接,并指出对于多工作表数据的处理,需要进一步改进ImportExcel的返回类型。
1379

被折叠的 条评论
为什么被折叠?



