typescript - Πώς να προσθέσετε έναν σύνθετο τύπο στο exceljs - JavaScript
Αυτή τη στιγμή εργάζομαι σε ένα έργο που απαιτεί εξαγωγή δεδομένων σε πολλαπλά φύλλα xlsx. Σε ένα από αυτά, χρειάζεται να προσθέσω τύπο σε κελιά που ελέγχει κάποιες συνθήκες πριν προσθέσει κάποια δεδομένα από το πρώτο φύλλο. Εδώ είναι ένα από αυτά:
Ref !== null ? worksheet2.getCell('D2').value ={ formula: `IF('dataSheet'!${Ref.address}<>"";'dataSheet'!${Ref.address};"")`, result:Ref.value} : worksheet2.getCell('D2').value = '';
Η αναφορά εδώ είναι ένα κελί στο πρώτο φύλλο που περιέχει την ετικέτα «ref».
Το πρόβλημα με αυτή τη φόρμουλα (ή οποιαδήποτε φόρμουλα «IF») είναι ότι λαμβάνω αυτό το σφάλμα όταν ανοίγω το έγγραφο Excel: Βρήκαμε ένα πρόβλημα με κάποιο περιεχόμενο στο test.xlsx. Θέλετε να προσπαθήσουμε να ανακτήσουμε όσο το δυνατόν περισσότερο; Εάν εμπιστεύεστε την πηγή αυτού του βιβλίου εργασίας, κάντε κλικ στο Ναι.
Και όταν το κάνω, ανακτά ολόκληρο το έγγραφο εκτός από όλους τους τύπους IF. Έχω επίσης μερικούς τύπους VLOOKUP που δεν λειτουργούν επίσης.
Απλός τύπος όπως το A1+A2 λειτουργεί, αλλά αυτό είναι ουσιαστικά όλο.
Δοκίμασα επίσης άλλες κοινές συναρτήσεις όπως το SUM ή το AVERAGE, αλλά ούτε αυτές λειτούργησαν. Δοκίμασα με ή χωρίς ένα "=" πριν από τη συνάρτηση χωρίς αποτέλεσμα. Δοκίμασα απλές συναρτήσεις όπως formula: '=IF(A1=0;10;0)' χωρίς αποτέλεσμα. Διάβασα ότι μερικές φορές χρειάζεται να προσθέσεις το αποτέλεσμα, και όπως μπορείτε να δείτε στο πρώτο μέρος, αυτό δεν λειτούργησε.
Δοκίμασα επίσης ένα άλλο πακέτο, XLSX με μια συνάρτηση IF και SUM, αλλά το ίδιο πρόβλημα εμφανίζεται ξανά και ξανά.
Τελευταίο αλλά όχι λιγότερο σημαντικό, καθώς εργάζομαι σε μια γαλλική εταιρεία όλες οι συναρτήσεις είναι γραμμένες στα γαλλικά οπότε το IF είναι SI.. Αρχικά σκέφτηκα ότι θα μπορούσε να είναι ένα πρόβλημα επικοινωνίας μεταξύ της γλώσσας που χρησιμοποιεί το exceljs και αυτής στις επιλογές του Excel αλλά ακόμα και μετά την αλλαγή της γλώσσας και της συνάρτησης στα αγγλικά, εξακολουθεί να μου εμφανίζει το ίδιο μήνυμα.
Απάντηση #1
Αυτή η μέθοδος θα λειτουργήσει.
worksheet.getCell('D2').value = { formula: 'IF(datasheet!A1<>"",datasheet!B1,"")'};
Κάιο παράδειγμα τύπου εδώ
Αυτό το demo.js θα δημιουργήσει το test.xls
const Excel = require('exceljs');
const workbook = new Excel.Workbook();
const data_sheet = workbook.addWorksheet("datasheet")
const formula_sheet = workbook.addWorksheet("formula")
// set data_sheet data
data_sheet.getCell('A1').value = 'ref';
data_sheet.getCell('B1').value = 1;
// set formula data
formula_sheet.getCell('A1').value = 2;
formula_sheet.getCell('A2').value = 3;
formula_sheet.getCell('A3').value = { formula: 'SUM(A1,A2)'};
formula_sheet.getCell('D2').value = { formula: 'IF(datasheet!A1<>"",datasheet!B1,"")'};
const fileName = './test.xlsx';
workbook.xlsx
.writeFile(fileName)
.then(() => {
console.log('file created');
})
.catch(err => {
console.log(err.message);
});
Στο datasheet,
Στο formula
Ο τύπος του κελιού D2 θα δημιουργήσει
=IF(datasheet!A1<>"",datasheet!B1,"")
Και εμφάνιση
1
Λόγω ότι το A1 του datasheet είναι ref και το B1 είναι 1.

