📅  最后修改于: 2023-12-03 15:01:05.130000             🧑  作者: Mango
在本文中,我们将介绍如何使用 JavaScript 执行以下操作:
要使用 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 了!')
});
});
我们可以使用 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 为我们提供了很多强大的工具来处理和管理数据,所以在实现自己的业务逻辑时请务必仔细研究 API 文档。