1

私はこれを、私が直面しているこの問題の解決策を回避することを期待して共有しています。ドロップダウンメニューの値を取得するためにデータ検証を使用しています。値は、「計算」と呼ばれるシートのRange(「A1:A40」)から取得されます</p>

同じドロップダウン値と同じパターンを使用するスプレッドシートが約50あるので、importRange関数を使用してSheet( "Calculation")。Range( "A1:A50")に情報を入力することにしました。importRangeは、その目的のために専用の別のスプレッドシートからリストを取得していました。

これを行う目的は、これが更新および変更するカテゴリのリストであり、50以上のスプレッドシートの値を手動で変更することなく、ドロップダウンメニューでこれらの変更を考慮に入れるためです。

理論的にはこれは問題なく機能しますが、importRange関数は非常に気まぐれであり、ランダムなスプレッドシートで発生する#REFエラーを示します。同じ問題からの不満のある投稿を見たので、importRangeが実行可能な解決策になることをあきらめました。

このような問題を回避するための適切な回避策について、ご意見をお聞かせください。

私が考えた解決策の1つは、あるシートからこれらすべてのシートに値をコピーするスクリプトを作成し、このスクリプトを毎日機能させることですが、あるスプレッドシートから別のスプレッドシートに範囲全体をコピーする方法がわかりませんでした。率直に言って、これかどうかはわかりません。ソリューションが最適です。

クロススプレッドシートスクリプトを使用した私の経験では、50枚以上のシートのいくつかのセルからデータを取得するスクリプトはおそらく5分以上かかり、最終的には許可された時間を超えて停止します。

4

5 に答える 5

2

フラッシュ機能を実行させるメニュー項目を追加してみてください。この機能により が機能することがわかりましたimportRange

function onOpen() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var menuEntries = [];
    menuEntries.push({name: "Refresh", functionName: "SheetFlush"});
    ss.addMenu("Menu", menuEntries);
}

function SheetFlush(worksheet) {
    worksheet = worksheet || SpreadsheetApp.getActive();
    var sheets = worksheet.getSheets();
    SpreadsheetApp.flush();
}
于 2012-08-28T22:10:16.000 に答える
1

50 個のスプレッドシートのうち、このエラーが発生するスプレッドシートはいくつありますか? また、ユーザーは importRange() を実行できるように元のスプレッドシートにアクセスできますか?

スクリプトはあなたのケースには理想的ではないかもしれません.importRangeを追求してそれを機能させる方が良いでしょう.

于 2012-06-29T05:19:08.827 に答える
1

インポート機能の信頼性にも問題がありました。私たちの場合、情報を自動的に更新する必要がありましたが、アプリケーションでは 1 日 1 回で十分でした。

私たちの解決策は、毎晩 1 回、値をコピーして貼り付けるスクリプトでした。また、ユーザーがオンデマンドで更新を強制できるメニュー項目も含めました。

維持するシートが 50 枚もなかったので、スクリプトを書くのは簡単でした。状況に応じて、ID を 1 か所に保持し、スクリプトを各スプレッドシートでループさせるか、各スプレッドシートで独自のスクリプトを実行させることができます。

注 - プライベート シートの情報から公開レポートをまとめていました。レポートは、埋め込みグラフを使用して Web サイトに表示されていました。グラフにエラーが表示されることがよくありましたが、パブリック シートに戻ってインポート機能を更新することで修正されました。

于 2012-07-03T17:06:08.700 に答える
0

スプレッドシートへのアクセス方法を指定していただけますか?気質関数のようなものはないと思います...それは一般的に十分に定義されていないものであり、ランダムエラーを引き起こします。

于 2012-06-29T04:58:53.317 に答える
0

セルの数式を元に戻すことにより、インポート範囲の再計算を強制します

必須:

インポートされたデータ - すべてがコピーされるターゲット。

インポートされたデータ構成 - 次のフィールドがあります。

+---------------------------------------------+--- ------------------------------+
| | あ | ビ |
+---------------------------------------------+--- ------------------------------+
| | 次のキーを使用して、スプレッドシートからデータをインポートします。キー |
| | 次の範囲のスプレッドシートからデータをインポート: | A:AA |
| | インポートされたデータ 列を選択: | SELECT * |
| | インポートされたデータの条件: | WHERE Col15 に「Offered」が含まれています |
| | インポートされたデータは、列ごとに並べ替える必要があります: | 並べ替え Col1 |
+---------------------------------------------+--- ------------------------------+

脚本:

function onOpen() {
try {
var ss = SpreadsheetApp.getActiveSpreadsheet();
}
catch(err)
{
Browser.msgBox(err);
}

var configsheet = ss.getSheetByName("Imported Data Config");

var configkey = configsheet.getRange("B1").getValue();
var configrange = configsheet.getRange("B2").getValue();
var configselect = configsheet.getRange("B3").getValue();
var configwhere = configsheet.getRange("B4").getValue();
var configorderby = configsheet.getRange("B5").getValue();

var importedsheet = ss.getSheetByName("Imported Data");
importedsheet.getRange("A1").setValue('=QUERY(IMPORTRANGE("' + configkey + '","' + configrange + '"),"' + configselect + ' ' + configwhere + ' ' + configorderby + '")');

SpreadsheetApp.flush();

// Solution of sourcecode is: http://stackoverflow.com/questions/13631584/how-can-i-force-a-recalculation-of-cell-using-importrange-function-in-a-google-s
// OnOpen Trigger: https://developers.google.com/apps-script/understanding_triggers
// Active Spreadsheet solution: https://productforums.google.com/forum/#!topic/docs/XIY0WNX0uL8

Browser.msgBox("Sync Complete!");
}

これにより、スクリプトを編集せずに数式を変更でき、さまざまなシート間でスクリプトを簡単に転送できます。

于 2014-01-30T19:35:37.170 に答える