使用 ONLYOFFICE 宏复制电子表格

2023年11月13日作者: Alina

编辑电子表格可能会有些麻烦,特别是在处理多个数据相似的电子表格时。为了简化这个过程,我们来创建一个能将数据从一个电子表格复制到另一个电子表格的宏,助力您轻松处理大型电子表格。

Use ONLYOFFICE macro to copy spreadsheets

构建宏

首先,我们通过编辑器进入当前工作表。然后,在“oRange”变量中指定我们要处理的范围,在“pastesheet”变量中访问要复制到的工作表。

  const oWorksheet = Api.GetActiveSheet();
  const pastesheet = Api.GetSheet("Sheet2");
  const oRange = oWorksheet.GetRange("A1:C10");
  // If you want to copy a specific Selection to the new sheet
  // var oRange = oWorksheet.GetSelection();

注意:如果您想处理一个选择的区域,可使用“GetSelection()”方法,而非通过反注释上面一行。

接下来,我们在指定的范围内使用“for each”方法,循环访问范围内的所有单元格。

oRange.ForEach(function (range) {

我们可以使用回调函数中的参数“range”,从第一个单元格开始获取每个单元格的数据。

  const oValue = range.GetValue();
  const oCharacters = range.GetCharacters(0, 2);
  const oFont = oCharacters.GetFont();
  const fontName = oFont.GetName();
  const oSize = oFont.GetSize();
  const isBold = oFont.GetBold();
  const isItalic = oFont.GetItalic();

在“ForEach”方法中,我们首先提取单元格的值,然后提取值的初始字符,了解其参数,如粗体、斜体等。之后,我们获取“fontName”和字体大小,在新工作表中做相应的实现。

if (oValue === null || oValue === "") {
      pastesheet.GetRange(range).SetValue(" ");
    }

在将值放入新工作表之前,我们使用“if else”循环运行一些检查,确保空单元格在新工作表中显示正确,如上所示。

else {
      oFont.SetName(fontName);
      pastesheet.GetRange(range).SetValue(oValue);
      pastesheet.GetRange(range).SetFontName(fontName);
      pastesheet.GetRange(range).SetFontSize(oSize);
      oWorksheet.GetRange(range).AutoFit(false, true);
      if (isBold) {
        pastesheet.GetRange(range).SetBold(true);
      }
      if (isItalic) {
        pastesheet.GetRange(range).SetItalic(true);
      }
    }

最后,在“else”循环中,我们将数值放入相应的单元格中,然后对这些单元格设置相应的属性,包括粗体、斜体、“fontname”和字体大小等。

完整的宏

这是宏的完整代码:

(function () {
  const oWorksheet = Api.GetActiveSheet();
  const pastesheet = Api.GetSheet("Sheet2");
  const oRange = oWorksheet.GetRange("A1:C10");

  // If you want to copy a specific Selection to the new sheet
  // var oRange = oWorksheet.GetSelection();

  oRange.ForEach(function (range) {
    const oValue = range.GetValue();
    const oCharacters = range.GetCharacters(0, 2);
    const oFont = oCharacters.GetFont();
    const fontName = oFont.GetName();
    const oSize = oFont.GetSize();
    const isBold = oFont.GetBold();
    const isItalic = oFont.GetItalic();
    if (oValue === null || oValue === "") {
      pastesheet.GetRange(range).SetValue(" ");
    } else {
      oFont.SetName(fontName);
      pastesheet.GetRange(range).SetValue(oValue);
      pastesheet.GetRange(range).SetFontName(fontName);
      pastesheet.GetRange(range).SetFontSize(oSize);
      oWorksheet.GetRange(range).AutoFit(false, true);

      if (isBold) {
        pastesheet.GetRange(range).SetBold(true);
      }
      if (isItalic) {
        pastesheet.GetRange(range).SetItalic(true);
      }
    }
  });
})();

需要记住的几个要点:

  1. 请确保在宏中指定的工作表名称是存在的,而且最好是空白工作表。
  2. 请确保是在主工作表(父工作表)、而不是新创建的工作表中运行宏。

我们来运行一下这个宏,看看效果如何!

这是使用“GetSelection()”方法运行宏的另一个示例:

我们希望这个宏是一个好用的工具,帮您处理日常电子表格编辑工作!

不要错过机会,畅享 ONLYOFFICE API 的强大功能。ONLYOFFICE API 方法代码库功能广泛,是您将想法变为现实的重要工具。如果您有问题或新创意,欢迎与我们分享。我们非常重视您的洞见,十分期待与您合作。祝您探索之旅好运!