硕㏒ 发表于 2024-6-5 08:58:34

图片位置问题

本帖最后由 Wilson.Zhang 于 2024-7-1 18:43 编辑

产品:SpreadJS
版本:17.0.10
调研编号:SJS-24654
LastReview:2024-7-1
该问题已在17.1.0版本修复。


我在这个单元格的位置插入了一张图片,我这个sheet又新增行的需求,通过代码在18行之后添加行,添加行之后,图片的位置不动,还是停留在原来的位置,这个问题又解决方案吗?以下是我新增行的代码,addRowsToReportSheet是新增报告sheet页的方法addValidate() {
      const spread = this.designer.getWorkbook();
      const activeSheet = spread.getActiveSheet();

      // 尝试获取basicrow名称管理器的范围
      let customName = activeSheet.getCustomName("basicrow");

      // 检查basicrow是否存在
      if (!customName) {
      console.error("命名范围 'basicrow' 未找到。");
      this.visible = false;
      return;
      }

      // 获取basicrow的表达式
      let expression = customName.getExpression();
      if (!expression) {
      console.error("命名范围 'basicrow' 的表达式未定义。");
      this.visible = false;
      return;
      }

      // 获取basicrow的范围
      let basicrow = expression.getRange();
      if (!basicrow) {
      console.error("无法获取 'basicrow' 的范围。");
      this.visible = false;
      return;
      }

      // 如果this.count存在,添加行
      if (this.count) {
      let totalRowCount = activeSheet.getRowCount(); // 获取当前工作表的总行数
      let rowCountToAdd = Number(this.count); // 要添加的行数
      // let colCount = basicrow.colCount; // basicrow的列数
      let startRow = basicrow.row; // basicrow的起始行
      let rowHeight = activeSheet.getRowHeight(startRow); // 获取basicrow行高
      let table = activeSheet.tables.findByName("Table1"); // 查找名为"Table1"的表格
      let tableRange = table.range(); // 获取表格范围
      let currentRowCount = tableRange.rowCount; // 当前表格行数
      let row = tableRange.row; // 表格起始行
      console.log(basicrow, "basicrow");
      console.log(tableRange, "tableRange");
      // 在工作表末尾添加行
      activeSheet.addRows(totalRowCount, rowCountToAdd * basicrow.rowCount);

      // 在表格中插入新行
      table.insertRows(
          currentRowCount - 2,
          rowCountToAdd * basicrow.rowCount,
          true
      );

      // 设置新行的行高
      for (let i = 1; i <= rowCountToAdd * basicrow.rowCount + 3; i++) {
          activeSheet.setRowHeight(currentRowCount + row + i, rowHeight);
      }
      for (let i = 0; i < rowCountToAdd; i++) {
          activeSheet.copyTo(
            startRow,
            basicrow.col,
            currentRowCount + row + basicrow.rowCount * i,
            basicrow.col,
            basicrow.rowCount,
            basicrow.colCount,
            window.GC.Spread.Sheets.CopyToOptions.style |
            window.GC.Spread.Sheets.CopyToOptions.formula |
            window.GC.Spread.Sheets.CopyToOptions.span
          );
      }
      // } else {
      //   // 复制basicrow范围的内容到新插入的行
      //   for (let i = 0; i < rowCountToAdd; i++) {
      //   activeSheet.copyTo(
      //       startRow,
      //       basicrow.col,
      //       currentRowCount + row + i,
      //       basicrow.col,
      //       1,
      //       colCount,
      //       window.GC.Spread.Sheets.CopyToOptions.style
      //   );
      //   }
      // }

      // 调用处理另一个工作表的方法
      this.addRowsToReportSheet(spread, this.count);

      // 重置计数器并隐藏当前视图
      this.count = 1;
      this.visible = false;
      } else {
      // 如果this.count不存在,则隐藏当前视图
      this.visible = false;
      }
    },

    addRowsToReportSheet(spread, rowCount) {
      // 获取名为"检测数据录入-报告"的工作表
      let reportSheet = spread.getSheetFromName("检测数据录入-报告");
      console.log(reportSheet, "====reportSheet");

      // 检查工作表是否存在
      if (!reportSheet) {
      console.error("工作表 '检测数据录入-报告' 未找到。");
      return;
      }

      // 获取名为"reportrow"的命名范围
      let reportCustomName = reportSheet.getCustomName("reportrow");
      if (!reportCustomName) {
      console.error("命名范围 'reportrow' 未找到。");
      return;
      }

      // 获取命名范围的表达式
      let reportExpression = reportCustomName.getExpression();
      if (!reportExpression) {
      console.error("命名范围 'reportrow' 的表达式未定义。");
      return;
      }

      // 获取命名范围的范围
      let reportRow = reportExpression.getRange();
      if (!reportRow) {
      console.error("无法获取 'reportrow' 的范围。");
      return;
      }
      let totalRowCount = reportSheet.getRowCount(); // 获取当前工作表的总行数
      let rowCountToAdd = Number(rowCount); // 要添加的行数
      // let colCount = reportRow.colCount; // reportrow的列数
      let startRow = reportRow.row; // reportrow的起始行
      let rowHeight = reportSheet.getRowHeight(startRow); // 获取reportrow行高
      let table = reportSheet.tables.findByName("Table2"); // 查找名为"Table2"的表格
      let tableRange = table.range(); // 获取表格范围
      let currentRowCount = tableRange.rowCount; // 当前表格行数
      let row = tableRange.row; // 表格起始行
      // 在工作表末尾添加行
      reportSheet.addRows(totalRowCount, rowCountToAdd * reportRow.rowCount);
      // 在表格中插入新行

      table.insertRows(
      currentRowCount - 2,
      rowCountToAdd * reportRow.rowCount,
      true
      );
      // 设置新行的行高
      for (let i = 0; i < rowCountToAdd * reportRow.rowCount + 7; i++) {
      reportSheet.setRowHeight(currentRowCount + row + i, rowHeight);
      }
      // // 复制basicrow范围的内容到新插入的行
      for (let i = 0; i < rowCountToAdd; i++) {
      reportSheet.copyTo(
          startRow,
          reportRow.col,
          currentRowCount + row + reportRow.rowCount * i,
          reportRow.col,
          reportRow.rowCount,
          reportRow.colCount,
          window.GC.Spread.Sheets.CopyToOptions.style |
            window.GC.Spread.Sheets.CopyToOptions.formula |
            window.GC.Spread.Sheets.CopyToOptions.span
      );
      }
    },

Joestar.Xu 发表于 2024-6-5 11:24:36

您好,您描述的情况我了解了,这边调研一下,后续有进展我会在本贴中回复您。

Joestar.Xu 发表于 2024-6-6 12:28:00

您好,您描述的情况初步认定为是一个Bug,目前正在修复中,等修复完毕我会在帖子下回复您。

硕㏒ 发表于 2024-6-6 13:25:46

Joestar.Xu 发表于 2024-6-6 12:28
您好,您描述的情况初步认定为是一个Bug,目前正在修复中,等修复完毕我会在帖子下回复您。

需要发新版本修复吗,新版本大概什么时候发布?

Joestar.Xu 发表于 2024-6-6 13:46:50

您好,该问题预计在17.1.0版本中修复,新版本将在本月底发布。

Wilson.Zhang 发表于 2024-7-1 18:43:44

您好!17.1.0版本已发布,您可以升级后测试。谢谢!
页: [1]
查看完整版本: 图片位置问题