You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在Azure Function中调用Google Sheets API?C#引用配置问题

解决Azure Function C#中使用Google Sheets API的依赖与配置问题

你遇到的CS0246错误本质是项目里没引入Google Sheets API相关的依赖包,Azure Function的依赖管理分两种情况,我给你分别说明:

1. 安装必要的依赖包

如果你用的是预编译C# Azure Function项目(推荐的现代方式)

直接通过NuGet安装核心包即可,打开包管理器控制台或者用dotnet CLI执行:

dotnet add package Google.Apis.Sheets.v4

这个包会自动帮你引入Google.Apis.Auth.OAuth2、Google.Apis.Services等依赖项,安装完成后你的using语句就不会报错了。

如果你用的是C#脚本(.csx)格式的Azure Function

需要在脚本开头用#r引用NuGet包,格式如下(可以指定版本号,也用*表示最新版):

#r "nuget: Google.Apis.Sheets.v4, *"
#r "nuget: Google.Apis.Auth.OAuth2, *"
#r "nuget: Google.Apis.Services, *"

添加完这些引用后,再写你的using语句就没问题了。

2. 配置服务器端认证(Azure Function必备)

因为Azure Function是后台服务,不能用用户登录的OAuth2流程,必须用Google服务账号来认证:

  • 先去Google Cloud Console创建一个服务账号,下载对应的JSON密钥文件。
  • 不要把密钥文件直接上传到Azure Function,而是把JSON内容复制到Azure Function的应用程序设置里(比如新建一个名为GOOGLE_SERVICE_ACCOUNT_KEY的配置项,值就是密钥的完整JSON文本)。
  • 在代码里读取这个配置来初始化认证:
var serviceAccountJson = Environment.GetEnvironmentVariable("GOOGLE_SERVICE_ACCOUNT_KEY");
var credential = GoogleCredential.FromJson(serviceAccountJson)
    .CreateScoped(SheetsService.Scope.Spreadsheets);
var sheetsService = new SheetsService(new BaseClientService.Initializer()
{
    HttpClientInitializer = credential,
    ApplicationName = "你的应用名称,比如Azure Sheets Writer"
});

3. 完整的Timer触发写入示例

把写入逻辑整合到你的Timer函数里,示例如下:

using Google.Apis.Auth.OAuth2;
using Google.Apis.Sheets.v4;
using Google.Apis.Sheets.v4.Data;
using Google.Apis.Services;
using System;
using System.Collections.Generic;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;

public static void Run(TimerInfo myTimer, ILogger log)
{
    log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");

    try
    {
        // 读取服务账号密钥
        var serviceAccountJson = Environment.GetEnvironmentVariable("GOOGLE_SERVICE_ACCOUNT_KEY");
        var credential = GoogleCredential.FromJson(serviceAccountJson)
            .CreateScoped(SheetsService.Scope.Spreadsheets);
        
        // 初始化Sheets服务
        var sheetsService = new SheetsService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
            ApplicationName = "Azure Function Sheets Integration"
        });

        // 配置要写入的表格信息
        string spreadsheetId = "你的Google Sheet ID(从URL里获取)";
        string range = "Sheet1!A:B"; // 要写入的单元格范围

        // 准备要写入的数据
        var values = new List<IList<object>>
        {
            new List<object> { DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "来自Azure Function的测试数据" }
        };

        // 执行写入请求
        var valueRange = new ValueRange { Values = values };
        var updateRequest = sheetsService.Spreadsheets.Values.Append(valueRange, spreadsheetId, range);
        updateRequest.ValueInputOption = SpreadsheetsResource.ValuesResource.AppendRequest.ValueInputOptionEnum.RAW;
        var response = updateRequest.Execute();

        log.LogInformation($"成功写入 {response.Updates.UpdatedCells} 个单元格!");
    }
    catch (Exception ex)
    {
        log.LogError($"写入Google Sheet失败:{ex.Message}");
    }
}

4. 关键注意事项

  • 一定要给服务账号授权访问你的Google Sheet:打开Sheet的共享设置,添加服务账号JSON里的client_email字段对应的邮箱,赋予编辑权限。
  • 确保Azure Function的应用程序设置里的密钥JSON没有格式错误(比如多余的换行或者引号)。
  • 如果用脚本式.csx,注意依赖包的版本要兼容,避免出现版本冲突的问题。

内容的提问来源于stack exchange,提问作者Rodrigo.A92

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:44:12