=EVAL(A1)
Google ドキュメントのスプレッドシートで、 A1 が に設定されている場所のようなものを探してい"=1+2"
ます。
私は、MS Excel にEVALUATE()
関数があることを知りました (これを適切に使用するのは少し難しいようです)。しかし、Google ドキュメントで同様のものを見つけることができませんでした。
関数リストも検索しましたが、役立つものは見つかりませんでした...
=EVAL(A1)
Google ドキュメントのスプレッドシートで、 A1 が に設定されている場所のようなものを探してい"=1+2"
ます。
私は、MS Excel にEVALUATE()
関数があることを知りました (これを適切に使用するのは少し難しいようです)。しかし、Google ドキュメントで同様のものを見つけることができませんでした。
関数リストも検索しましたが、役立つものは見つかりませんでした...
前述のとおり、Google スプレッドシートには EVALUATE 関数が組み込まれていませんが、Google スプレッドシートを拡張してこの関数を追加することができます。幸いなことに、いくつかの SocialCalc ファイルを使用して、これを簡単にすることができます。
Google スプレッドシートで進捗状況を共有しています。この時点で、必要と思われる SocialCalc ファイルといくつかの関数、およびいくつかのテスト ケースを追加しました。
注:
リンクされたファイルの EVALUATE 関数は、カスタム関数として使用できます。
A1: '=1+2
(数式を Google スプレッドシートで文字列として処理するためにアポストロフィを使用していることに注意してください。
B1式:
=EVALUATE(A1)
B1 表示値:
3
のような式を「評価」する=VLOOKUP(2,A1:B3,2)
には、現時点では「高度な」パラメータを使用する必要があります。次の例を参照してください。
B1:'=VLOOKUP(2,A1:B3,2)
C1式:
=EVALUATE(B1,"data","A1:B3")
C1 表示値:
B
/**
*
* Evaluates a string formula
*
* @param {"=1+1"} formula Formula string
* @param {"Tests"} sheetName Target sheet.
* @param {"A1"} coord Target cell.
*
* @customfunction
*
*/
function EVALUATE(formula,sheetName,coord){
// SocialCalc Sheet object
var scSheet = new SocialCalc.Sheet();
if(sheetName && coord){
// Pass values from a Google sheet to a SocialCalc sheet
GS_TO_SC(scSheet,coord,sheetName);
}
var parseinfo = SocialCalc.Formula.ParseFormulaIntoTokens(formula.substring(1));
var value = SocialCalc.Formula.evaluate_parsed_formula(parseinfo,scSheet,1); // parse formula, allowing range return
if(value.type != 'e'){
return value.value;
} else {
return value.error;
}
}
/**
*
* Pass the Google spreadsheet values of the specified range
* to a SocialCalc sheet
*
* See Cell Class on socialcalc-3 for details
*
*/
function GS_TO_SC(scSheet,coord,sheetName){
var ss = SpreadsheetApp.getActiveSpreadsheet();
if(sheetName){
var sheet = ss.getSheetByName(sheetName);
var range = sheet.getRange(coord);
} else {
var range = ss.getRange(coord);
}
var rows = range.getNumRows();
var columns = range.getNumColumns();
var cell,A1Notation,dtype,value,vtype;
// Double loop to pass cells in range to SocialCalc sheet
for(var row = 1; row <= rows; row++){
for(var column = 1; column <= columns; column++){
cell = range.getCell(row,column);
A1Notation = cell.getA1Notation();
value = cell.getValue();
if(cell.isBlank()){
dtype = 'b';
vtype = 'b';
} else {
switch(typeof value){
case 'string':
dtype = 't';
vtype = 't';
break;
case 'date':
case 'number':
dtype = 'v'
vtype = 'n';
break;
}
}
scSheet.cells[A1Notation] = {
datavalue: value,
datatype: dtype,
valuetype: vtype
}
}
}
}
https://github.com/DanBricklin/socialcalc/blob/master/formula1.js
https://github.com/DanBricklin/socialcalc/blob/master/socialcalcconstants.js
https://github.com/DanBricklin/socialcalc/blob/master/socialcalc-3.js
数式をコピーして貼り付けます。
「jQuery.sheet」から必要な数式をコピーして貼り付けることができるかもしれません。へ移動:
https://github.com/Spreadsheets/WickedGrid
すべて「オープンソース」のようです
問題を修正しない
また、「標準のスプレッドシート関数を使用するスクリプトを有効にする」という問題は「修正しない」とマークされています 。https: //code.google.com/p/google-apps-script-issues/issues/detail?id=26 を参照してください。
Ethercalc Ethercalc と呼ばれる Google のようなオープンソース スプレッドシートがあります。
GUI コード: https://github.com/audreyt/ethercalc
数式: https://github.com/marcelklehr/socialcalc
デモ - 砂嵐: https://apps.sandstorm.io/app/a0n6hwm32zjsrzes8gnjg734dh6jwt7x83xdgytspe761pe2asw0
これがトリックです。必要なセルに数式を挿入し、そのセルの値を取得して、既に挿入されている数式をこの新しい値に置き換えます。
function calculateFormula(row, col){
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getSheetByName("Sheet Name");
sheet.getRange(row,col).setValue("=sum(D6,C12:C14)");
sheetData = sheet.getDataRange().getValues();
var newValue = sheetData[row-1][col-1];
sheet.getRange(row,col).setValue(newValue);
}