【发布时间】:2015-10-17 19:03:08
【问题描述】:
我正在编写一个集成了一些 Google 电子表格的 C# 应用程序。我的情况是工作表中有一些数据需要移动到不同的电子表格中。此工作表包含大量数据,因此我想避免遍历其内容。
API 指南向an example 提供了如何在电子表格中创建新工作表的方法。我对其进行了修改以将现有工作表添加到电子表格中:
using System;
using Google.GData.Client;
using Google.GData.Spreadsheets;
namespace MySpreadsheetIntegration
{
class Program
{
static void Main(string[] args)
{
SpreadsheetsService service = new SpreadsheetsService("MySpreadsheetIntegration-v1");
SpreadsheetEntry destinationSpreadsheet = fetchGoogleSpreadSheetEntry(service, "some_title");
SpreadsheetEntry originSpreadsheet = fetchGoogleSpreadSheetEntry(service, "some_other_title");
// Create a local representation of the new worksheet.
WorksheetEntry originWorksheet = fetchGoogleWorksheet( originSpreadsheet, "some_worksheet_title" );
// Send the local representation of the worksheet to the API for
// creation. The URL to use here is the worksheet feed URL of our
// spreadsheet.
WorksheetFeed wsFeed = destinationSpreadsheet.Worksheets;
service.Insert(wsFeed, originWorksheet);
}
}
}
为清楚起见,上面的代码尝试将“some_other_title”电子表格中的“some_worksheet_title”工作表放入“some_title”电子表格中。以下是上述代码中引用的函数。
public static WorksheetEntry fetchGoogleWorksheet( SpreadsheetEntry spreadsheet, string worksheet_title )
{
WorksheetFeed wsFeed = spreadsheet.Worksheets;
WorksheetEntry worksheet = null;
foreach (WorksheetEntry entry in wsFeed.Entries)
{
worksheet = entry;
if (entry.Title.Text == worksheet_title)
{
Console.WriteLine(DateTime.Now.ToString("HH:mm") + ": Worksheet found on Google Drive.");
break;
}
}
if (worksheet.Title.Text != worksheet_title)
{
return null;
}
return worksheet;
}
public static SpreadsheetEntry fetchGoogleSpreadSheetEntry( SpreadsheetsService service, string spreadsheet_title )
{
Console.WriteLine(DateTime.Now.ToString("HH:mm") + ": Looking for spreadsheet on Google Drive.");
SpreadsheetQuery query = new SpreadsheetQuery();
SpreadsheetFeed feed;
feed = service.Query(query);
SpreadsheetEntry spreadsheet = null;
// Iterate through all of the spreadsheets returned
foreach (SpreadsheetEntry entry in feed.Entries)
{
// Print the title of this spreadsheet to the screen
spreadsheet = entry;
if (entry.Title.Text == spreadsheet_title)
{
Console.WriteLine(DateTime.Now.ToString("HH:mm") + ": Spreadsheet found on Google Drive.");
Console.WriteLine(DateTime.Now.ToString("HH:mm") + ": Looking for worksheet in spreadsheet.");
break;
}
}
if (spreadsheet.Title.Text != spreadsheet_title)
{
return null;
}
return spreadsheet;
}
我希望能够获取我想要添加到电子表格的工作表,然后将其添加到电子表格中。这没用。上面的代码在目标电子表格中创建了一个(正确标题的)工作表,但不传输工作表的任何内容。
有什么办法让它正确传输内容吗?
【问题讨论】:
-
我能想到的就是批量更新。 (这确实意味着应对非常细胞)。或者谷歌应用程序脚本有一个命令来做到这一点。您可以通过 HTML 服务调用 Google Apps 脚本。
-
@eddyparkinson 我最初使用的是批量更新,但结果证明不可靠。我现在正在使用 Apps 脚本。我稍后会发布它作为答案