📜  gsheet 工作日 - Javascript (1)

📅  最后修改于: 2023-12-03 15:01:05.130000             🧑  作者: Mango

使用 JavaScript 操作 Google Sheets 工作日

在本文中,我们将介绍如何使用 JavaScript 执行以下操作:

  1. 连接到 Google Sheets API
  2. 读取和写入数据到 Google Sheets 工作日
  3. 格式化和调整数据
连接到 Google Sheets API

要使用 Google Sheets API,我们需要创建 Google Cloud Platform 项目并启用 Sheets API。然后,我们需要获取一些凭据,以便我们的应用程序可以认证并访问API。

// 引入 Google Sheets API
const { google } = require('googleapis');

// 从凭据文件中读取客户端ID和客户端密钥
const credentials = require('./google-credentials.json');
const { client_id, client_secret } = credentials.installed;

// 创建 OAuth2 客户端
const oauth2Client = new google.auth.OAuth2(
  client_id,
  client_secret,
  'urn:ietf:wg:oauth:2.0:oob'
);

// 获取授权码
const authorizeUrl = oauth2Client.generateAuthUrl({
  access_type: 'offline',
  scope: ['https://www.googleapis.com/auth/spreadsheets'],
});

console.log('请访问下面的链接以获得授权码:\n', authorizeUrl);

注意:在此示例中,我们将客户端ID和客户端秘钥保存在一个名为 google-credentials.json 的文件中,以便我们可以方便地与代码分享。在这个文件中,我们应该只包含信息,而不要将其发布到公共代码库中。

获取访问令牌

完成上一步后,我们需要使用授权码交换访问令牌,以便我们的程序可以访问 Sheets API。

// 从授权码中交换令牌
const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

rl.question('请在浏览器中输入您获得的授权码:', (code) => {
  rl.close();

  oauth2Client.getToken(code, (err, token) => {
    if (err) {
      console.error('获取访问令牌时出现错误:', err);
      return;
    }

    // 设置 OAuth2 凭据
    oauth2Client.setCredentials(token);

    console.log('访问令牌成功获取,并且已保存在 oauth2Client 中!');
    console.log('您可以开始读取和写入 Google Sheets 了!')
  });
});
读取和写入数据到 Google Sheets 工作日

我们可以使用 googleapis 包中的 google.sheets 客户端来读取和写入数据到 Google Sheets 工作日。

读取数据:

async function readData(spreadsheetId, range) {
  const sheets = google.sheets({ version: 'v4', auth: oauth2Client });
  const response = await sheets.spreadsheets.values.get({
    spreadsheetId,
    range,
  });

  const rows = response.data.values;

  if (rows.length === 0) {
    console.log('未找到任何行!');
    return;
  }

  console.log('行:');
  rows.forEach((row) => {
    console.log(`${row[0]}, ${row[1]}`);
  });
}

写入数据:

async function writeData(spreadsheetId, range, values) {
  const sheets = google.sheets({ version: 'v4', auth: oauth2Client });

  const resource = {
    values,
  };

  const response = await sheets.spreadsheets.values.update({
    spreadsheetId,
    range,
    valueInputOption: 'USER_ENTERED',
    resource,
  });

  console.log(`${response.data.updatedCells} 个单元格已被更新!`);
}
格式化和调整数据

有时我们需要调整和格式化数据。例如,我们可以使用 googleapis 包中的 google.sheets 客户端来设置行高、列宽、单元格样式等。

设置行高:

async function setRowHeight(spreadsheetId, sheetName, rowIndex, rowHeight) {
  const sheets = google.sheets({ version: 'v4', auth: oauth2Client });

  const response = await sheets.spreadsheets.get({
    spreadsheetId,
  });

  const sheetsData = response.data.sheets;
  const sheet = sheetsData.find((sheet) => sheet.properties.title === sheetName);

  if (!sheet) {
    console.log(`未找到名为 ${sheetName} 的 Sheet!`);
    return;
  }

  const sheetId = sheet.properties.sheetId;

  const requests = [
    {
      updateDimensionProperties: {
        range: {
          sheetId,
          dimension: 'ROWS',
          startIndex: rowIndex - 1,
          endIndex: rowIndex,
        },
        properties: {
          pixelSize: rowHeight,
        },
        fields: 'pixelSize',
      },
    },
  ];

  const response = await sheets.spreadsheets.batchUpdate({
    spreadsheetId,
    resource: {
      requests,
    },
  });

  console.log(`${response.data.totalUpdatedRows} 行的高度已被更新!`);
}

设置列宽:

async function setColumnWidth(spreadsheetId, sheetName, columnIndex, columnWidth) {
  const sheets = google.sheets({ version: 'v4', auth: oauth2Client });

  const response = await sheets.spreadsheets.get({
    spreadsheetId,
  });

  const sheetsData = response.data.sheets;
  const sheet = sheetsData.find((sheet) => sheet.properties.title === sheetName);

  if (!sheet) {
    console.log(`未找到名为 ${sheetName} 的 Sheet!`);
    return;
  }

  const sheetId = sheet.properties.sheetId;

  const requests = [
    {
      updateDimensionProperties: {
        range: {
          sheetId,
          dimension: 'COLUMNS',
          startIndex: columnIndex - 1,
          endIndex: columnIndex,
        },
        properties: {
          pixelSize: columnWidth,
        },
        fields: 'pixelSize',
      },
    },
  ];

  const response = await sheets.spreadsheets.batchUpdate({
    spreadsheetId,
    resource: {
      requests,
    },
  });

  console.log(`${response.data.totalUpdatedColumns} 列的宽度已被更新!`);
}

设置单元格样式:

async function setCellStyle(spreadsheetId, sheetName, range, style) {
  const sheets = google.sheets({ version: 'v4', auth: oauth2Client });

  const response = await sheets.spreadsheets.get({
    spreadsheetId,
  });

  const sheetsData = response.data.sheets;
  const sheet = sheetsData.find((sheet) => sheet.properties.title === sheetName);

  if (!sheet) {
    console.log(`未找到名为 ${sheetName} 的 Sheet!`);
    return;
  }

  const sheetId = sheet.properties.sheetId;

  const requests = [
    {
      repeatCell: {
        range: {
          sheetId,
          ...range,
        },
        cell: {
          userEnteredFormat: style,
        },
        fields: '*',
      },
    },
  ];

  const response = await sheets.spreadsheets.batchUpdate({
    spreadsheetId,
    resource: {
      requests,
    },
  });

  console.log(`${response.data.totalUpdatedCells} 个单元格的样式已被更新!`);
}
总结

到此为止,我们已经介绍了如何使用 JavaScript 操作 Google Sheets 工作日,包括如何:

  • 连接到 Google Sheets API
  • 读取和写入数据到 Google Sheets 工作日
  • 格式化和调整数据

这是一个简单的示例,您可以根据自己的需要使用更复杂的功能。Google Sheets API 为我们提供了很多强大的工具来处理和管理数据,所以在实现自己的业务逻辑时请务必仔细研究 API 文档。