问题
I want to export data from different data sources to Excel. This also works without problems. But I also want to output the relations here. This doesn't work or I don't quite understand how this should work.
Example: I have a data source called Company and a data source called Software. These two tables are related (n-m) to each other.
Now I want to export these relations again.
I have seen that App Maker has such a function, but unfortunately I don't quite understand how this should work.
Enclosed my code, this is the server code: Can someone explain to me how to export the relation? Thank you in advance.
//define function to do the data export
function ExportDaten(SoftwareUnternehmen) {
//create sheet to populate data
var fileName = new Date()+"Dienstleisterverzeichnis "; //file name
var newExport = SpreadsheetApp.create(fileName); // create new spreadsheet
var header = ["Name", "Vertragsgegenstand", "Ansprechpartner Dienstleister","Vertragseigner bzw. Verantwortlicher natGAS","Ansprechpartner natGAS","Verträge","App","AVV","NDA","letztes Projekt bzw. letzter Kontakt","Kreditor#","Kdnr beim Lieferanten","Klasse","ISO270001?","DSGVO Tätigkeit nach Verfahrensverzeichnis","Text AVV: Tätigkeit","Text AVV: Bewertung"]; //define header
newExport.appendRow(header); // append header to spreadsheet
//get all Unternehmen records
var ds = app.models.Unternehmen.newQuery();
var dssoftware = app.models.Software.newQuery();
var allSoftware = dssoftware.run();
var allUnternehmen = ds.run();
// Sets a rollback point and starts a new transaction.
app.transaction.cloudSql.start();
// Locks all records that are read in the transaction until the end of the transaction.
app.transaction.cloudSql.setLockOnRead(app.transaction.cloudSql.lockOnRead.UPDATE);
// Relation
var query = app.models.Unternehmen.newQuery();
query.filters.Software._key._equals = SoftwareUnternehmen;
var records = query.run();
for(var i=0; i< allUnternehmen.length; i++) {
//get each student data
var Unternehmen = allUnternehmen[i];
var UnternehmenName =Unternehmen.Hersteller;
// var UnternehmenVertragsgegenstand = Software.;
// var UnternehmenAnsprechpartnerD =Unternehmen.Ansprechpartner_Dienstleister;
// var UnternehmenVertragseigner =Unternehmen.Vertragseigner_Verantwortlicher_Unternehmen;
// var UnternehmenAnsprechpartnerNG =Unternehmen.Ansprechpartner;
// var UnternehmenVertraege =Unternehmen.Vertraege;
// var UnternehmenApp =Unternehmen.App;
// var UnternehmenAVV =Unternehmen.AVV;
// var UnternehmenNDA =Unternehmen.NDA;
// var UnternehmenProjekt =Unternehmen.letztes_Projekt_letzter_Kontakt;
// var UnternehmenKreditor =Unternehmen.Kreditor;
// var UnternehmenKdnr =Unternehmen.Kdnr;
// var UnternehmenKlasse =Unternehmen.Klasse;
// var UnternehmenISO270001 =Unternehmen.ISO270001;
// var UnternehmenDSGVO =Unternehmen.DSGVO_Taetigkeit;
// var UnternehmenText_AVV1 =Unternehmen.Text_AVV1;
// var UnternehmenText_AVV2 =Unternehmen.Text_AVV2;
for (var j= 0; j< allSoftware.length; j++) {
var Software = allSoftware[j];
var UnternehmenVertragsgegenstand = Software.Vertragsgegenstand;
var UnternehmenAnsprechpartnerD =Software.AnSP_Lieferant;
var UnternehmenVertragseigner =Software.Vetragseigner_Vertantwortlicher;
var UnternehmenAnsprechpartnerNG =Software.Ansprechpartner;
var UnternehmenVertraege =Software.Vertraege;
var UnternehmenApp =Software.App;
var UnternehmenAVV =Software.AVV;
var UnternehmenNDA =Software.NDA;
var UnternehmenProjekt =Software.letztes_Projekt;
var UnternehmenKreditor =Software.Kreditor;
var UnternehmenKdnr =Software.KDNR;
var UnternehmenKlasse =Software.Klasse1;
var UnternehmenISO270001 =Software.ISO270001;
var UnternehmenDSGVO =Software.DSGVO_Taetigkeit;
var UnternehmenText_AVV1 =Software.Text_AVV_Taetigkeit;
var UnternehmenText_AVV2 =Software.Text_AVV_Bewertung;
var newRow = [UnternehmenName, UnternehmenVertragsgegenstand, UnternehmenAnsprechpartnerD, UnternehmenVertragseigner, UnternehmenAnsprechpartnerNG, UnternehmenVertraege, UnternehmenApp, UnternehmenAVV, UnternehmenNDA, UnternehmenProjekt, UnternehmenKreditor, UnternehmenKdnr, UnternehmenKlasse, UnternehmenISO270001, UnternehmenDSGVO, UnternehmenText_AVV1, UnternehmenText_AVV2 ]; //save Unternehmensdaten in a row
newExport.appendRow(newRow); //append Unternehmen data row to spreadsheet
}
console.log("Export fertig");
return records;
} }
回答1:
A couple of things to look at maybe. When you have lots of data in a table and even more relations to that data then using appendRow() to write to sheets does in fact get somewhat inefficient and you may very well start running into script execution limits. Furthermore, your current script does include several lines of code that seem unnecessary, so I will present your code modified with unnecessary lines removed and will put a star next to lines I added in. Also, don't forget to release your lock on records at the end.
//define function to do the data export
function ExportDaten(SoftwareUnternehmen) {
//create sheet to populate data
var fileName = new Date()+"Dienstleisterverzeichnis "; //file name
var newExport = SpreadsheetApp.create(fileName); // create new spreadsheet
var header = ["Name", "Vertragsgegenstand", "Ansprechpartner Dienstleister","Vertragseigner bzw. Verantwortlicher natGAS","Ansprechpartner natGAS","Verträge","App","AVV","NDA","letztes Projekt bzw. letzter Kontakt","Kreditor#","Kdnr beim Lieferanten","Klasse","ISO270001?","DSGVO Tätigkeit nach Verfahrensverzeichnis","Text AVV: Tätigkeit","Text AVV: Bewertung"]; //define header
newExport.appendRow(header); // append header to spreadsheet
var data = []; //*
//get all Unternehmen records
var ds = app.models.Unternehmen.newQuery();
ds.prefetch.Software._add(); //*
var allUnternehmen = ds.run();
// Sets a rollback point and starts a new transaction.
app.transaction.cloudSql.start();
// Locks all records that are read in the transaction until the end of the transaction.
app.transaction.cloudSql.setLockOnRead(app.transaction.cloudSql.lockOnRead.UPDATE);
for(var i=0; i< allUnternehmen.length; i++) {
//get each student data
var Unternehmen = allUnternehmen[i];
var UnternehmenName =Unternehmen.Hersteller;
var allSoftware = Unternehmen.Software; //*
for (var j= 0; j< allSoftware.length; j++) {
var Software = allSoftware[j];
var UnternehmenVertragsgegenstand = Software.Vertragsgegenstand;
var UnternehmenAnsprechpartnerD =Software.AnSP_Lieferant;
var UnternehmenVertragseigner =Software.Vetragseigner_Vertantwortlicher;
var UnternehmenAnsprechpartnerNG =Software.Ansprechpartner;
var UnternehmenVertraege =Software.Vertraege;
var UnternehmenApp =Software.App;
var UnternehmenAVV =Software.AVV;
var UnternehmenNDA =Software.NDA;
var UnternehmenProjekt =Software.letztes_Projekt;
var UnternehmenKreditor =Software.Kreditor;
var UnternehmenKdnr =Software.KDNR;
var UnternehmenKlasse =Software.Klasse1;
var UnternehmenISO270001 =Software.ISO270001;
var UnternehmenDSGVO =Software.DSGVO_Taetigkeit;
var UnternehmenText_AVV1 =Software.Text_AVV_Taetigkeit;
var UnternehmenText_AVV2 =Software.Text_AVV_Bewertung;
var newRow = [UnternehmenName, UnternehmenVertragsgegenstand, UnternehmenAnsprechpartnerD, UnternehmenVertragseigner, UnternehmenAnsprechpartnerNG, UnternehmenVertraege, UnternehmenApp, UnternehmenAVV, UnternehmenNDA, UnternehmenProjekt, UnternehmenKreditor, UnternehmenKdnr, UnternehmenKlasse, UnternehmenISO270001, UnternehmenDSGVO, UnternehmenText_AVV1, UnternehmenText_AVV2 ]; //save Unternehmensdaten in a row
data.push(newRow); //*
}
//console.log("Export fertig");
}
newExport.getActiveSheet().getRange(2,1,data.length,header.length).setValues(data); //*
console.log("Export fertig");
}
来源:https://stackoverflow.com/questions/57754071/export-data-with-relations-in-excel