Πώς να αναλύετε έγγραφα PDF φορμών με μακροεντολή ONLYOFFICE
Στο σημερινό γρήγορο ψηφιακό περιβάλλον, οι συγγραφείς, οι συντάκτες και οι δημιουργοί περιεχομένου συχνά δυσκολεύονται να αποκτήσουν ουσιαστικές πληροφορίες για τα έγγραφά τους. Η κατανόηση μετρικών όπως η ευκολία ανάγνωσης, η συχνότητα λέξεων και η δομική ισορροπία μπορεί να βελτιώσει σημαντικά την ποιότητα του εγγράφου, ωστόσο η χειροκίνητη ανάλυση είναι χρονοβόρα και ασυνεπής. Σε αυτήν την ανάρτηση ιστολογίου, θα σας δείξουμε πώς να δημιουργήσετε ένα ισχυρό μακροεντολή του ONLYOFFICE που αναλύει αυτόματα τα έγγραφά σας και δημιουργεί ολοκληρωμένες αναφορές.

Δημιουργία του μακροεντολής ανάλυσης εγγράφων
Ας χωρίσουμε το μακροεντολή μας σε λειτουργικά στοιχεία και ας εξηγήσουμε πώς λειτουργεί κάθε μέρος.
Ρύθμιση της κύριας συνάρτησης
Ο πυρήνας του μακροεντολής μας είναι η συνάρτηση analyzeDocument() , η οποία συντονίζει ολόκληρη τη διαδικασία ανάλυσης:
function analyzeDocument() {
try {
// Λήψη εγγράφου και όλου του κειμένου
var oDocument = Api.GetDocument();
var allText = "";
var paragraphs = oDocument.GetAllParagraphs();
// Έλεγχος αν το έγγραφο είναι κενό
if (paragraphs.length === 0) {
console.log("Προειδοποίηση: Το έγγραφο είναι κενό ή δεν βρέθηκαν παράγραφοι για ανάλυση.");
return;
}
// Συλλογή όλου του κειμένου
paragraphs.forEach(function(paragraph) {
allText += paragraph.GetText() + " ";
});
// Εκτέλεση αναλύσεων
var stats = calculateBasicStats(allText, paragraphs);
var advancedStats = calculateAdvancedStats(allText, stats);
var commonWords = findCommonWords(allText, 10);
// Δημιουργία αναφοράς
createAndAddReport(oDocument, stats, advancedStats, commonWords);
// Καταγραφή επιτυχίας
console.log("Επιτυχία: Η ανάλυση του εγγράφου ολοκληρώθηκε. Η αναφορά προστέθηκε στο τέλος του εγγράφου.");
} catch (error) {
console.log("Σφάλμα: " + error.message);
}
}
Αυτή η συνάρτηση συλλέγει πρώτα όλο το κείμενο από το έγγραφο, στη συνέχεια το περνάει σε εξειδικευμένες συναρτήσεις ανάλυσης και τελικά δημιουργεί μια αναφορά. Το μπλοκ try-catch διασφαλίζει ότι το μακροεντολή χειρίζεται με «ευγένεια» τυχόν σφάλματα.
Υπολογισμός βασικών στατιστικών
Η συνάρτηση calculateBasicStats() επεξεργάζεται το κείμενο για την εξαγωγή βασικών μετρικών:
function calculateBasicStats(text, paragraphs) {
// Καταμέτρηση λέξεων
var words = text.split(/\s+/).filter(function(word) {
return word.length > 0;
});
var wordCount = words.length;
// Καταμέτρηση προτάσεων
var sentences = text.split(/[.!?]+/).filter(function(sentence) {
return sentence.trim().length > 0;
});
var sentenceCount = sentences.length;
// Καταμέτρηση παραγράφων
var paragraphCount = paragraphs.length;
// Καταμέτρηση χαρακτήρων
var charCountWithSpaces = text.length;
var charCountWithoutSpaces = text.replace(/\s+/g, "").length;
// Καταμέτρηση γραμμών (προσεγγιστική)
var lineCount = Math.ceil(charCountWithSpaces / 70);
return {
wordCount: wordCount,
sentenceCount: sentenceCount,
paragraphCount: paragraphCount,
charCountWithSpaces: charCountWithSpaces,
charCountWithoutSpaces: charCountWithoutSpaces,
lineCount: lineCount,
words: words,
sentences: sentences
};
}
Αυτή η συνάρτηση χωρίζει το κείμενο σε λέξεις και προτάσεις, μετράει τις παραγράφους και υπολογίζει τους χαρακτήρες και τις γραμμές.
Πραγματοποίηση προηγμένης ανάλυσης
Για βαθύτερες πληροφορίες, η συνάρτηση calculateAdvancedStats() υπολογίζει πιο εξελιγμένες μετρικές:
function calculateAdvancedStats(text, basicStats) {
// Μέσο μήκος πρότασης
var avgWordsPerSentence = basicStats.wordCount / Math.max(1, basicStats.sentenceCount);
// Μέσο μήκος παραγράφου
var avgWordsPerParagraph = basicStats.wordCount / Math.max(1, basicStats.paragraphCount);
// Μέσο μήκος λέξης
var totalWordLength = basicStats.words.reduce(function(sum, word) {
return sum + word.length;
}, 0);
var avgWordLength = totalWordLength / Math.max(1, basicStats.wordCount);
// Βαθμολογία ευκολίας ανάγνωσης (απλοποιημένη Flesch-Kincaid)
var readabilityScore = 206.835 - 1.015 * avgWordsPerSentence - 84.6 * (totalWordLength / basicStats.wordCount);
// Εκτιμώμενος χρόνος ανάγνωσης
var readingTimeMinutes = Math.ceil(basicStats.wordCount / 200);
return {
avgWordsPerSentence: avgWordsPerSentence,
avgWordsPerParagraph: avgWordsPerParagraph,
avgWordLength: avgWordLength,
readabilityScore: readabilityScore,
readingTimeMinutes: readingTimeMinutes
};
}
Αυτό υπολογίζει το μέσο μήκος πρότασης και παραγράφου, βαθμολογίες ευκολίας ανάγνωσης και εκτιμώμενο χρόνο ανάγνωσης.
Ανάλυση συχνότητας λέξεων
Η συνάρτηση findCommonWords() προσδιορίζει τις πιο συχνά χρησιμοποιούμενες λέξεις:
function findCommonWords(text, limit) {
// Καθαρισμός κειμένου και μετατροπή σε πεζά
var cleanText = text.toLowerCase().replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g, "");
// Διαχωρισμός σε λέξεις
var words = cleanText.split(/\s+/).filter(function(word) {
return word.length > 3;
});
// Υπολογισμός συχνότητας λέξεων
var wordFrequency = {};
words.forEach(function(word) {
wordFrequency[word] = (wordFrequency[word] || 0) + 1;
});
// Φιλτράρισμα κοινών λέξεων
var stopWords = ["this", "that", "with", "from", "have", "been"];
stopWords.forEach(function(stopWord) {
delete wordFrequency[stopWord];
});
// Ταξινόμηση κατά συχνότητα
var sortedWords = Object.keys(wordFrequency).sort(function(a, b) {
return wordFrequency[b] - wordFrequency[a];
});
// Επιστροφή των κορυφαίων N λέξεων
return sortedWords.slice(0, limit).map(function(word) {
return { word: word, frequency: wordFrequency[word] };
});
}
Αυτή η συνάρτηση αφαιρεί τα σημεία στίξης, φιλτράρει κοινές λέξεις-γεμίσματα και επιστρέφει τις πιο συχνά χρησιμοποιούμενες λέξεις στο έγγραφο.
Δημιουργία της αναφοράς
Τέλος, η συνάρτηση createAndAddReport() συγκεντρώνει και μορφοποιεί όλα τα αποτελέσματα της ανάλυσης:
function createAndAddReport(oDocument, basicStats, advancedStats, commonWords) {
// Προσθήκη νέας σελίδας
var oParagraph = Api.CreateParagraph();
oParagraph.AddPageBreak();
oDocument.AddElement(oDocument.GetElementsCount(), oParagraph);
// Προσθήκη τίτλου
var oHeading = Api.CreateParagraph();
oHeading.AddText("ΑΝΑΛΥΤΙΚΗ ΑΝΑΦΟΡΑ ΕΓΓΡΑΦΟΥ");
oDocument.AddElement(oDocument.GetElementsCount(), oHeading);
// Προσθήκη ενότητας βασικών στατιστικών
var oSubHeading = Api.CreateParagraph();
oSubHeading.AddText("ΒΑΣΙΚΑ ΣΤΑΤΙΣΤΙΚΑ");
oDocument.AddElement(oDocument.GetElementsCount(), oSubHeading);
// Προσθήκη περιεχομένου στατιστικών
// ... (κώδικας που προσθέτει μεμονωμένα στατιστικά)
// Προσθήκη ενότητας προηγμένης ανάλυσης
// ... (κώδικας που προσθέτει προηγμένα μετρικά)
// Προσθήκη ενότητας συχνότητας λέξεων
// ... (κώδικας που προσθέτει λίστα συχνότητας λέξεων)
// Προσθήκη υποσέλιδου
var oFootnotePara = Api.CreateParagraph();
oFootnotePara.AddText("Αυτή η αναφορά δημιουργήθηκε από το Εργαλείο Στατιστικών και Ανάλυσης Εγγράφων OnlyOffice στις " +
new Date().toLocaleString() + ".");
oDocument.AddElement(oDocument.GetElementsCount(), oFootnotePara);
}
Αυτή η συνάρτηση δημιουργεί μια δομημένη αναφορά στο τέλος του εγγράφου με όλα τα αποτελέσματα της ανάλυσης.

