0

Google スプレッドシートを使用して研究データを収集し、ユーザーが実用的に生成されたスプレッドシートにデータを直接入力できるようにします。ユーザーがデータ行の間に空白行を入力するまで、これはかなりうまく機能しています! 読みやすくするためにこれを行うか、行を削除した可能性があります...

Googleのドキュメントはこれについて明確です:

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

リスト フィードには、最初の行から最初の空白行までのすべての行が含まれます。

したがって、問題は、これらのスプレッドシートをリッピングして、アーカイブ/ローカルデータベース用のデータを収集する「ハーベスター」スクリプトがあることです。これらのスクリプトは ListFeed を使用しているため、空白行に到達してデータが欠落すると停止します。

ドキュメントは次のことを示唆しています:

予期したデータがフィードに表示されない場合は、ワークシートを手動でチェックして、データの途中に予期しない空白行があるかどうかを確認します。

手動で!あえぎ、私は何百枚ものシートを持っています :) これが起こるたびにユーザーに怒鳴る以外に、この状況を緩和するための提案はありますか! ありがとうございました

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 である必要があります (header=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 に答える