使用 Excel JavaScript API 剪切、复制和粘贴区域
本文提供了使用 Excel JavaScript API 剪切、复制和粘贴范围的代码示例。 有关对象支持的属性和方法 Range
的完整列表,请参阅 Excel.Range 类。
注意
The Excel JavaScript API 没有“Cell”对象或类。 相反,Excel JavaScript API 将所有 Excel 单元格定义为 Range
对象。 Excel UI 中的单个单元格转换为 Excel JavaScript API 中包含一个单元格的 Range
对象。 单个 Range
对象也可以包含多个连续的单元格。 若要了解详细信息,请参阅使用 Excel JavaScript API 处理单元格。
Copy and paste
Range.copyFrom 方法复制 Excel UI 的“复制”和“粘贴”操作。 目标是 Range
在其上调用的对象 copyFrom
。 将要复制的源作为一个范围或一个表示范围的字符串地址进行传递。
以下代码示例将数据从“A1:E1”复制到“G1”开始的范围(粘贴到“G1:K1”结束)。
await Excel.run(async (context) => {
let sheet = context.workbook.worksheets.getItem("Sample");
// Copy everything from "A1:E1" into "G1" and the cells afterwards ("G1:K1").
sheet.getRange("G1").copyFrom("A1:E1");
await context.sync();
});
Range.copyFrom
具有三个可选参数。
copyFrom(sourceRange: Range | RangeAreas | string, copyType?: Excel.RangeCopyType, skipBlanks?: boolean, transpose?: boolean): void;
copyType
指定将哪些数据从源复制到目标。
Excel.RangeCopyType.formulas
传输源单元格中的公式,并保留这些公式区域的相对位置。 将原样复制任何非公式条目。Excel.RangeCopyType.values
复制数据值,如果是公式,则复制公式的结果。Excel.RangeCopyType.formats
复制范围的格式设置(包括字体、颜色和其他格式),但不会复制任何值。Excel.RangeCopyType.all
(默认选项) 复制数据和格式,并保留单元格的公式(如果找到)。
skipBlanks
设置是否将空白单元格复制到目标。 如果为 true,copyFrom
将跳过源范围中的空白单元格。
跳过的单元格不会覆盖目标范围中其对应单元格的现有数据。 默认值为 false。
transpose
确定是否将数据转置(即切换其行和列)到源位置。
转置范围沿主对角线翻转,因此,行“1”、“2”和“3”将成为列“A”、“B”和“C”。
以下代码示例和图像在一个简单的方案中演示此行为。
await Excel.run(async (context) => {
let sheet = context.workbook.worksheets.getItem("Sample");
// Copy a range, omitting the blank cells so existing data is not overwritten in those cells.
sheet.getRange("D1").copyFrom("A1:C1",
Excel.RangeCopyType.all,
true, // skipBlanks
false); // transpose
// Copy a range, including the blank cells which will overwrite existing data in the target cells.
sheet.getRange("D2").copyFrom("A2:C2",
Excel.RangeCopyType.all,
false, // skipBlanks
false); // transpose
await context.sync();
});
复制和粘贴区域之前的数据
复制和粘贴区域后的数据
剪切和粘贴 (移动) 单元格
Range.moveTo 方法将单元格移动到工作簿中的新位置。 此单元格移动行为与通过 拖动区域边框 或执行 剪切 和 粘贴 操作移动单元格时的工作方式相同。 区域的格式设置和值都移动到指定为 destinationRange
参数的位置。
下面的代码示例使用 Range.moveTo
方法移动区域。 请注意,如果目标范围小于源,则会扩展它以包含源内容。
await Excel.run(async (context) => {
let sheet = context.workbook.worksheets.getActiveWorksheet();
sheet.getRange("F1").values = [["Moved Range"]];
// Move the cells "A1:E1" to "G1" (which fills the range "G1:K1").
sheet.getRange("A1:E1").moveTo("G1");
await context.sync();
});