2015-07-12 61 views
0

我將非常感謝您的幫助! 我有一張電子表格,裏面有4張相同的表格,它們有相同的數據模板(這張表中的所有表格都是相同的(大小,名稱,ets),只有表格中的數據是唯一的,表格名稱也是其他表格)名稱這4張。 它看起來像這樣: https://docs.google.com/spreadsheets/d/1Xdws6Vr6YVXuj19mvpOvkpJokOfY2T7Sh1aMpous_Xw/edit#gid=0在所有工作表中添加新行的腳本

我想要做什麼: 在所有4張在同一個地方添加行的同一數字。 例如,在行A11後的工作表「1. Win」中添加10行並插入下個月的日期(在示例中它必須爲01.07.2014等等)。對剩餘的紙張重複此操作。

我有一些流行的腳本,它創建彈出式窗口,我可以鍵入一些行數,然後在活動單元格中添加行。

function onOpen() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var menuEntries = [{name: "Add rows", functionName: "doGet"}]; 
    ss.addMenu("Bonus script", menuEntries); 
} 

function doGet(e) { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var app =UiApp.createApplication().setTitle('Insert Rows').setHeight(75).setWidth(225); 
    // Create a grid with 1 text box and corresponding label. 
    // Test entered into the text box is passed in to numRows. 
    // The setName extension will make the widget available by the given name to the server handlers later. 
    var grid = app.createGrid(1, 2); 
    grid.setWidget(0, 0, app.createLabel('Number of Rows to Insert:')); 
    grid.setWidget(0, 1, app.createTextBox().setName('numRows').setWidth(50)); 
    // Create a Vertical Panel and add the Grid to the Panel. 
    var panel = app.createVerticalPanel(); 
    panel.add(grid); 
    // Create a button and Click Handler. 
    // Pass in the Grid Object as a callback element and the handler as a click handler. 
    // Identify the function insertRows as the server click handler. 
    var button = app.createButton('Submit'); 
    var handler = app.createServerHandler('insertRows'); 
    handler.addCallbackElement(grid); 
    button.addClickHandler(handler); 
    // Add the button to the Panel, add Panel to the App, launch the App 
    panel.add(button); 
    app.add(panel); 
    ss.show(app); 
} 

function insertRows(e) { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getActiveSheet(); 
    var cursPos = sheet.getActiveCell().getRow(); 
    var valueRows = e.parameter.numRows; 
    sheet.insertRowsAfter(cursPos, valueRows); 
    var app = UiApp.getActiveApplication(); 
    app.close(); 
    return app; 
} 

但我不明白如何改造它滿足我的需求。我有一些想法,不要(在表「All_base」爲前A1)使用彈出窗口,行的型號在一些細胞,用於valueRows。

回答

0

它的醜陋的部分是找到一行後,你應該插入新的行。我從第6行開始,然後尋找說「圖片」的單元格,因爲您在每張表中都有。然後,插入它上面的行2個位置。

它可以通過查找最後一個日期類型的位置來完成,但是我不確定您的圖紙在空白時如何顯示,因爲它們中有許多空行。

添加10行並插入下個月日期

這是否意味着你想以1爲您添加的每一行增加一個月?如果不是,則將newDate.setMonth(newDate.getMonth()+1+i);更改爲newDate.setMonth(newDate.getMonth()+1);

function loop(howMany){ 
    if(!howMany){howMany = 2;}; 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheets = ss.getSheets();//returns an array of all sheets 
    //this is just a different way of looping through the sheets 
    for (var sheetId = 0; sheetId<sheets.length; sheetId++){ 
    if(sheets[sheetId].getSheetName() != "All_base"){ 
     var data = sheets[sheetId].getDataRange().getValues(); 
     var insertAfter = 6; 
     for(var i = 5; i<data.length; i++){ 
     if(data[i][0] == "Picture"){ 
      insertAfter = i-1; //it is actually -2, but since i starts from 0, it is already smaller by 1; 
      //actual row of Picture cell is i+1, and 2 cells up is i+1-2 = i-1 
     }; 
     }; 
     sheets[sheetId].insertRowsAfter(insertAfter, howMany); 
     //At this point we inserted rows 
     var lastDate = sheets[sheetId].getRange(insertAfter,1).getCell(1,1).getValue();//the last specified date as a Date object 
     for(var i=0; i<howMany; i++){ 
     var newDate = new Date(lastDate.getTime()); 
     newDate.setMonth(newDate.getMonth()+1+i);//automatically will increase year if the next month is in the next year. 
     sheets[sheetId].getRange(insertAfter+1+i,1).getCell(1,1).setValue(newDate); 
     }; 
    }; 
    }; 
} 

如果你想添加的搜索引擎優化和直接值的循環,你可以做到這一點通過增加

sheets[sheetId].getRange(insertAfter+1+i,2).getCell(1,1).setValue(seo); 
sheets[sheetId].getRange(insertAfter+1+i,3).getCell(1,1).setValue(direct); 

的循環,其中seodirect是您要添加的值,或加入

sheets[sheetId].getRange(insertAfter+1+i,1,1,3).setValues([[newDate,seo,direct]]); 

注:這將創建一個沒有風格行。

+0

Amayzing,它的工作原理!謝謝Ihor Husar!對不起,很長時間以來,病情很重,在醫院度過了3個月 – Twil

+0

剛開始測試,並找到一些,我想改善。我添加到一張工作表中https://docs.google.com/spreadsheets/d/1Xdws6Vr6YVXuj19mvpOvkpJokOfY2T7Sh1aMpous_Xw/edit#gid=1218307973帶有「圖片」的更多單元格,並啓動腳本。它只適用於表單中最後一個「圖片」行,如果我有更多的「圖片」單元格,它會錯過。如何爲所有的「圖片」單元格? – Twil

+0

在此處添加問題http://ru.stackoverflow.com/questions/461928/%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82-%D0%B4%D0% BB%D1%8F-%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D1% 81%D1%82%D1%80%D0%BE%D0%BA-%D0%B2%D0%BE-%D0%B2%D1%81%D0%B5%D1%85-%D0%B2%D0 %BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0%D1%請注意,真的需要你的幫助 – Twil

相關問題