向工作簿添加图像

此示例演示如何在 Excel 中使用 Office 脚本处理图像。

应用场景

图像有助于打造品牌、视觉标识和模板。 它们有助于制作工作簿,而不仅仅是一张巨大的桌子。

第一个示例将图像从一个工作表复制到另一个工作表。 这可用于将公司徽标放在每张工作表上的同一位置。

第二个示例从 URL 复制图像。 这可用于将同事存储在共享文件夹中的照片复制到相关工作簿。 请注意,此示例不能改编为使用本地图像文件,因为 Office 脚本不支持该文件。

设置:示例 Excel 文件

此工作簿包含脚本所需的数据、对象和格式设置。

示例代码:跨工作表复制图像

将以下脚本添加到示例工作簿,并亲自尝试该示例!

/**
 * This script transfers an image from one worksheet to another.
 */
function main(workbook: ExcelScript.Workbook)
{
  // Get the worksheet with the image on it.
  let firstWorksheet = workbook.getWorksheet("FirstSheet");

  // Get the first image from the worksheet.
  // If a script added the image, you could add a name to make it easier to find.
  let image: ExcelScript.Image;
  firstWorksheet.getShapes().forEach((shape, index) => {
    if (shape.getType() === ExcelScript.ShapeType.image) {
      image = shape.getImage();
      return;
    }
  });

  // Copy the image to another worksheet.
  image.getShape().copyTo("SecondSheet");
}

示例代码:将 URL 中的图像添加到工作簿

重要

由于 fetch 调用,此示例在 Power Automate 中不起作用。

async function main(workbook: ExcelScript.Workbook) {
  // Fetch the image from a URL.
  const link = "https://raw.githubusercontent.com/OfficeDev/office-scripts-docs/master/docs/images/git-octocat.png";
  const response = await fetch(link);

  // Store the response as an ArrayBuffer, since it is a raw image file.
  const data = await response.arrayBuffer();

  // Convert the image data into a base64-encoded string.
  const image = convertToBase64(data);

  // Add the image to a worksheet.
  workbook.getWorksheet("WebSheet").addImage(image);
}

/**
 * Converts an ArrayBuffer containing a .png image into a base64-encoded string.
 */
function convertToBase64(input: ArrayBuffer) {
  const uInt8Array = new Uint8Array(input);
  const count = uInt8Array.length;

  // Allocate the necessary space up front.
  const charCodeArray = new Array(count) as string[];
  
  // Convert every entry in the array to a character.
  for (let i = count; i >= 0; i--) { 
    charCodeArray[i] = String.fromCharCode(uInt8Array[i]);
  }

  // Convert the characters to base64.
  const base64 = btoa(charCodeArray.join(''));
  return base64;
}