2014-03-26 66 views
0

我是新來這個網站的主要目的,我打算追求在編程職業生涯。我把我的第一份工作交給了一家工程公司,他要求我建立一個系統,在這個系統中他們可以輕鬆地確定提交工作和完成工作之間的時間。我們現在使用電子表格文檔來完成某些部分。谷歌電子表格確定在一排細胞中的最低數量

我正在尋找在Google Docs中創建一個自定義函數,該函數將允許我遍歷C行中的值的數組,然後將它與函數被調用的數字進行比較,將數字與數字進行比較數組並給我哪一個是較小的數字。 編輯:該函數將被稱爲位於同一個項目文件中的另一個名爲「解析數據」的工作表。它的目的是自動記錄當前項目的訂單號(僅用於組織)我計劃實施的所有其他功能將基於此訂單號是否正確。

到目前爲止,我收集了這麼多(我在飛,因爲我還缺乏經驗中學習這一點,所以大家多多包涵。)

{ 
/**created by Alexander Bickford for use at Double E Company 
*sorts through a range of values to determine the lowest next value 
*returns lowest determined value of next cell 
*/ 
//List Of To Be Implemented Functions 
// sheet.appendRow 

function setValue(num) 
    { 
    var ss = SpreadsheetApp.getActiveSpreadsheet('parsed data'); 
    var ss = ss.getSheets()[0]; 
    var myRange = ss.getRange("C:C").getValues(); 
    newValues = []; 
    for(i=1;i<=myRange;i++) //Loop to traverse the C range and find the lowest value. 
    { 
     if(num<=range[3][i]) 
     { 
     } 
     else 
     num = range[3][i]; 
    } 
    return num; 
    } 
} 

當我調用該函數在電子表格中,我收到一條錯誤消息: 錯誤:ReferenceError:「SPREADSHEET_ID_GOES_HERE」未定義。 (8號線,文件「守則」)

谷歌預先定義在頂部的一些功能看起來像這樣:

/** 

* Retrieves all the rows in the active spreadsheet that contain data and logs the 
* values for each row. 
* For more information on using the Spreadsheet API, see 
* https://developers.google.com/apps-script/service_spreadsheet 

function readRows() {      <---Line 8 in the file 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var rows = sheet.getDataRange(); 
    var numRows = rows.getNumRows(); 
    var values = rows.getValues(); 

    for (var i = 0; i <= numRows - 1; i++) { 
    var row = values[i]; 
    Logger.log(row); 
    } 
}; 


* Adds a custom menu to the active spreadsheet, containing a single menu item 
* for invoking the readRows() function specified above. 
* The onOpen() function, when defined, is automatically invoked whenever the 
* spreadsheet is opened. 
* For more information on using the Spreadsheet API, see 
* https://developers.google.com/apps-script/service_spreadsheet 

function onOpen() { 
    var sheet = SpreadsheetApp.getActiveSpreadsheet(); 
    var entries = [{ 
    name : "Read Data", 
    functionName : "readRows" 
    }]; 
    sheet.addMenu("Script Center Menu", entries); 
}; 
End Code I don't need */ 

我認爲它是與前面的線(我指出,8號線)。有什麼想法嗎?

回答

0

下面的代碼適合我。

var ss = SpreadsheetApp.getActiveSheet(); 
var myRange = ss.getRange("C:C").getValues(); 
newValues = []; 
for(i=1;i<=myRange.length;i++) 
{ 
    Logger.log(myRange[i]); 
} 
+0

你能否解釋一下行詳細一點給我嗎?我對此非常陌生,並試圖將自己定位於每條線的執行方式。另外,我之前應該提到,我正試圖從位於同一個項目文件中的不同工作表獲取信息。例如,我想查看的工作表稱爲「解析數據」,我想將我從其中獲取的信息放入標題爲「報告狀態」的文件中。 –

0

看着你的代碼,好像你有幾個問題。

  1. 你似乎混合了「電子表格」,和你的「SS」作爲變量勢必會引起你一些問題的冗餘宣言「表」。

  2. 你似乎在傳遞不正確的方法的參數。早些時候使用Google App腳本時,我遇到了同樣的問題。它花了很多時間在Google的文檔上打探(你應該看看:https://developers.google.com/apps-script/)。你似乎正在犯同樣的錯誤,用類比法編碼。看着谷歌的示例代碼,並試圖複製,勢必會讓你陷入一些麻煩。

一些有用的建議:

  1. 最令人困惑的事情,以繞到你的頭結構:電子表格>>板材>>範圍,你必須移動之前與一個人的處理明確地在上面到底部的人。
  2. 從getActiveSpreadsheet()中刪除'parsed data'參數,它應該是空白的。你想要使用的是「getSheetByName(」解析數據「)」並將其傳遞給一個表變量。
  3. 在for循環中,還需要使用「.length」方法,或者使用「.getLastRow()」方法和表單對象來查找表單中的最後一行。

您的代碼可能是這個樣子:

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet1 = ss.getSheetByName("parsed data"); 
var endRowNumber = sheet1.getLastRow(); 
//insert rest of code 
+0

我繼續爲我的這個項目編寫其他函數,我注意到你在說什麼,但我很感謝你解釋它。 –

相關問題