0

我们使用 Google 电子表格收集研究数据,并允许用户将数据直接输入到实际生成的电子表格中。在用户在数据行之间输入一个空白行之前,这一直工作得很好!他们可能会这样做是为了便于阅读,或者他们可能已经删除了一行,无论如何......

谷歌的文档对此很清楚:

https://developers.google.com/google-apps/spreadsheets/#retrieving_a_list-based_feed

列表提要包含从第一行到第一个空白行的所有行。

所以问题是我有“收割机”脚本,可以翻阅这些电子表格,收集用于存档/本地数据库的数据。这些脚本使用 ListFeed,因此当到达空白行并丢失数据时它们会停止!

文档建议:

如果 Feed 中未显示预期数据,请手动检查工作表以查看数据中间是否有意外的空白行。

手动!喘气,我有数百张纸 :) 除了每当我看到这种情况发生时对用户大喊大叫之外,您是否有减轻这种情况的建议!谢谢

4

1 回答 1

1

这是我认为我们甚至可以接近电子表格 API 的唯一方法。这不是完整的代码,它在我编写的函数中,但你明白了......它在 C# 中:

使用示例:

--row 1 = header row
--row 2 = data
--row 3 = data
--row 4 = totally blank
--row 5 = data
--row 6-100 = totally blank

用英语讲:

  1. 获取工作表的 ListFeed.Entries.Count。ListFeeds 忽略标题行,因此在此示例中计数为“2”。

  2. 获取工作表的 CellFeed 以循环浏览单元格。CellFeeds DO 包括标题行作为第 1 行,因此在示例中,从 CellFeed 的角度来看,第一个空白行必须是第 4 行(标题=1,然后是 2 个数据行,然后是终止 ListFeed 集的第一个空白行) ,因此我们应该开始在第 5 行及以后的单元格中查找任何非空的单元格:



    foreach (WorksheetEntry entry in wsFeed.Entries)
    {
    //Get the worksheet CellFeed:
    CellQuery cellQuery = new CellQuery(entry.CellFeedLink);
    CellFeed cellFeed = service.Query(cellQuery);

    //Get the worksheet ListFeed to compare with the CellFeed:
    AtomLink listFeedLink = entry.Links.FindService(
                                         GDataSpreadsheetsNameTable.ListRel, null
                                     );
    ListQuery listQuery = new ListQuery(listFeedLink.HRef.ToString());
    //need to have service object already created for this... see API docs
    ListFeed listFeed = service.Query(listQuery);

     //Now to check if there is data after the ListFeed
     //set which would indicate a blank line in the data set (not allowed)
        foreach (CellEntry cell in cellFeed.Entries)
        {
             //start looking in cells in the row after what would be the first blank row
             if (cell.Row > listFeed.Entries.Count + 2)
             {
                 if (cell.Value != "")
                 {
                     MessageBox.Show("ERROR:  There appears to be a blank row +
                                     in the middle of the data set in worksheet: " +
                                     entry.Title.Text + ".  Completely blank rows " +
                                     "are not allowed in between data rows.  Each row " +
                                     "within the data set must have at least one " +
                                     "value in at least one cell.  There CAN and " +
                                     "should be blank rows after the data set at " +
                                     "the bottom of the worksheet.");
                     return false;
                 }

             }
        }
    }

于 2013-04-23T17:19:12.937 回答