測驗表
所以我正在嘗試創建一種資料庫來更新和存盤資料。據我所知,當我需要傳輸資料時,我很可能必須創建一個腳本來運行,但我很難弄清楚從哪里開始。
這個想法是在“資料收集”選項卡上,您有名稱、他們正在處理的部分以及他們制作的單位。一旦我運行腳本,它會將名稱和資料傳輸到“部分資料”選項卡并放置他們在 A 列中,然后將他們制造的單位數量放在適當的部分單元格中。然后它會清除“資料收集”中的單位欄位,以便為第二天做好準備。
這是它變得有點復雜的地方。如果名稱已存在于“部分資料”選項卡中,則不要添加新行,而是將單位數添加到該名稱下單元格中已存在的總數中。
因此,在上面的示例中,運行腳本將使“Section data”選項卡看起來像“Section Data After”作為示例。
如果名稱已經存在,則輸入的任何資料都會增加現有資料。如果它不存在,它將在第一個可用槽中創建一個新行并將其附加到現有資料的底部。舉個例子:
所以在第 1 部分的第一個選項卡中 Bob 在第 2 部分中做 11 個單位 Gina 在第 2 部分中做 5 個單位
在第二個選項卡中,我有現有資料 Bob 在第 1 部分做了 6 個單位,在第 4 部分做了 5 個單位 Jeff 在第 3 部分做了 8 個單位
如果我要點擊第一個選項卡上的傳輸腳本按鈕,它會將資料移動到第二個選項卡,就像這樣
第 1 部分中的 Bob 現在有 17 個單位,第 4 部分仍然有 5 個單位,因為沒有添加任何東西 Jeff 在第 3 部分中仍然只有 8 個單位,因為沒有為他添加新資料 Gina 將添加到 Jeff 下,有 5 個單位第 2 節
希望我解釋得足夠好。謝謝你。
誰能指出我正確的開始方向?
uj5u.com熱心網友回復:
這是完成您正在尋找的內容的腳本:
/** @OnlyCurrentDoc */
function transfer() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var input = ss.getSheetByName('Data Collection');
var data = ss.getSheetByName('Section Data');
var enteredNames = data.getRange('A:A').getValues();
var sections = data.getRange('A2:2').getValues();
var start = input.getRange('A3:A7').getRowIndex();
var end = start input.getRange('A3:A7').getNumRows();
for(var i = start; i < end; i ) {
let name = input.getRange('A' i).getValue();
if(name != '') {
let section = Number(input.getRange('B' i).getValue());
let units = Number(input.getRange('C' i).getValue());
var row = enteredNames.findIndex(row => row.includes(name)) 1;
var col = sections[0].indexOf(section) 1;
if(row > 0) {
var oldUnits = data.getRange(row, col).getValue();
if(oldUnits != '') {units = Number(oldUnits) units};
data.getRange(row,col).setValue(units);
} else {
if(units == 0) {units = ''};
let inputHere = data.getLastRow() 1;
data.getRange('A' inputHere).setValue(name);
data.getRange(inputHere, col).setValue(units);
}
}
}
input.getRange('C3:C7').clearContent();
};
此函式遍歷 Collection 表中的每個名稱,提取相關和相關資料(部分、單位),并搜索 Data 表以查看該名稱是否已經存在。如果名稱是,它然后檢查它正在尋找的部分中是否有一個值,如果有則添加它。否則,它只是放置數字。如果資料表中沒有名稱匹配,它會將它們添加到串列的末尾(并在該部分下輸入正確的單位)。
如果您對此有任何問題,請告訴我。
以下是您可以添加到同一腳本檔案或不同腳本檔案的函式。它在頂部創建一個選單,因此您可以輕松運行傳輸功能。
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Functions')
.addItem('Transfer Data', 'transfer')
.addToUi();
}
這是我對此進行測驗的作業表的鏈接。它是您提供的作業表的直接副本,唯一的區別是腳本鏈接到它。
https://docs.google.com/spreadsheets/d/1vGV3sypyfMviyv9k2lQt4CGunDkzYf-4TX-bp8goKz4/edit?usp=sharing
如果您希望我進一步解釋我的代碼,或有任何其他問題,請告訴我。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/493945.html
上一篇:Excel的groupby 版本
