Avatar billede cht22 Professor
05. november 2015 - 17:05 Der er 1 kommentar og
1 løsning

Google drive sheets script editor gemme som CSV-fil

Jeg har dette som kan gemme det område der markeres som en CSV-fil. Kan man ændre det så det markerede ark bliver gemt som CSV, uden at man behøver at markere cellerne først?

function saveAsCSV() {
  // Prompts the user for the file name
  var fileName = Browser.inputBox("Save CSV file as (e.g. myCSVFile):");

  // Check that the file name entered wasn't empty
  if (fileName.length !== 0) {
    // Add the ".csv" extension to the file name
    fileName = fileName + ".csv";
    // Convert the range data to CSV format
    var csvFile = convertRangeToCsvFile_(fileName);
    // Create a file in the Docs List with the given name and the CSV data
//DocsList
    DriveApp.createFile(fileName, csvFile);
  }
  else {
    Browser.msgBox("Error: Please enter a CSV file name.");
  }
}

function convertRangeToCsvFile_(csvFileName) {
  //der er redigeret så der bruges ; i stedet for , som seperator
  // Get the selected range in the spreadsheet
  var ws = SpreadsheetApp.getActiveSpreadsheet().getActiveSelection();
  try {
    var data = ws.getValues();
    var csvFile = undefined;

    // Loop through the data in the range and build a string with the CSV data
    if (data.length > 1) {
      var csv = "";
      for (var row = 0; row < data.length; row++) {
        for (var col = 0; col < data[row].length; col++) {
          if (data[row][col].toString().indexOf(";") != -1) {
            data[row][col] = "\"" + data[row][col] + "\"";
          }
        }

        // Join each row's columns
        // Add a carriage return to end of each row, except for the last one
        if (row < data.length-1) {
          csv += data[row].join(";") + "\r\n";
        }
        else {
          csv += data[row];
        }
      }
      csvFile = csv;
    }
    return csvFile;
  }
  catch(err) {
    Logger.log(err);
    Browser.msgBox(err);
  }
}
Avatar billede cht22 Professor
06. november 2015 - 11:55 #1
Jeg har fundet ud af hvordan jeg får den til at tage det aktive ark i stedet for det markerede område:


  var ws = SpreadsheetApp.getActiveSpreadsheet().getActiveSelection();
    var data = ws.getValues();


Skal erstattes med:


  var ActiveSheet = SpreadsheetApp.getActiveSheet(); 
  var startRow = 1; 
  var rows = ActiveSheet.getDataRange();
  var numRows = rows.getNumRows();
  var numCols = rows.getNumColumns();
  var dataRange = ActiveSheet.getRange(startRow, 1, numRows+1, numCols)
  var data = dataRange.getValues();


Jeg forstår bare ikke hvorfor den sidste linje ikke bliver separeret med ; i stedet for ,

Det har jeg dog løst ved at markere en række mere end der skal eksporteres og så undlade at eksportere den sidste linje.
Avatar billede cht22 Professor
12. november 2015 - 09:33 #2
Lukker spørgsmålet
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester