找回密码
 立即注册

QQ登录

只需一步,快速开始

brmxj
金牌服务用户   /  发表于:2024-3-27 19:24  /   查看:598  /  回复:9
本帖最后由 Joestar.Xu 于 2024-3-29 09:01 编辑

在线表格编辑器中生成表样只有57行
image.png404030150.png
但是导入系统中,经过gcexcel处理后,就会自动多出一行,代码没有处理增加行次
image.png180488585.png
帮忙看下是什么情况?

qysdsnb_000000_V1.ssjson

2.34 MB, 阅读权限: 100, 下载次数: 1

9 个回复

倒序浏览
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-3-28 11:10:50
沙发
您好,我在GcExcelV7.0.0中执行了以下代码,但是并没有复现您所描述的问题,请问我的代码中是否有遗漏的步骤:
  1. Workbook workbook = new Workbook();
  2. workbook.open("data/input.ssjson");
  3. workbook.save("data/output.xlsx", SaveFileFormat.Xlsx);
复制代码

image.png592434691.png

回复 使用道具 举报
brmxj
金牌服务用户   /  发表于:2024-3-28 18:13:58
板凳
你好,这边的使用场景是这样的:首先拿到存储的ssjson数据,然后需要展示全部标签,以下为示例代码
public BaseFormDTO showTags(Long formId) {
                //获取ssjson数据
        BaseFormDTO declareBaseForm = getBaseForm(formId, true);
        if (Objects.nonNull(declareBaseForm)) {
                        //formData即是ssjson数据
            String formData = declareBaseForm.getFormData();
            if (StringUtils.isNotBlank(formData)) {
                Set<String> duplicateTags = TagUtil.checkTags(formData);
                                //执行此方法后,表样多了一行空白行
                declareBaseForm.setFormData(GcExcelHelper.showTags(formData, duplicateTags));
            }
        }
        return declareBaseForm;
    }
第一张图片为展示标签之前的正常表样,第二张为执行完以上代码之后,多了空白行
image.png902051391.png image.png565455016.png
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-3-29 09:46:08
地板
您好,请问您的TagUtil.checkTags方法的作用是什么呢?
declareBaseForm.setFormData(GcExcelHelper.showTags(formData, duplicateTags));这句代码具体执行的逻辑是什么呢?我们看不到您具体执行的逻辑,无法排查您的具体问题所在
回复 使用道具 举报
brmxj
金牌服务用户   /  发表于:2024-3-29 13:22:21
5#
TagUtil.checkTags方法主要检查报表是否含有重复标签,代码如下
public static Set<String> checkTags(String ssjson) {
        MyWorkbook workbook = SpreadWorkbook.parse(ssjson);
        Set<String> tags = workbook.init();
        log.info("重复标签:" + tags);
        return tags;
    }
GcExcelHelper.showTags(formData, duplicateTags)方法如如下,duplicateTags是TagUtil.checkTags执行之后存在的重复标签:
public static String showTags(String ssjson, Set<String> duplicateTags) {
        Workbook workbook = readFromJson(ssjson);
        IWorksheets worksheets = workbook.getWorksheets();
        worksheets.forEach(worksheet -> {
            IRange usedRange = worksheet.getUsedRange();
            //去除数据校验
            usedRange.getValidation().delete();
            if (Objects.nonNull(usedRange)) {
                int colCount = usedRange.getColumnCount();
                int rowCount = usedRange.getRowCount();
                for (int i = 0; i < rowCount; i++) {
                    for (int j = 0; j < colCount; j++) {
                        IRange cell = worksheet.getRange(i, j);
                        if (Objects.nonNull(cell.getTag())) {
                            String tag = cell.getTag().toString();
                            cell.setValue(tag);
                            //cell.autoFit();
                            if (duplicateTags.contains(tag)) {
                                //重复标签需要标红
                                cell.getInterior().setColor(Color.GetRed());
                            }
                        }
                    }
                }
            }
        });
        return workbook.toJson();
    }
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-3-29 14:31:14
6#
我将您的代码块配合您的描述做了个demo,但是依然无法复现您的问题,附件是我测试使用的demo,您看是否有遗漏的步骤,请在上面修改以帮助我能够复现您的问题。

导入导出多行空白行.java

2.22 KB, 下载次数: 30

回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-4-9 17:22:16
7#
您好,请问楼主的问题是否得到解决,如果仍然存在问题,欢迎继续跟帖询问
回复 使用道具 举报
brmxj
金牌服务用户   /  发表于:2024-4-10 17:41:05
8#
还没有解决,我们再排查一下,有啥问题,再向您咨询
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-4-10 17:53:05
9#
brmxj 发表于 2024-4-10 17:41
还没有解决,我们再排查一下,有啥问题,再向您咨询

回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-4-18 17:04:42
10#
您好,由于本帖较长时间没有回复,本帖先做结贴处理了,后续如您有其他问题,欢迎您开新帖提问。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部