Google apps script 如何将一列数据转换为一行数据,使用空单元格作为指示符来启动新行?
首先,这是我的工作表,其中给出了两组数据的示例,以及每个数据的预期结果 这是我现在掌握的代码。它没有处于工作状态,但似乎很接近。将在我尝试不同解决方案时进行编辑Google apps script 如何将一列数据转换为一行数据,使用空单元格作为指示符来启动新行?,google-apps-script,google-sheets,Google Apps Script,Google Sheets,首先,这是我的工作表,其中给出了两组数据的示例,以及每个数据的预期结果 这是我现在掌握的代码。它没有处于工作状态,但似乎很接近。将在我尝试不同解决方案时进行编辑 // on open, add menu and bttons to test functions function onOpen() { var spreadsheet = SpreadsheetApp.getActive(); var menuItems = [ {name: 'Analyze and flip d
// on open, add menu and bttons to test functions
function onOpen() {
var spreadsheet = SpreadsheetApp.getActive();
var menuItems = [
{name: 'Analyze and flip data selection', functionName: 'flipSelection'},
{name: 'Check for first empty cell', functionName: 'firstEmptyCell'}
];
spreadsheet.addMenu('Scripts', menuItems);
}
// put data from a column into a row. on a blank line, write to new row
function flipSelection() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var testSheet = ss.getSheetByName("test");
var sheet = ss.getSheetByName("main");
var range = sheet.getActiveRange();
var numRows = range.getNumRows();
var numCols = range.getNumColumns();
var data = [];
// check active range(current selection) for values and store them in data array
for (var i = 1; i < numRows; i++){
for (var j = 1; j < numCols; j++) {
var currentValue = range.getCell(i,j).getValue();
data.push(currentValue);
}
}
// log array to verify accurate data
for (var k = 0; k < data.length; k++){
ss.toast(data[k].toString());
Logger.log(data[k].toString());
}
// for each string in data array, write to next cell. if the string is blank, go to next row and write to next cell (recursion??)
for (var n = 0; n < data.length; n++) {
// Do we have data? If not, move on
if (data[n] == "") {
//target next empty row (need help here!)
continue;
}
const colA = testSheet.getRange('A:A').getValues().join().split(",");
const rowIndex = colA.indexOf('');
const colIndex = firstEmptyCell(rowIndex); // assuming firstEmptyCell works correctly
const targetCell = testSheet.getRange(rowIndex, colIndex);
targetCell.setValue(data[n]);
}
}
// a way to find first empty cell
function firstEmptyCell (emptyRow) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var testSheet = ss.getSheetByName("test");
var range = testSheet.getRange(emptyRow, 1, 1, testSheet.getMaxColumns());
var vals = range.getValues();
// Get the index of the first empty cell from the waarden array of values
var emptyCell = vals[0].indexOf("");
// log the index of empty cell
ss.toast("The index of the first empty cell is: " + emptyCell.toString());
Logger.log("The index of the first empty cell is: %s", emptyCell);
return emptyCell;
}
//打开时,将菜单和btton添加到测试函数中
函数onOpen(){
var电子表格=SpreadsheetApp.getActive();
变量菜单项=[
{name:'分析和翻转数据选择',functionName:'翻转选择'},
{name:'检查第一个空单元格',functionName:'第一个空单元格'}
];
电子表格.addMenu(“脚本”,菜单项);
}
//将列中的数据放入行中。在空行上,写入新行
函数flipSelection(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var testSheet=ss.getSheetByName(“测试”);
var sheet=ss.getSheetByName(“主”);
var range=sheet.getActiveRange();
var numRows=range.getNumRows();
var numCols=range.getNumColumns();
var数据=[];
//检查值的活动范围(当前选择)并将其存储在数据数组中
对于(变量i=1;i
尝试以下代码:
function onOpen() {
var spreadsheet = SpreadsheetApp.getActive();
var menuItems = [
{name: 'Analyze and flip data selection', functionName: 'flipSelection'},
];
spreadsheet.addMenu('Scripts', menuItems);
}
function flipSelection()
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet= ss.getSheetByName("src");
var destSheet= ss.getSheetByName("dest");
//get datas
var datas = sheet.getDataRange().getValues();
var destDatas = [];
var row = [];
var max = 0;
var i = 0;
//start is to check if it's the beginning of parse meaning no previous data
var start = true;
//parse columns first then rows
for (var c = 0; c < datas[0].length; c++)
{
for (var r = 0; r < datas.length; r++)
{
//if cell is blank or beginning of new column
if (datas[r][c] == "" || !r)
{
i = 1;
//if it's not the beginning of program then add previous row to final data array.
if (!start)
{
destDatas.push(row);
}
//if it's a blank cell then add skip it
if (r)
r++;
//create a new row with first value inside of it
row = [datas[r][c]];
start = false;
}
//if it's not the beginning of a new column and the cell is not empty
else
{
//increment index columns of one
i++;
// Basically if there's more value than last time then set column length to column index
if (i >= max)
max = i;
//add new data to row array
row.push(datas[r][c])
}
}
}
//condition to push previous and last row into final data array
if(row)
destDatas.push(row);
//set final data array length to the same size
for(var i = 0; i < destDatas.length; i ++)
for (var j = (destDatas[i].length); j < max; j++)
destDatas[i].push("");
//set destination range and set values.
destSheet.getRange(1, 1, destDatas.length, max).setValues(destDatas);
}
函数onOpen(){
var电子表格=SpreadsheetApp.getActive();
变量菜单项=[
{name:'分析和翻转数据选择',functionName:'翻转选择'},
];
电子表格.addMenu(“脚本”,菜单项);
}
函数flipSelection()
{
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet=ss.getSheetByName(“src”);
var destSheet=ss.getSheetByName(“dest”);
//获取数据
var data=sheet.getDataRange().getValues();
var destDatas=[];
var行=[];
var max=0;
var i=0;
//开始是检查它是否是解析的开始,这意味着没有以前的数据
var start=true;
//先分析列,然后分析行
对于(var c=0;c