Excel Funktionen
Excel lesen & schreiben
Mit der Scripting Funktion der FVA-Workbench ist es möglich Daten aus einer Exceldatei zu lesen oder Werte in die Datei zu schreiben. So können z.B. Eingabewerte für die Verzahnung direkt aus einer Excel-Datei gelesen werden um damit die entsprechenden Attribute im Getriebemodell der FVA-Workbench zu belegen. Am Anschluss können die Ergebnisse der Berechnung dann in die Excel-Datei geschrieben werden.
Die Formatierung der Exceldatei bzw. der Zellen kann direkt im Script über Funktionen wie z.B. setBackgroundColor("B4", Red)
erfolgen. Alternativ kann auch eine bereits formatierte Exceldatei als Vorlage eingelesen werden. Die Formatierung dieser Vorlage wird übernommen und es werden nur die Werte in den angegebenen Zellen ersetzt bzw. eingefügt.
Die Funktionen zum Lesen, Schreiben und Bearbeiten von Excel-Dokumenten werden alle auf einem Workbook-Objekt ausgeführt. Das Workbook ist ein Datenobjekt, das den Verweis auf ein konkretes Excel-Dokument enthält.
Das Layout und der Inhalt des angegebenen Excel-Dokuments wird dabei übernommen.
let excelfile = "c:/example/excelfile.xlsx"; let workbook = workbookFactory.createWorkbook(excelfile);
Die Funktionen werden dann mit der Punktnotation auf dem jeweiligen Workbook-Objekt ausgeführt.
workbook.setValue("A1", 5.241);
Um das Excel-Dokument mit den gemachten Änderungen zu überschreiben, wird folgende Funktion verwendet:
workbook.writeToFile(excelfile);
Existiert die in writeToFile() angegebene Datei nicht, wird sie angelegt.
Hinweis
Ein Workbook-Objekt kann auch ohne Angabe eines konkreten Excel-Dokuments angelegt werden.
let workbook = workbookFactory.createNewWorkbook();
Diese Vorgehensweise wird empfohlen, wenn keine Excel-Vorlage verwendet wird und die Formatierung nur über Skriptfunktionen erfolgen soll.
Daten lesen
getValue()
getValue(CELL); | ||
Parameter | Typ | Beschreibung |
CELL | string | Adresse der Excel Zelle (z.B. C12) |
Beispiel Wert aus einer Excel Zelle lesen
1let excelfile = "c:/example/excelfile.xlsx"; 2let workbook = workbookFactory.createWorkbook(excelfile); 3let value = workbook.getValue("B3"); 4println(value);
getValuesRow()
getValuesRow(CELL, length); | ||
Parameter | Typ | Beschreibung |
CELL | string | Adresse der Excel Zelle (z.B. C12) |
length | int | Anzahl der Zellen in horizontaler Richtung die eingelesen werden. |
Mögliche Fehler | Die Excel Datei existiert nicht. |
Beispiel Zeile aus Excel-Datei lesen
1let excelfile = "c:/example/excelfile.xlsx"; 2let workbook = workbookFactory.createWorkbook(excelfile); 3let array = workbook.getValuesRow("B3", 5); 4println(array);
getValuesColumn()
getValuesColumn(CELL, length); | ||
Parameter | Typ | Beschreibung |
CELL | string | Adresse der Excel Zelle (z.B. C12) |
length | int | Anzahl der Zellen in vertikaler Richtung die eingelesen werden. |
Mögliche Fehler | Die Excel Datei existiert nicht. |
Beispiel Array als Spalte aus einer Excel-Datei lesen
1let excelfile = "c:/example/excelfile.xlsx"; 2let workbook = workbookFactory.createWorkbook(excelfile); 3let array = workbook.getValuesColumn("B3", 5); 4println(array);
getValuesMatrix()
getValuesMatrix(CELL, rowlength, collength); | ||
Parameter | Typ | Beschreibung |
CELL | string | Adresse der Excel Zelle (z.B. C12) |
rowlength | int | Anzahl der Zeilen die eingelesen werden. |
collength | int | Anzahl der Spalten die eingelesen werden. |
Mögliche Fehler | Die Excel Datei existiert nicht. |
Beispiel Matrix aus Excel-Datei lesen
1let excelfile = "c:/example/excelfile.xlsx"; 2let workbook = workbookFactory.createWorkbook(excelfile); 3let matrix = workbook.getValuesMatrix("B3", 4, 5); 4println(matrix);
getValuesMatrixT()
getValuesMatrixT(CELL, rowlength, collength); | ||
Parameter | Typ | Beschreibung |
CELL | string | Adresse der Excel Zelle (z.B. C12) |
rowlength | int | Anzahl der Zeilen die eingelesen werden. |
collength | int | Anzahl der Spalten die eingelesen werden. |
Mögliche Fehler | Die Excel Datei existiert nicht. |
Beispiel Matrix aus Excel-Datei lesen und transponieren
1let excelfile = "c:/example/excelfile.xlsx"; 2let workbook = workbookFactory.createWorkbook(excelfile); 3let matrix = workbook.getValuesMatrixT("B3", 4, 5); 4println(matrix);
getFormula()
getFormula(CELL) | ||
Parameter | Typ | Beschreibung |
CELL | string | Adresse der Excel Zelle (z.B. C12) |
Beispiel Formel aus einer Excel Zelle lesen und auf dem Scripting-Monitor ausgeben
let excelfile = "c:/example/excelfile.xlsx"; let workbook = workbookFactory.createWorkbook(excelfile); let formula = workbook.getFormula("C12"); println(formula);
Daten schreiben
setValue()
setValue(CELL, value); | ||
Parameter | Typ | Beschreibung |
CELL | string | Adresse der Excel Zelle (z.B. C12) |
value | int double string | Wert, der in die Zelle geschrieben wird. |
Mögliche Fehler | Der Benutzer hat keine Schreibberechtigung für die angegebene Excel Datei. Die Excel Datei ist in einer anderen Anwendung geöffnet. |
Beispiel Wert in eine Excel Zelle schreiben
1let excelfile = "c:/example/excelfile.xlsx"; 2let workbook = workbookFactory.createWorkbook(excelfile); 3workbook.setValue("B3", 12.3); 4workbook.writeToFile(excelfile);
setRichText()
setRichText(CELL, {format}string); | ||||||||||||||
Parameter | Typ | Beschreibung | ||||||||||||
CELL | string | Adresse der Excel Zelle (z.B. C12) | ||||||||||||
{format} |
| Steuerzeichen, die zur Angabe des Textformats verwendet werden. Die Steuerzeichen können kombiniert werden. | ||||||||||||
string | string | Zu formatierender Text |
Beispiel Formatierten Text in Excel Zellen schreiben
1let excelfile = "c:/example/excelfile.xlsx"; 2let workbook = workbookFactory.createWorkbook(excelfile); 3workbook.setRichText("B3", "{b}This text is displayed in bold"); 4workbook.setRichText("B4", "{b}This text is displayed in bold {}This text has no formatting"); 5workbook.setRichText("B5", "{bi}This text is displayed in bold and italic"); 6workbook.writeToFile(excelfile);
Variable excelfile mit dem Pfad zur Exceldatei belegen. | |
Excel Datenobjekt erstellen und der Variablen workbook zuweisen. | |
Fett formatierten Text in Zelle B3 schreiben. | |
Formatierten Text in Zelle B4 schreiben. Der erste Teil ist fett. Die leeren Klammern heben die Formatierung für den zweiten Teil des Textes auf. | |
Fett und kursiv formatierten Text in Zelle B5 schreiben. | |
Änderungen an der Excel Datei herausschreiben. |
setValuesRow()
setValuesRow(CELL, array); | ||
Parameter | Typ | Beschreibung |
CELL | string | Adresse der Excel Zelle (z.B. C12) |
array | int Array double Array string Array | Array, dessen Werte herausgeschrieben werden. |
Mögliche Fehler | Der Benutzer hat keine Schreibberechtigung für die angegebene Excel Datei. Die Excel Datei ist in einer anderen Anwendung geöffnet. |
Beispiel Array als Zeile in Excel-Datei herausschreiben
1let excelfile = "c:/example/excelfile.xlsx"; 2let workbook = workbookFactory.createWorkbook(excelfile); 3let array = [1.2, 1.4, 1,7, 1.9]; 4workbook.setValuesRow("B3", array); 5workbook.writeToFile(excelfile);
setValuesColumn()
setValuesColumn(CELL, array); | ||
Parameter | Typ | Beschreibung |
CELL | string | Adresse der Excel Zelle (z.B. C12) |
array | int Array double Array string Array | Array, dessen Werte herausgeschrieben werden. |
Mögliche Fehler | Der Benutzer hat keine Schreibberechtigung für die angegebene Excel Datei. Die Excel Datei ist in einer anderen Anwendung geöffnet. |
Beispiel Array von Werten als Spalte in Excel herausschreiben
1let excelfile = "c:/example/excelfile.xlsx"; 2let workbook = workbookFactory.createWorkbook(excelfile); 3let array = [1.2, 1.4, 1,7, 1.9]; 4workbook.setValuesColumn("B3", array); 5workbook.writeToFile(excelfile);
setValuesMatrix()
setValuesMatrix(CELL, matrix); | ||
Parameter | Typ | Beschreibung |
CELL | string | Adresse der Excel Zelle (z.B. C12) |
matrix | int Matrix double Matrix string Matrix | Matrix, deren Werte herausgeschrieben werden. |
Mögliche Fehler | Der Benutzer hat keine Schreibberechtigung für die angegebene Excel Datei. Die Excel Datei ist in einer anderen Anwendung geöffnet. |
Beispiel Matrix von Daten in Excel-Datei herausschreiben
1let stageID = getCompByType('cylindrical_mesh')[0]; 2let excelfile = "c:/example/excelfile.xlsx"; 3let workbook = workbookFactory.createWorkbook(excelfile); 4let matrix = getAttr("local_methods_grid_pressure_z", stageID, RDAT); 5workbook.setValuesMatrix("B3", matrix); 6workbook.writeToFile(excelfile);
Variable stageID mit der Komponenten-ID der ersten Stirnradstufe im Modell belegen. | |
Variable excelfile mit dem Pfad zur Exceldatei belegen. | |
Excel Datenobjekt erstellen und der Variablen workbook zuweisen. | |
Matrix Flankenpressung via getAttr() lesen und in die Variable Matrix schreiben. | |
Matrixbeginnend bei Adresse B3 schreiben. | |
Änderungen an der Excel Datei herausschreiben. |
setValuesMatrixT()
setValuesMatrix(CELL, matrix); | ||
Parameter | Typ | Beschreibung |
CELL | string | Adresse der Excel Zelle (z.B. C12) |
matrix | int Matrix double Matrix string Matrix | Matrix, deren Werte transponiert herausgeschrieben werden. |
Mögliche Fehler | Der Benutzer hat keine Schreibberechtigung für die angegebene Excel Datei. Die Excel Datei ist in einer anderen Anwendung geöffnet. |
Beispiel Transponierte Matrix von Daten in Excel-Datei herausschreiben
1let stageID = getCompByType('cylindrical_mesh')[0]; 2let excelfile = "c:/example/excelfile.xlsx"; 3let workbook = workbookFactory.createWorkbook(excelfile); 4let matrix = getAttr("local_methods_grid_pressure_z", stageID, RDAT); 5workbook.setValuesMatrixT("B3", matrix); 6workbook.writeToFile(excelfile);
Variable stageID mit der Komponenten-ID der ersten Stirnradstufe im Modell belegen. | |
Variable excelfile mit dem Pfad zur Exceldatei belegen. | |
Excel Datenobjekt erstellen und der Variablen workbook zuweisen. | |
Matrix Flankenpressung via getAttr() lesen und in die Variable Matrix schreiben. | |
Matrix beginnend bei Adresse B3 schreiben. | |
Änderungen an der Excel Datei herausschreiben. |
setFormula()
setFormula(CELL, formula) | ||
Parameter | Typ | Beschreibung |
CELL | string | Adresse der Excel Zelle (z.B. C12) |
formula | string | Formel, die in die Zelle geschrieben wird |
Hinweis
Die Hilfsfunktion getSupportedFunctionNames() ermöglicht es, eine Liste aller unterstützten Excel-Funktionen zu erstellen.
Script zum Ausgeben der Funktionsliste auf dem Scripting-Monitor:
let workbook = workbookFactory.createNewWorkbook(); print(workbook.getSupportedFunctionNames());
Hinweis
Bei der Verwendung von Excel unter Office356 muss den Funktionsnamen das Präfix _xlfn.
vorangestellt werden.
Script zum Schreiben der Formel für die Summe aus den Zellen A2 und B2 in Zelle A1:
workbook.setFormula("A1", "_xlfn.SUM(A2;B2)");
Beispiel Formel in eine Excel Zelle schreiben und Ergebnis auswerten
let excelfile = "c:/example/excelfile.xlsx"; let workbook = workbookFactory.createWorkbook(excelfile); workbook.setFormula("C12", "SUM(D2;A13)"); workbook.evaluateFormulaCell("C12"); workbook.writeToFile(excelfile);
Hilfsfunktionen
getRelCellAddr()
getRelCellAddr(referenceCellAddress, distanceHorizontal, distanceVertical); | ||
Parameter | Typ | Beschreibung |
referenceCellAddress | string | Adresse der Referenz Excel Zelle (z.B. C12) |
distanceHorizontal | int | Horizontaler Abstand zur Referenzzelle |
distanceVertical | int | Vertikaler Abstand zur Referenzzelle |
Beispiel Relative Zellenadresse abfragen
1let excelfile = "c:/example/excelfile.xlsx"; 2let workbook = workbookFactory.createWorkbook(excelfile); 3let relativeAdress = workbook.getRelCellAddr("B3", 5, 3); 4println(relativeAdress);
Variable excelfile mit dem Pfad zur Exceldatei belegen. | |
Excel Datenobjekt erstellen und der Variablen workbook zuweisen. | |
Abfrage der Zelladresse, die sich 5 Zellen rechts und 3 Zellen unterhalb von B3 befindet. | |
Ausgabe der relativen Zellenadresse "G6" auf dem Scripting Monitor. |
isFileWriteable()
isFileWriteable(pathToFile); | ||
Parameter | Typ | Beschreibung |
pathToFile | string | Pfad zur Exceldatei die geprüft werden soll. |
Beispiel
Bevor Änderungen an der Excel-Datei herausgeschrieben werden, prüft das Skript, ob die Datei beschreibbar ist. Wenn nicht, wird in einem Dialog eine Meldung angezeigt, die den Benutzer auffordert, die Datei zu schließen. Wenn die Meldung mit OK quittiert wird und die Datei immer noch nicht beschreibbar ist, wird der Dialog erneut angezeigt. Wenn die Datei dann immer noch nicht beschreibbar ist, wird das Skript abgebrochen und eine Meldung auf dem Scripting-Monitor angezeigt.
1let excelfile = "c:/example/excelfile.xlsx"; 2let workbook = workbookFactory.createWorkbook(excelfile); 3let messageCount = 0; 4while(workbook.isFileWriteable(excelfile) == false){ 5 if(messageCount == 2){ 6 stopScript("Script could not be executed") } 7 alert("Output file is still open. Please close."); 8 messageCount++; } 9workbook.writeToFile(excelfile);
Variable excelfile mit dem Pfad zur Exceldatei belegen. | |
Excel Datenobjekt erstellen und der Variablen workbook zuweisen. | |
Die Variable messageCount speichert, wie oft der Dialog bereits angezeigt wurde. | |
While-Schleife, die solange durchlaufen wird, bis die Funktion isFileWriteable() true zurückgibt. | |
Wenn die Variable messageCount gleich 2 ist | |
wird die Scriptausführung abgebrochen und die Meldung "Script could not be executed" ausgegeben. | |
Dialogfenster mit der Meldung "Output file is still open. Please close." anzeigen. | |
Variable messageCount bei jedem Schleifendurchlauf um 1 erhöhen. | |
Änderungen an der Excel Datei herausschreiben. |
evaluateAllFormulaCells()
evaluateAllFormulaCells(); | ||||
Parameter | Typ | Beschreibung | ||
- | - | - |
Beispiel
let excelfile = "c:/example/excelfile.xlsx"; let workbook = workbookFactory.createWorkbook(excelfile); workbook.evaluateAllFormulaCells(); workbook.writeToFile(excelfile);
evaluateFormulaCell()
evaluateFormulaCell(CELL); | ||||
Parameter | Typ | Beschreibung | ||
CELL | string | Adresse der Excel Zelle (z.B. C12) |
Beispiel
let excelfile = "c:/example/excelfile.xlsx"; let workbook = workbookFactory.createWorkbook(excelfile); workbook.evaluateFormulaCell("C12"); workbook.writeToFile(excelfile);
Arbeitsblätter
isSheet()
isSheet(sheetName); | ||
Parameter | Typ | Beschreibung |
sheetName | string | Name des zu prüfenden Arbeitsblatts. |
Rückgabewert | boolean | true - Das Arbeitsblatt existiert false - Kein Arbeitsblatt mit diesem Namen vorhanden |
Beispiel
Prüfung, ob ein Arbeitsblatt mit dem Namen "results" existiert. Wenn ja, wird es als aktives Arbeitsblatt gesetzt. Wenn nein, wird ein neues Arbeitsblatt mit dem Namen "results" angelegt und als aktives Arbeitsblatt festgelegt.
1let excelfile = "c:/example/excelfile.xlsx"; 2let workbook = workbookFactory.createWorkbook(excelfile); 3let sheetForResults = "results"; 4if (workbook.isSheet(sheetForResults)) { 5 workbook.setCurrentSheet(sheetForResults); 6}else { 7 workbook.createSheet(sheetForResults, true); } 8workbook.writeToFile(excelfile);
Variable excelfile mit dem Pfad zur Exceldatei belegen. | |
Excel Datenobjekt erstellen und der Variablen workbook zuweisen. | |
Variable sheetForResults mit dem Namen des Arbeitsblatts belegen in das geschrieben werden soll ("results"). | |
Wenn bereits ein Arbeitsblatt mit dem Namen results exisitiert, | |
wird es als aktives Arbeitsblatt gesetzt. | |
Ansonsten | |
wird ein neues Arbeitsblatt mit dem Namen "results" angelegt und als aktives Arbeitsblatt festgelegt. | |
Änderungen an der Excel Datei herausschreiben. |
setCurrentSheet()
setCurrentSheet(sheetName); | ||
Parameter | Typ | Beschreibung |
sheetName | string | Name des Arbeitsblatts das bearbeitet werden soll. |
Mögliche Fehler | Das angegebene Arbeitsblatt existiert nicht. |
Beispiel Arbeitsblatt setzen mit dem bearbeitet werden soll
1let excelfile = "c:/example/excelfile.xlsx"; 2let workbook = workbookFactory.createWorkbook(excelfile); 3workbook.setCurrentSheet("results");
getCurrentSheet()
getCurrentSheet(); | ||
Parameter | Typ | Beschreibung |
- | - | - |
Beispiel Namen des aktuellen Excel-Arbeitsblatts auf dem Scripting Monitor ausgeben
1let excelfile = "c:/example/excelfile.xlsx"; 2let workbook = workbookFactory.createWorkbook(excelfile); 3let workSheet = workbook.getCurrentSheet(); 4println(workSheet);
createSheet()
createSheet(sheetName, setAsCurrentSheet); | ||
Parameter | Typ | Beschreibung |
sheetName | string | Name des Arbeitsblatts das erstellt werden soll. |
setAsCurrentSheet | boolean | true - Das Arbeitsblatt wird nach der Erstellung als aktives Arbeitsblatt gesetzt. false - Das Arbeitsblatt wird nur angelegt. |
Mögliche Fehler | Es existiert bereits ein Arbeitsblatt mit dem angegebenen Namen. |
Beispiel Neues Arbeitsblatt anlegen
1let excelfile = "c:/example/excelfile.xlsx"; 2let workbook = workbookFactory.createWorkbook(excelfile); 3workbook.createSheet("Input data", true); 4workbook.writeToFile(excelfile);
deleteSheet()
deleteSheet(sheetName); | ||
Parameter | Typ | Beschreibung |
sheetName | string | Name des zu löschenden Arbeitsblatts. |
Mögliche Fehler | Das angegebene Arbeitsblatt existiert nicht. |
Beispiel Arbeitsblatt löschen
1let excelfile = "c:/example/excelfile.xlsx"; 2let workbook = workbookFactory.createWorkbook(excelfile); 3workbook.deleteSheet("Load spectrum"); 4workbook.writeToFile(excelfile);
renameCurrentSheet()
renameCurrentSheet(newSheetName); | ||
Parameter | Typ | Beschreibung |
newSheetName | string | Neuer Name für das Arbeitsblatt. |
Beispiel Arbeitsblatt umbennen
1let excelfile = "c:/example/excelfile.xlsx"; 2let workbook = workbookFactory.createWorkbook(excelfile); 3workbook.renameCurrentSheet("Worksheet 123"); 4workbook.writeToFile(excelfile);
cloneSheet()
cloneSheet(sheetName, clonedSheetName, active); | ||
Parameter | Typ | Beschreibung |
sheetName | string | Name des zu kopierenden Arbeitsblatts |
clonedSheetName | string | Name der Kopie |
active | boolean | true - Kopierte Arbeitsblatt wird zum aktiven Arbeitsblatt false - Aktives Arbeitsblatt wird nicht geändert |
Beispiel Namen des aktuellen Excel-Arbeitsblatts auf dem Scripting Monitor ausgeben
1let excelfile = "c:/example/excelfile.xlsx"; 2let workbook = workbookFactory.createWorkbook(excelfile); 3cloneSheet("Worksheet1", "Worksheet1Copy", true); 4workbook.writeToFile(excelfile);
Variable excelfile mit dem Pfad zur Exceldatei belegen. | |
Excel Datenobjekt erstellen und der Variablen workbook zuweisen. | |
Arbeitsblatt mit dem Namen "Worksheet1" kopieren und der Kopie den Namen "Worksheet1Copy" zuweisen. Die Kopie wird als aktives Arbeitsblatt gesetzt. | |
Änderungen an der Exceldatei herausschreiben. |
Layout
setBackgroundColor()
setBackgroundColor(CELL, colorindex); | ||
Parameter | Typ | Beschreibung |
CELL | string | Adresse der Excel Zelle (z.B. C12) |
colorindex | int |
Beispiel Hintergrundfarbe einer Excelzelle ändern
1let excelfile = "c:/example/excelfile.xlsx"; 2let workbook = workbookFactory.createWorkbook(excelfile); 3workbook.setBackgroundColor("B3", 3); 4workbook.writeToFile(excelfile);
setFontColor()
setFontColor(CELL, colorindex); | ||
Parameter | Typ | Beschreibung |
CELL | string | Adresse der Excel Zelle (z.B. C12) |
colorindex | int |
Beispiel Textfarbe einer Excelzelle ändern
1let excelfile = "c:/example/excelfile.xlsx"; 2let workbook = workbookFactory.createWorkbook(excelfile); 3workbook.setFontColor("B3", 4); 4workbook.writeToFile(excelfile);
mergeCells()
mergeCells(fromCELL, toCELL); | ||
Parameter | Typ | Beschreibung |
fromCELL | string | Adresse der oberen linke Zelle |
toCELL | string | Adresse der unteren rechte Zelle |
Beispiel Zellen B3 bis D4 verbinden
1let excelfile = "c:/example/excelfile.xlsx"; 2let workbook = workbookFactory.createWorkbook(excelfile); 3workbook.mergeCells("B3", "D4"); 4workbook.writeToFile(excelfile);
Variable excelfile mit dem Pfad zur Exceldatei belegen. | |
Excel Datenobjekt erstellen und der Variablen workbook zuweisen. | |
Alle Zellen verbinden, die der Bereich A2 bis D3 aufspannt. | |
Änderungen an der Excel Datei herausschreiben. |
setCellAlign()
setCellAlign(CELL, alignment); | ||
Parameter | Typ | Beschreibung |
CELL | string | Adresse der Excel Zelle (z.B. C12) |
alignment | string | Folgende Formatierungsoptionen stehen zur Verfügung: |
Beispiel Inhalt einer Zelle horizontal zentrieren
1let excelfile = "c:/example/excelfile.xlsx"; 2let workbook = workbookFactory.createWorkbook(excelfile); 3workbook.setCellAlign("B4", "center"); 4workbook.writeToFile(excelfile);
setVCellAlign()
setVCellAlign(CELL, alignment); | ||
Parameter | Typ | Beschreibung |
CELL | string | Adresse der Excel Zelle (z.B. C12) |
alignment | string | Folgende Formatierungsoptionen stehen zur Verfügung: |
Beispiel Inhalt einer Zelle unten ausrichten
1let excelfile = "c:/example/excelfile.xlsx"; 2let workbook = workbookFactory.createWorkbook(excelfile); 3workbook.setVCellAlign("B4", "bottom"); 4workbook.writeToFile(excelfile);