Πλήρης κώδικας μακροεντολής
Ακολουθεί ο πλήρης κώδικας μακροεντολής που μπορείτε να αντιγράψετε και να χρησιμοποιήσετε:
(function() {
// Κύρια συνάρτηση - ξεκινά όλες τις λειτουργίες
function analyzeDocument() {
try {
// Λήψη εγγράφου και όλου του κειμένου
var oDocument = Api.GetDocument();
var allText = "";
var paragraphs = oDocument.GetAllParagraphs();
// Έλεγχος αν το έγγραφο είναι κενό
if (paragraphs.length === 0) {
console.log("Προειδοποίηση: Το έγγραφο είναι κενό ή δεν βρέθηκαν παράγραφοι για ανάλυση.");
return;
}
// Συλλογή όλου του κειμένου
paragraphs.forEach(function(paragraph) {
allText += paragraph.GetText() + " ";
});
// Υπολογισμός βασικών στατιστικών
var stats = calculateBasicStats(allText, paragraphs);
// Πραγματοποίηση προηγμένης ανάλυσης
var advancedStats = calculateAdvancedStats(allText, stats);
// Εύρεση πιο συχνών λέξεων
var commonWords = findCommonWords(allText, 10);
// Δημιουργία και προσθήκη αναφοράς στο έγγραφο
createAndAddReport(oDocument, stats, advancedStats, commonWords);
// Ενημέρωση χρήστη
console.log("Επιτυχία: Η ανάλυση του εγγράφου ολοκληρώθηκε. Η αναφορά προστέθηκε στο τέλος του εγγράφου.");
} catch (error) {
console.log("Σφάλμα: Παρουσιάστηκε σφάλμα κατά την επεξεργασία: " + error.message);
}
}
// Υπολογισμός βασικών στατιστικών
function calculateBasicStats(text, paragraphs) {
// Καταμέτρηση λέξεων
var words = text.split(/\s+/).filter(function(word) {
return word.length > 0;
});
var wordCount = words.length;
// Καταμέτρηση προτάσεων
var sentences = text.split(/[.!?]+/).filter(function(sentence) {
return sentence.trim().length > 0;
});
var sentenceCount = sentences.length;
// Καταμέτρηση παραγράφων
var paragraphCount = paragraphs.length;
// Καταμέτρηση χαρακτήρων (με και χωρίς κενά)
var charCountWithSpaces = text.length;
var charCountWithoutSpaces = text.replace(/\s+/g, "").length;
// Καταμέτρηση γραμμών (προσεγγιστική)
var lineCount = Math.ceil(charCountWithSpaces / 70); // Περίπου 70 χαρακτήρες/γραμμή
return {
wordCount: wordCount,
sentenceCount: sentenceCount,
paragraphCount: paragraphCount,
charCountWithSpaces: charCountWithSpaces,
charCountWithoutSpaces: charCountWithoutSpaces,
lineCount: lineCount,
words: words,
sentences: sentences
};
}
// Υπολογισμός προηγμένων στατιστικών
function calculateAdvancedStats(text, basicStats) {
// Μέσο μήκος πρότασης (σε λέξεις)
var avgWordsPerSentence = basicStats.wordCount / Math.max(1, basicStats.sentenceCount);
// Μέσο μήκος παραγράφου (σε λέξεις)
var avgWordsPerParagraph = basicStats.wordCount / Math.max(1, basicStats.paragraphCount);
// Μέσο μήκος λέξης (σε χαρακτήρες)
var totalWordLength = basicStats.words.reduce(function(sum, word) {
return sum + word.length;
}, 0);
var avgWordLength = totalWordLength / Math.max(1, basicStats.wordCount);
// Βαθμολογία ευκολίας ανάγνωσης (απλοποιημένη Flesch-Kincaid)
var readabilityScore = 206.835 - 1.015 * (basicStats.wordCount / Math.max(1, basicStats.sentenceCount)) - 84.6 * (totalWordLength / Math.max(1, basicStats.wordCount));
// Εκτιμώμενος χρόνος ανάγνωσης (λεπτά)
var readingTimeMinutes = Math.ceil(basicStats.wordCount / 200); // Μέση ταχύτητα ανάγνωσης 200 λέξεις/λεπτό
return {
avgWordsPerSentence: avgWordsPerSentence,
avgWordsPerParagraph: avgWordsPerParagraph,
avgWordLength: avgWordLength,
readabilityScore: readabilityScore,
readingTimeMinutes: readingTimeMinutes
};
}
// Εύρεση πιο συχνών λέξεων
function findCommonWords(text, limit) {
// Καθαρισμός κειμένου και μετατροπή σε πεζά
var cleanText = text.toLowerCase().replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g, "");
// Διαχωρισμός σε λέξεις
var words = cleanText.split(/\s+/).filter(function(word) {
return word.length > 3; // Φιλτράρισμα πολύ μικρών λέξεων
});
// Υπολογισμός συχνότητας λέξεων
var wordFrequency = {};
words.forEach(function(word) {
if (wordFrequency[word]) {
wordFrequency[word]++;
} else {
wordFrequency[word] = 1;
}
});
// Φιλτράρισμα κοινών λέξεων (κοινές αγγλικές λέξεις)
var stopWords = ["this", "that", "these", "those", "with", "from", "have", "been", "were", "they", "their", "what", "when", "where", "which", "there", "will", "would", "could", "should", "about", "also"];
stopWords.forEach(function(stopWord) {
if (wordFrequency[stopWord]) {
delete wordFrequency[stopWord];
}
});
// Ταξινόμηση κατά συχνότητα
var sortedWords = Object.keys(wordFrequency).sort(function(a, b) {
return wordFrequency[b] - wordFrequency[a];
});
// Λήψη των κορυφαίων N λέξεων
var topWords = sortedWords.slice(0, limit);
// Επιστροφή αποτελεσμάτων ως ζεύγη λέξης-συχνότητας
return topWords.map(function(word) {
return {
word: word,
frequency: wordFrequency[word]
};
});
}
// Δημιουργία και προσθήκη αναφοράς στο έγγραφο
function createAndAddReport(oDocument, basicStats, advancedStats, commonWords) {
// Προσθήκη νέας σελίδας
var oParagraph = Api.CreateParagraph();
oParagraph.AddPageBreak();
oDocument.AddElement(oDocument.GetElementsCount(), oParagraph);
// Κύριος τίτλος - επισημάνση με κεφαλαία γράμματα
var oHeading = Api.CreateParagraph();
oHeading.AddText("ΑΝΑΛΥΤΙΚΗ ΑΝΑΦΟΡΑ ΕΓΓΡΑΦΟΥ");
oDocument.AddElement(oDocument.GetElementsCount(), oHeading);
// Υποτίτλος - με κεφαλαία γράμματα
var oSubHeading = Api.CreateParagraph();
oSubHeading.AddText("ΒΑΣΙΚΑ ΣΤΑΤΙΣΤΙΚΑ");
oDocument.AddElement(oDocument.GetElementsCount(), oSubHeading);
// Προσθήκη βασικών στατιστικών
var oStatsPara = Api.CreateParagraph();
oStatsPara.AddText("• Καταμέτρηση Λέξεων: " + basicStats.wordCount);
oDocument.AddElement(oDocument.GetElementsCount(), oStatsPara);
oStatsPara = Api.CreateParagraph();
oStatsPara.AddText("• Καταμέτρηση Προτάσεων: " + basicStats.sentenceCount);
oDocument.AddElement(oDocument.GetElementsCount(), oStatsPara);
oStatsPara = Api.CreateParagraph();
oStatsPara.AddText("• Καταμέτρηση Παραγράφων: " + basicStats.paragraphCount);
oDocument.AddElement(oDocument.GetElementsCount(), oStatsPara);
oStatsPara = Api.CreateParagraph();
oStatsPara.AddText("• Καταμέτρηση Χαρακτήρων (με κενά): " + basicStats.charCountWithSpaces);
oDocument.AddElement(oDocument.GetElementsCount(), oStatsPara);
oStatsPara = Api.CreateParagraph();
oStatsPara.AddText("• Καταμέτρηση Χαρακτήρων (χωρίς κενά): " + basicStats.charCountWithoutSpaces);
oDocument.AddElement(oDocument.GetElementsCount(), oStatsPara);
oStatsPara = Api.CreateParagraph();
oStatsPara.AddText("• Εκτιμώμενος Αριθμός Γραμμών: " + basicStats.lineCount);
oDocument.AddElement(oDocument.GetElementsCount(), oStatsPara);
// Τίτλος προηγμένης ανάλυσης
oSubHeading = Api.CreateParagraph();
oSubHeading.AddText("ΠΡΟΗΓΜΕΝΗ ΑΝΑΛΥΣΗ");
oDocument.AddElement(oDocument.GetElementsCount(), oSubHeading);
// Προσθήκη αποτελεσμάτων προηγμένης ανάλυσης
oStatsPara = Api.CreateParagraph();
oStatsPara.AddText("• Μέσο Μήκος Πρότασης: " + advancedStats.avgWordsPerSentence.toFixed(2) + " λέξεις");
oDocument.AddElement(oDocument.GetElementsCount(), oStatsPara);
oStatsPara = Api.CreateParagraph();
oStatsPara.AddText("• Μέσο Μήκος Παραγράφου: " + advancedStats.avgWordsPerParagraph.toFixed(2) + " λέξεις");
oDocument.AddElement(oDocument.GetElementsCount(), oStatsPara);
oStatsPara = Api.CreateParagraph();
oStatsPara.AddText("• Μέσο Μήκος Λέξης: " + advancedStats.avgWordLength.toFixed(2) + " χαρακτήρες");
oDocument.AddElement(oDocument.GetElementsCount(), oStatsPara);
oStatsPara = Api.CreateParagraph();
oStatsPara.AddText("• Βαθμολογία Ευκολίας Ανάγνωσης: " + advancedStats.readabilityScore.toFixed(2));
oDocument.AddElement(oDocument.GetElementsCount(), oStatsPara);
oStatsPara = Api.CreateParagraph();
oStatsPara.AddText("• Εκτιμώμενος Χρόνος Ανάγνωσης: " + advancedStats.readingTimeMinutes + " λεπτά");
oDocument.AddElement(oDocument.GetElementsCount(), oStatsPara);
// Τίτλος συχνών λέξεων
oSubHeading = Api.CreateParagraph();
oSubHeading.AddText("ΟΙ ΠΙΟ ΣΥΧΝΑ ΧΡΗΣΙΜΟΠΟΙΟΥΜΕΝΕΣ ΛΕΞΕΙΣ");
oDocument.AddElement(oDocument.GetElementsCount(), oSubHeading);
// Θα δημιουργήσουμε μια απλή λίστα αντί για πίνακα
if (commonWords.length > 0) {
for (var i = 0; i < commonWords.length; i++) {
var oWordPara = Api.CreateParagraph();
oWordPara.AddText((i + 1) + ". " + commonWords[i].word + " (" + commonWords[i].frequency + " φορές)");
oDocument.AddElement(oDocument.GetElementsCount(), oWordPara);
}
} else {
var oNoneFoundPara = Api.CreateParagraph();
oNoneFoundPara.AddText("Δεν βρέθηκαν συχνά χρησιμοποιούμενες λέξεις.");
oDocument.AddElement(oDocument.GetElementsCount(), oNoneFoundPara);
}
// Σημείωση υποσέλιδου
var oFootnotePara = Api.CreateParagraph();
oFootnotePara.AddText("Αυτή η αναφορά δημιουργήθηκε από το Εργαλείο Στατιστικών και Ανάλυσης Εγγράφων OnlyOffice στις " +
new Date().toLocaleString() + ".");
oDocument.AddElement(oDocument.GetElementsCount(), oFootnotePara);
}
// Εκτέλεση του μακροεντολής
analyzeDocument();
})();
Για να χρησιμοποιήσετε αυτό το μακροεντολή στο ONLYOFFICE
- Ανοίξτε το έγγραφό σας στο ONLYOFFICE
- Πλοηγηθείτε στην καρτέλα Προβολή και επιλέξτε Μακροεντολές
- Δημιουργήστε ένα νέο μακροεντολή και επικολλήστε τον κώδικα
- Εκτελέστε το μακροεντολή
- Μια λεπτομερής αναλυτική αναφορά θα προστεθεί στο τέλος του εγγράφου σας
Τώρα ας εκτελέσουμε το μακροεντολή μας και ας δούμε πώς λειτουργεί!
Αυτό το μακροεντολή είναι ένα πολύτιμο εργαλείο για επαγγελματίες που θέλουν να αυτοματοποιήσουν την ανάλυση κειμένου και τις διαδικασίες τεκμηρίωσης σε ένα σύγχρονο γραφειακό περιβάλλον. Ελπίζουμε ότι θα είναι μια χρήσιμη προσθήκη στο εργαλειοθήκη εργασίας σας.
Σας ενθαρρύνουμε να εξερευνήσετε την τεκμηρίωση API του ONLYOFFICE για να δημιουργήσετε τα δικά σας προσαρμοσμένα μακροεντολές ή να βελτιώσετε αυτό. Εάν έχετε ιδέες για βελτιώσεις ή προτάσεις για νέα μακροεντολές, μη διστάσετε να επικοινωνήσετε μαζί μας. Η ανατροφοδότησή σας μας βοηθά να συνεχίσουμε να αναπτύσσουμε εργαλεία που κάνουν τη δημιουργία και την επεξεργασία εγγράφων πιο αποτελεσματικές.
Σχετικά με τον συγγραφέα

Δημιουργήστε τον δωρεάν λογαριασμό ONLYOFFICE σας
Online προβολή, επεξεργασία και συνεργασία σε έγγραφα, υπολογιστικά φύλλα, παρουσιάσεις, φόρμες και αρχεία PDF.


