Convertir une macro Excel pour exporter une feuille sous Google Sheets

Bonjour,

Je cherche à adapter une macro Excel en macro Google Sheets afin d'exporter les valeurs d'une plage de données vers un fichier texte sur mon PC.

Voici la macro Excel :

Sub exl2txt()
'Cette macro charge les valeurs des cellules de la plage A1:A112
'dans le fichier txt C:\monfichier.txt

Open " C:\monfichier.txt " For Output As #1

'Les données sont stockées dans la feuille "kml"

For Each c In Worksheets("kml").Range("A1:A112")
a = c.Value
Print #1, a
Next c
Close #1
End Sub

Merci pour vos lumières

Bonjour XP69 et

Une petite présentation ICI serait la bienvenue

Si vous ne l'avez pas encore fait, je vous invite à lire la charte du forum [A LIRE AVANT DE POSTER]
qui vous aidera dans vos demandes et réponses sur ce forum.

J'ai déplacé votre post sur le bon forum, merci d'y faire attention.

Merci de votre participation

Cordialement

Bonjour,

c'est une mauvaise question, mais question qui revient régulièrement ... les langages VBA et GAS n'ont pas grand chose en commun, de plus il est possible de truver des solutions par formule à certains sujets

as-tu une feuille google sheet ? combien de colonnes ? quelle séparation ? quel format de sortie ... je vais faire quelque chose de simple qui s'approche de ta macro VBA à savoir une colonne => une donnée par ligne de fichier txt

à noter que celui-ci ne sera pas enregistré sur ton PC car google n'y a pas accès, mais sur ton drive

function test() {
  var kml = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('kml')
  var content = kml.getRange('A1:A' + kml.getLastRow()).getValues();
  DriveApp.createFile('monfichier.txt', content);
}

ou

function test() {
  var kml = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('kml')
  var data = kml.getRange('A1:A' + kml.getLastRow()).getValues()
  var content = ''
  data.forEach(r => r.forEach(x => content += x + '\n'))
  DriveApp.createFile('monfichier.txt', content);
}

Tout fonctionne, effectivement l'export ne peut être réalisé que dans le drive.

Un grand merci pour l'aide rapide et efficace !

Il y a un moyen (un peu plus complexe) de télécharger directement sur le PC mais en passant pas une boite de dialoguer en html.

script

function onOpen() {
  SpreadsheetApp.getUi().createMenu('⇩ M E N U ⇩')
    .addItem('👉 Download file ...', 'openSidebar')
    .addToUi();
}
function openSidebar() {
  const html = HtmlService.createHtmlOutputFromFile("index").setTitle("DOMNLOAD KML FILE");
  SpreadsheetApp.getUi().showSidebar(html);
}
function createDataUrl(type) {
  var name = 'monfichier.txt'
  const mimeTypes = { txt: MimeType.PLAIN_TXT }; 
  var kml = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('kml')
  var data = kml.getRange('A1:A' + kml.getLastRow()).getValues()
  var content = ''
  data.forEach(r => r.forEach(x => content += x + '\n'))
  var id = DriveApp.createFile(name, content).getId();
  const blob = DriveApp.getFileById(id).getBlob();
  return {
    data:
      `data:${mimeTypes[type]};base64,` + Utilities.base64Encode(blob.getBytes()),
    filename: `${name}`,
  };
}

ajoute un fichier au format html nommé index

image
<!DOCTYPE html>
<html>
<head>
</head>
<body onload="autoRun()">
  Wait during your file will automatically download ...<br/><br/>
  If any issue, click here <input type="button" value="download as XSV" onclick="download('txt')" />
<script>
  function download(type) {
    google.script.run
      .withSuccessHandler(({ data, filename }) => {
        const a = document.createElement("a");
        document.body.appendChild(a);
        a.download = filename;
        a.href = data;
        a.click();
      })
      .createDataUrl(type);
  }
  function autoRun(){
    download('txt')
    window.setTimeout(function(){google.script.host.close()},5000)
  }
</script>
</body></html>

Après pas mal de recherche et d'essai, j'ai trouvé mieux !

function downloadKMLFile() {
  var kml = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('kml')
  var content = ''
  kml.getRange('A1:A' + kml.getLastRow()).getValues().forEach(r => r.forEach(x => content += x + '\n'))
  var html = HtmlService.createHtmlOutput(`
<html><body onload="document.getElementById('dwn-btn').click()">
<textarea id="text-val" rows="10" style="display:none;">${content}</textarea>
<input type="button" id="dwn-btn" value="Download text file" style="display:none;"/>
<script>
window.close = function(){window.setTimeout(function(){google.script.host.close()},100)}
function download(filename, text) {
    var element = document.createElement('a');
    element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
    element.setAttribute('download', filename);
    element.style.display = 'none';
    document.body.appendChild(element);
    element.click();
    document.body.removeChild(element);
}
document.getElementById("dwn-btn").addEventListener("click", function(){
    var text = document.getElementById("text-val").value;
    var filename = "fichier.kml";
    download(filename, text);
  close();
}, false);
</script>
</body></html>  
  `)
    .setWidth(250).setHeight(100);
  SpreadsheetApp.getUi().showModalDialog(html, "Téléchargement du fichier ...");
}

Du grand art !

Le script exécute parfaitement le job !

Merci pour avoir peaufiné le script.

Rechercher des sujets similaires à "convertir macro exporter feuille google sheets"