版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36798272/article/details/89678906
已具备条件:整体已搭建完毕,仅差代码部分
1.UI已经建好,包含KDTable等控件
2.与该KDTable对应的实体类,作为接收数据的载体
3.KDTable已经建立好表头表列信息,一般与实体类属性对应
4.一张Excel表格,实体类的属性一般也会与表格内容对应
功能描述:
点击按钮→弹出选择框,从本地选择Excel文件→在KDTable上显示Excel内容
具体实现:
public void importdata_actionPerformed(ActionEvent e) throws Exception
{
//创建文件选择器对象
JFileChooser file = new JFileChooser();
//创建文件名过滤器对象,只显示xls,xlsx格式文件
FileNameExtensionFilter filter = new FileNameExtensionFilter("Excel文件",
"xls", "xlsx");
//从可用文件过滤器的列表中移除 AcceptAll文件过滤器
file.setAcceptAllFileFilterUsed(false);
//将filter设置为文件过滤器
file.setFileFilter(filter);
//弹出Open File对话框如果选择的不是确认则直接终止
if (file.showOpenDialog(this) != JFileChooser.APPROVE_OPTION)
return;
//获得用户选择的文件的路径
this.fileName = file.getSelectedFile().getPath();
//长时间对话框对象
LongTimeDialog dialog = new LongTimeDialog((Frame) SwingUtilities
.getWindowAncestor(this));
//为长时间对话框对象设置长时间任务,直接创建ILongTimeTask的局部内部类
dialog.setLongTimeTask(new ILongTimeTask() {
@Override
public Object exec() throws Exception {
try {
//创建KDSBook的引用
KDSBook book = null;
//根据ImpCashDetailUI的对象获得文件名
String fileName = ImpCashDetailUI.this.fileName;
//如果选择的这个文件的后缀是xls,则利用POIXlsReader解析这个文件
if (ImpCashDetailUI.this.fileName.toLowerCase().endsWith(
"xls"))
book = POIXlsReader.parse(fileName);
else if (fileName.toLowerCase().endsWith("xlsx")) //后缀为xlsx同上
book = POIXlsxReader.parse(fileName);
else { //不符合EXCEL文件格式显示提示
return "不支持的文件格式。";
}
//如果book没有被赋上解析文件后产生的对象
if (book == null) {
return "不支持的文件格式。";
}
//清除目前的记录(防止再次读取文件时叠加)
kdtCash.removeRows();
//========================导入start===========================
//利用解析后的book对象获得sheet对象(这里为0则是第一个sheet)
KDSSheet sheet = book.getSheet(new Integer(0));
//创建ImpCashDetailCollection对象(根据实体自动生成)
ImpCashDetailCollection impCashDetailCollection = new ImpCashDetailCollection();
//循环工作表取出数据
for (int i = 2; i < sheet.getRowCount(); i++) {
//创建ImpCashDetailInfo对象
ImpCashDetailInfo cashinfo=new ImpCashDetailInfo();
//公司名称(自有属性)
String companyName=sheet.getCell(i,0,true).getText();
//银行名称(自有属性)
String bankName=sheet.getCell(i,1,true).getText();
//当前工作表中公司和银行的名称都为空则判定为已经没有值了,结束从工作表读取数据
if("".equals(companyName)&&"".equals(bankName)){
break;
}
//账户(连接属性)
String bankNumber=sheet.getCell(i,2,true).getText();
if(bankNumber==null||bankNumber.length()<1){
return "导入失败,存款工作表第"+(i+1)+"行账户不得为空";
}
bankNumber=bankNumber.replaceAll(" ", ""); //去除账户中的空格
AccountBankCollection accountBankColl=AccountBankFactory.getRemoteInstance().getAccountBankCollection(
"select *,company.* where bankAccountNumber = '" + bankNumber + "'"); //根据账户可查到对应的银行名与公司名
if(accountBankColl!=null &&accountBankColl.size()>0)
{
//为cashinfo赋上银行名,账户,公司名
cashinfo.setBanknumber(bankNumber);
cashinfo.setBankaccountid(accountBankColl.get(0));
cashinfo.setCompanyid(accountBankColl.get(0).getCompany());
}else{
return "导入失败,存款工作表第"+(i+1)+"行账户查询不到";
}
//日期(自有属性)
String dateStr=sheet.getCell(i, 3, true).getText();
if(dateStr==null||dateStr.length()<1){
return "导入失败,存款工作表第"+(i+1)+"行日期不得为空";
}
//对日期的字符串处理
String[] split = dateStr.split("=");
String[] split2 = split[1].split(",");
Date bizdate=new Date(Long.parseLong(split2[0]));
cashinfo.setBizdate(bizdate);
//导入对应的容器对象中
impCashDetailCollection.add(cashinfo);
}
//========================导入end============================
//========================回显start==========================
//将查询到的数据存入map中
HashMap<Integer,ImpCashDetailInfo> map = new HashMap<Integer,ImpCashDetailInfo>();
for(int i=0;i< impCashDetailCollection.size();i++){
map.put(i, impCashDetailCollection.get(i));
}
//根据map的key进行排序
Integer[] items =new Integer[map.size()];
Set<Integer> keyset= map.keySet();
keyset.toArray(items);
Arrays.sort(items);
//循环所有数据回显到UI中
for(Integer item : items){
ImpCashDetailInfo impCashDetailInfo = map.get(item);
IRow row = kdtCash.addRow();
row.getCell("fcompanyid").setValue(impCashDetailInfo.getCompanyid());
row.getCell("fbankaccountid").setValue(impCashDetailInfo.getBankaccountid());
row.getCell("fbanknumber").setValue(impCashDetailInfo.getBanknumber());
row.getCell("fbizdate").setValue(impCashDetailInfo.getBizdate());
//自适应列宽
KDTableHelper.autoFitColumnWidth(kdtCash, 0);
KDTableHelper.autoFitColumnWidth(kdtCash, 1);
KDTableHelper.autoFitColumnWidth(kdtCash, 2);
KDTableHelper.autoFitColumnWidth(kdtCash, 3);
}
//========================回显end==========================
return "导入成功。";
}catch (Exception ex) {
ex.printStackTrace();
String message = ex.getMessage();
return message == null ? "导入失败,请查看日志。" : message;
}
}
@Override
public void afterExec(Object result) throws Exception {
if (result != null) {
com.kingdee.eas.util.client.MsgBox.showInfo(result
.toString());
}
}
});
Component[] cps = dialog.getContentPane().getComponents();
for (Component cp : cps) {
if (cp instanceof JLabel) {
((JLabel) cp).setText("执行中,请稍后.......");
}
}
dialog.show();
}