起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6058|回复: 7

[结贴] Excel导入问题

[复制链接]

13

主题

25

帖子

608

积分

高级会员

Rank: 4

积分
608
QQ
发表于 2020-7-8 15:52:10 | 显示全部楼层 |阅读模式
在Excel导入主子表数据时,导入成功(数据库中成功插入导入的数据),但是导入前鼠标所在行会新增一条乱的数据插入到数据库中,请问如何解决?
情况如下图所示:
在导入第一条数据时正常导入:
image1.png
当导入第二条数据时(同一个Excel表格和mapping映射文件),导入的数据是正常的如下图所示:
image3.png
但是鼠标所在的行(导入的第一条数据)明细表多添了一条数据:
image2.png
当导入第三条数据时,鼠标所在的行又新增一条:
image4.png
importExcel组件的代码我都没有改动,只添加了importExcelBeforeAction执行后事件,代码如下:

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

import com.justep.model.ModelUtils;
import com.justep.system.data.KSQL;
import com.justep.system.util.BizUtils;
import com.justep.system.util.CommonUtils;

public class Dj_sgwhsjbsProcess {

    public static void dj_sgwhsjbsProcessAfterImportExcelBeforeAction() throws Exception {

        // System.out.println("========================");
        Workbook workBook = (Workbook) ModelUtils.getRequestContext().getActionContext().getParameter("excel");
        Sheet sheet = workBook.getSheetAt(1); // 获得sheet2中的数据明细
        
        Sheet sheet1 = workBook.getSheetAt(0);// 获得sheet1中的数据主表
        Cell c = sheet1.getRow(1).getCell(2);
        c.setCellType(Cell.CELL_TYPE_STRING);
        String value = c.getStringCellValue();// 获得资金筛选额度
        String dwbm = sheet1.getRow(1).getCell(0).getStringCellValue();//单位编码
        String dwmc = sheet1.getRow(1).getCell(1).getStringCellValue();//单位名称
        String djbm = BizUtils.createNextSequenceString("SGWH", "0000");//单据编码
        // 用来记录大额资金笔数
        int count = 0;
        // 用来记录大额资金总额
        BigDecimal dezjze = new BigDecimal(0);
        // 用来记录资金总额
        BigDecimal zjze = new BigDecimal(0);
        
        String uuid = CommonUtils.createGUID();// 主表主键
        Iterator<Row> it = sheet.iterator();
        Map map = new HashMap();
        Row row = null;
        Cell cell = null;
        row = it.next();
        while (it.hasNext()) {
            row = it.next();
            int i = 1;
            Iterator<Cell> ce = row.cellIterator();
            while (ce.hasNext()) {
                cell = ce.next();
                map.put(i++, cell);
            }
            System.out.println(map.get(5));
            String ksql = "insert into ZJJG_DEZJSJBSMX mx " + "(mx,mx.fDESJBSMX_DWDM,mx.fDESJBSMX_DWMC,mx.fDESJBSMX_ZFDWMC,mx.fDESJBSMX_ZBID,mx.fDESJBSMX_ZJYTDM,mx.fDESJBSMX_ZJYTMS,mx.fDESJBSMX_ZJJE,mx.fDESJBSMX_SKDWMC,"
                    + "mx.fDESJBSMX_SKFSFWJWQY) values('" + CommonUtils.createGUID() + "','"+dwbm+"','"+dwmc+"','"+dwmc+"'," + "'" + uuid + "','" + map.get(1).toString().substring(0, 2) + "','" + map.get(2) + "'," + map.get(3)
                    + ",'" + map.get(4) + "','" + map.get(6).toString().substring(0, 1) + "')";
            KSQL.executeUpdate(ksql, null, "/zjjg/zjbs/data", null);
            
            if (new BigDecimal(map.get(3).toString()).compareTo(new BigDecimal(value)) > 0) {// 大额
                count++;
                dezjze = dezjze.add(new BigDecimal(map.get(3).toString()));
            }
            zjze = zjze.add(new BigDecimal(map.get(3).toString()));
        }
        
        String sql = "insert into ZJJG_DEZJSJBSZB zb (zb,zb.fDESJBSZB_DJBM,zb.fDESJBSZB_DJZT,zb.fDESJBSZB_DWDM,zb.fDESJBSZB_DWMC,zb.fDESJBSZB_SJLY,zb.fDESJBSZB_WHZZ,zb.DR,zb.fDESJBSZB_DEZJZE,zb.fDESJBSZB_ZJZE,zb.fDESJBSZB_DRDEZJBS,zb.fDESJBSZB_JESXED) values('"
                + uuid + "','"+djbm+"','0','"+dwbm+"','"+dwmc+"','sgbs','"+dwmc+"',0," + dezjze + ","
                + zjze + "," + count + "," + new BigDecimal(value) + ")";
        KSQL.executeUpdate(sql, null, "/zjjg/zjbs/data", null);
        
    }
}



91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36069
发表于 2020-7-9 09:21:18 | 显示全部楼层
java中调试看看具体什么时机操作的这个主数据的从数据
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

13

主题

25

帖子

608

积分

高级会员

Rank: 4

积分
608
QQ
 楼主| 发表于 2020-7-9 11:27:58 | 显示全部楼层
我把mapping清空,没有设置字段,只设置了明细表,导入第二条数据后,会自动根据ontology文件生成一条明细数据
回复 支持 反对

使用道具 举报

13

主题

25

帖子

608

积分

高级会员

Rank: 4

积分
608
QQ
 楼主| 发表于 2020-7-9 11:37:34 | 显示全部楼层
jishuang 发表于 2020-7-9 09:21
java中调试看看具体什么时机操作的这个主数据的从数据

我把mapping清空,没有设置字段,只设置了明细表的concept,导入第二条数据后,会自动根据ontology文件生成一条明细数据
mapping文件配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<mapping>
        <default-config>
                <sheet all="false" start="1" end="1"/>
                <row all="false" start="2" end="4"/>
        </default-config>
        <concept name="ZJJG_DEZJSJBSMX">

        </concept>
</mapping>
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36069
发表于 2020-7-9 16:25:57 | 显示全部楼层
导入第二条数据后具体谁的第二条数据?
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

13

主题

25

帖子

608

积分

高级会员

Rank: 4

积分
608
QQ
 楼主| 发表于 2020-7-9 16:45:05 | 显示全部楼层
本帖最后由 小希一夏 于 2020-7-9 16:47 编辑
jishuang 发表于 2020-7-9 16:25
导入第二条数据后具体谁的第二条数据?

导入的是主子表,第二条数据指的是重新生成的一张主子表,每点击一次Excel导入按钮都会形成一张新的主子表,不正常的现象是导入成功后会在前一条主子表的子表添加一条子表数据
我已经换了一种方式实现了主子表的导入,但是还是很纠结为什么会出现上面的情况

回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36069
发表于 2020-7-10 14:53:33 | 显示全部楼层
需要跟踪数据看子表对应的外键的值是怎么来的
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

13

主题

25

帖子

608

积分

高级会员

Rank: 4

积分
608
QQ
 楼主| 发表于 2020-7-13 13:45:13 | 显示全部楼层
jishuang 发表于 2020-7-10 14:53
需要跟踪数据看子表对应的外键的值是怎么来的

好了,结贴吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-11-26 02:50 , Processed in 0.058678 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表