Copy column with filter

92 views
Skip to first unread message

Guillaume VILLAIN

unread,
Dec 1, 2020, 6:54:48 AM12/1/20
to Google Apps Script Community
Hello All

I copy columns from tab "onglet_import" to tab "onglet_donnees" like that :

    derniereLigneImport = onglet_import.getLastRow();
    nbligne = derniereLigneImport-1;

    var source_range = onglet_import.getRange(2, 2,nbligne, 8); 
    var target_range = onglet_donnees.getRange(2, 1,nbligne, 8);
    source_range.copyTo(target_range);

Example : 
- 1/ I have 30 lines in "onglet_import". 
- 2/ I launch my function copy
- 3/ Result : I have 30 lines in "onglet_donnees".

My problem is : 

When I use a filter in onglet_import, my result is false.

Example :
- 1/ I have 30 lines in "onglet_import". 
- 2/ I put a filter in my colums => I have 10 lines visibles and 20 lines hiddens.
- 3/ I launch my function copy
- 4/ Result : I have 30 lines in "onglet_donnees" => My 10 lines visibles + My 10 lines visibles + My 10 lines visibles (So, I don't see my 20 lines hiddens, that is ok)


Tanaike

unread,
Dec 1, 2020, 9:12:48 PM12/1/20
to Google Apps Script Community
  • I think that when only cell values are copied, I would like to propose to use Spreadsheet service. But in your question, I understood you wanted to use `copyTo`. In this case, I would like to propose to use Sheets API.
  • From your question, I suppose that "filter" in your situation is the basic filter.

From above situation, the sample script is as follows. Before you use this, please enable Sheets API at Advanced Google services.

const srcSheetName = "onglet_import";  // Please set the source sheet name.
const dstSheetName = "onglet_donnees";  // Please set the destination sheet name.

const ss = SpreadsheetApp.getActiveSpreadsheet();
const srcSheet = ss.getSheetByName(srcSheetName);
const srcSheetId = ss.getSheetByName(srcSheetName).getSheetId();
const dstSheetId = ss.getSheetByName(dstSheetName).getSheetId();
const reqs = [];
let dstRow = 0;
for (let r = 1; r <= srcSheet.getLastRow(); r++) {
  if (!srcSheet.isRowHiddenByFilter(r)) {
    reqs.push({copyPaste: {
      source: {sheetId: srcSheetId, startRowIndex: r - 1, endRowIndex: r, startColumnIndex: 0},
      destination: {sheetId: dstSheetId, startRowIndex: dstRow, endRowIndex: dstRow + 1, startColumnIndex: 0}
    }});
    dstRow++;
  }
}
Sheets.Spreadsheets.batchUpdate({requests: reqs}, ss.getId());

  • When above script is run, the visible rows are copied from the source sheet to the destination sheet.


Reply all
Reply to author
Forward
0 new messages