web-dev-qa-db-fra.com

Copier une plage dans une autre colonne, puis effacer la plage d'origine

J'ai un Google Sheets qui est mis à jour quotidiennement avec de nouvelles données d'inventaire. Actuellement, je dois insérer une colonne, copier et coller les données de A15-50 dans C15-50.

Existe-t-il un moyen d'insérer une colonne où la colonne C est (décalage des données vers la droite), copiez A15-A50 en C15-50 pour que les données d'hier soient placées dans une autre colonne (C) et que (A) soit effacé de manière à ce que les données peuvent être entrées pour la journée?

Actuellement, toutes les données de la colonne C doivent être effacées, sinon les données seront collées après les données de la colonne. C'est-à-dire que C15-50 est clair, mais que C51 a des données, les données sont enregistrées dans C52. Je copie actuellement une cellule à la fois en utilisant:

function copypasta() {
var sourceSheet = "Sheet1";
var sourceCell = "B15";
var destinationSheet = "Sheet1";
var destinationCell = "C15"; 
var ss = SpreadsheetApp.getActive();
var sourceValue = ss.getSheetByName(sourceSheet).getRange(sourceCell).getValue();
var destSheet = ss.getSheetByName(destinationSheet);

var destRange = destSheet.getRange(destinationCell);

var destRow = destRange.getRow();

var destCol = destRange.getColumn();

var destValues = destSheet.getRange(destRow,destCol,Math.max(1,destSheet.getLastRow()-destRow+1)).getValues();

 for (var i=destValues.length-1;i>=0;--i) {    if (destValues[i]) break;   }
 if (destValues[i]!="") i=i+1;   destSheet.getRange(destRow+i,destCol).setValue(sourceValue);   }

ensuite:

 function clearOrder() {
  SpreadsheetApp.getActiveSheet().getRange('C15').setValue('');
}

Puis-je changer le script pour écraser les données de la colonne C? Y a-t-il un moyen de travailler sur toute la gamme (C15-50) au lieu de le faire cellule par cellule?

J'ai une petite expérience de script mais je me considérerais comme un amateur.

1
Nifty Nate

Existe-t-il un moyen d'insérer une colonne où la colonne C est (décalage des données vers la droite)?

Oui il y a. De https://developers.google.com/apps-script/reference/spreadsheet/sheet

  • insertColumnAfter (afterPosition)
    • Insère une colonne après la position de colonne donnée. insertColumnBefore (beforePosition)
    • Insère une colonne avant la position de colonne donnée.
  • insertColumns (columnIndex)
    • Insère une colonne vierge dans une feuille à l'emplacement spécifié.

Y a-t-il un moyen de travailler sur toute la gamme (C15-50) au lieu de le faire cellule par cellule?

Oui il y a. De https://developers.google.com/apps-script/reference/spreadsheet/sheet

  • getRange (ligne, colonne, numRows, numColumns)
    • Retourne la plage avec la cellule en haut à gauche aux coordonnées données avec le nombre donné de lignes et de colonnes.
  • getRange (a1Notation)
    • Retourne la plage spécifiée en notation A1 ou en notation R1C1.

Il est intéressant de noter que getRange (a1Notation) pourrait être une référence de cellule unique ou une "référence de cellule multiple", comme 'C15:C50'.

1
Rubén
var sourceRange = sourceSheet.getRange("A15:A50");
var destRange=sourceSheet.getRange("C15:C50"); 
sourceRange.copyTo(destRange);
sourceRange.clearContent();
1
Maarten Troost