【问题标题】:How to create Charts on Google Spreadsheet using C#?如何使用 C# 在 Google 电子表格上创建图表?
【发布时间】:2019-10-09 13:48:22
【问题描述】:

经过努力,我终于创建了能够从/向 Google 电子表格读取、添加、更新和删除单元格的 C# 程序。现在我想从我那里的数据创建一个图表,但我做不到。

我已经围绕这个做了很多研究。我发现这个library repository 包含所有东西(我认为)它需要这样做,并且我发现了几个使用 python 和 javascript 的示例,但由于某种原因,我无法将它放在 C# 中。

有人做过吗?

【问题讨论】:

  • 为什么投反对票?您能否提供一些反馈或要求澄清?
  • 您能否提供您尝试过的代码并解释什么不起作用?有关于如何创建图表here 的信息,这需要作为batchUpdate 的主体发送。
  • 我还没有整理任何图表代码,否则我会附上它。只是阅读并熟悉了可能的方法,但正如我所说,我没有运行任何方法,因为我真的不知道/无法理解如何执行它的结构。
  • 这取决于你想要制作什么样的图表,你正在使用什么数据等等。我可以给你一个关于如何构建请求正文和发出请求的基本纲要API,但它真的取决于你想要做什么。
  • 是的,当然,但我只是想要那个,基本的破败,我可以从那里拿走。我当时一片空白,想不通。谢谢!

标签: c# google-sheets-api


【解决方案1】:

答案:

为了创建图表并将其添加到 Google 表格,需要向包含图表信息的 API 发出 batchUpdate 请求。

破败:

您需要做的第一件事是构建您的请求正文,指定您需要的图表的所有相关部分。这包括图表类型(柱形图或饼图)、轴、数据源、图表位置等。完整信息可在Charts reference 中找到。

一旦构建了请求对象,就可以通过构建包含先前构建的所有信息的BatchUpdateRequest 来向API 发出batchUpdate 请求。

构建请求:

Request 是一个 List 对象,您需要在添加到 BatchUpdateSpreadsheetRequest 对象之前构建它:

var addChartRequest = new AddChartRequest();
addChartRequest.ChartData = // Your data
addChartRequest.ChartSourceRange = // Your range
addChartRequest.ChartSpec = // Your spec
// I have included the Class References for all these below, check them out
// and add the structure you need

BatchUpdateSpreadsheetRequest chartRequest = new BatchUpdateSpreadsheetRequest();
chartRequest.Requests = new List<Request>();
chartRequest.Requests.Add(new Request
{
  // Build your List Request here following the structure for column or pie charts
});

column request structurepie chart request structure 相似,但需要的参数略有不同。

进行 API 调用:

构建请求本身后,需要调用batchUpdate 方法:

var ssID = "<your-spreadsheet-id>"
var batchUpdateReq = service.Spreadsheets.BatchUpdate(chartRequest, ssID)
batchUpdateRequest.Execute();

参考资料:

【讨论】:

【解决方案2】:

我按照这些简单的步骤在现有的 google 电子表格中创建了一个简单的柱形图。

  1. 获取工作表 ID
var sheetId = GetSheetId(service, spreadsheetId, googleSheetParameters.SheetName);
  1. 创建基本图表轴列表
IList<BasicChartAxis> basicChartAxes = new List<BasicChartAxis>();
basicChartAxes.Add(
    new BasicChartAxis()
    {
        Position = "BOTTOM_AXIS",
        Title = xName

    });
basicChartAxes.Add(
    new BasicChartAxis()
    {
        Position = "LEFT_AXIS",
        Title = yName

    });
  1. 为 x 和 y 轴创建网格范围(例如:前 10 行)
//B1-B10
IList<GridRange> yRanges = new List<GridRange>();
yRanges.Add(
    new GridRange()
    {
        SheetId = sheetId,
        StartRowIndex = 0,
        EndRowIndex = 9,
        StartColumnIndex = 1,
        EndColumnIndex = 2
    });

//A1-A10
IList<GridRange> xRanges = new List<GridRange>();
xRanges.Add(
    new GridRange()
    {
        SheetId = sheetId,
        StartRowIndex = 0,
        EndRowIndex = 9,
        StartColumnIndex = 0,
        EndColumnIndex = 1
    });
  1. 创建系列和域
IList<BasicChartSeries> basicChartSeries = new List<BasicChartSeries>();
basicChartSeries.Add(new BasicChartSeries()
{

    Series = new ChartData()
    {
        SourceRange = new ChartSourceRange()
        {
            Sources = yRanges
        }
    },

    TargetAxis = "LEFT_AXIS"
});

IList<BasicChartDomain> basicChartDomains = new List<BasicChartDomain>();
basicChartDomains.Add(new BasicChartDomain()
{
    Domain = new ChartData()
    {
        SourceRange = new ChartSourceRange()
        {
            Sources = xRanges
        }
    }
});
  1. 创建 ChartSpec
var chartSpec = new ChartSpec()
{
    Title = googleSheetParameters.SheetName,
    BasicChart = new BasicChartSpec()
    {
        ChartType = "COLUMN",
        LegendPosition = "BOTTOM_LEGEND",
        Axis = basicChartAxes,
        Domains = basicChartDomains,
        Series = basicChartSeries,
        HeaderCount = 1
    }
};
  1. 创建并完成图表请求
BatchUpdateSpreadsheetRequest chartRequest = new BatchUpdateSpreadsheetRequest();

var addChartRequest = new AddChartRequest
{
    Chart = new EmbeddedChart()
    {
        Position = new EmbeddedObjectPosition()
        {
            //if you use an existing Sheet inside Spredsheet
            OverlayPosition = new OverlayPosition
            {
                //set position inside existing sheet
                AnchorCell = new GridCoordinate()
                {
                    SheetId = sheetId,
                    ColumnIndex = 2,
                    RowIndex = 0
                }
            }
        },
        Spec = chartSpec
    }
};

chartRequest.Requests = new List<Request>();
chartRequest.Requests.Add(new Request() { AddChart = addChartRequest });

var batchUpdateReq = service.Spreadsheets.BatchUpdate(chartRequest, spreadsheetId).Execute();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    相关资源
    最近更新 更多