Πώς να εργαστείτε με πεδία στο .NET

Πώς να εργαστείτε με πεδία στο .NET

Αυτός ο οδηγός δείχνει πώς να εργαστείτε με τα πεδία του Word — DATE, IF, REF, DATABASE και δεκάδες άλλα — στο Aspose.Words FOSS για .NET: εισαγωγή ενός πεδίου και ανάγνωση του αποτελέσματός του, ενημέρωση των πεδίων μετά από προγραμματιστική τροποποίηση, ρύθμιση της συμπεριφοράς ενημέρωσης, παρακολούθηση των ενημερώσεων με μια κλήση επιστροφής, και μετατροπή ή αφαίρεση ενός πεδίου. Το Aspose.Words FOSS για .NET είναι διαθέσιμο μέσω NuGet ή με κατασκευή από πηγαίο κώδικα.

Οδηγός βήμα προς βήμα

Βήμα 1: Λάβετε τη βιβλιοθήκη

Κλωνοποιήστε το αποθετήριο και δημιουργήστε Aspose.Words.sln σε διαμόρφωση Release, έπειτα προσθέστε μια αναφορά έργου στο Aspose.Words.csproj από το δικό σας έργο .NET, όπως περιγράφεται στο Οδηγός εγκατάστασης. Προσθέστε using Aspose.Words; and using Aspose.Words.Fields; στην κορυφή οποιουδήποτε αρχείου που δουλεύει με πεδία.


Βήμα 2: Εισάγετε ένα πεδίο και διαβάστε το αποτέλεσμα του

DocumentBuilder.InsertField() εισάγει ένα νέο πεδίο στον κέρσορα, με υπερφορτώσεις που είτε ενημερώνουν το αποτέλεσμα του πεδίου αμέσως είτε το αφήνουν για μια μεταγενέστερη φάση ενημέρωσης. Κάθε πεδίο είναι μια παρουσία του Field που αποτελείται από τρεις κόμβους σημειοφόρων — FieldStart, Separator και FieldEnd, που εκτίθενται ως Field.Start / Field.Separator / Field.End. Το Field.Type προσδιορίζει ποιο FieldType αντιπροσωπεύει, τα Field.Result και Field.DisplayResult κρατούν την τελευταία υπολογισμένη τιμή, το Field.Format κρατά τυχόν διακόπτες μορφοποίησης που είναι προσαρτημένα στον κώδικα, και το Field.GetFieldCode() επιστρέφει το ακατέργαστο κείμενο κώδικα του πεδίου.


Βήμα 3: Ενημέρωση πεδίων μετά από προγραμματισμένη επεξεργασία

Aspose.Words FOSS δεν επαναϋπολογίζει τα πεδία όταν το έγγραφο φορτώνεται ή αποθηκεύεται. Μετά από μια επεξεργασία που θα έπρεπε να αλλάξει το αποτέλεσμα ενός πεδίου, καλέστε το Range.UpdateFields() για να επαναϋπολογίσετε κάθε πεδίο σε αυτό το εύρος — χρησιμοποιήστε το Document.Range.UpdateFields() για ολόκληρο το έγγραφο — ή το Field.Update() για ένα μόνο πεδίο. Το Range.UnlinkFields() μετατρέπει κάθε πεδίο στο εύρος σε στατικό κείμενο με μία κλήση, και το Range.NormalizeFieldTypes() εναρμονίζει τον αποθηκευμένο κωδικό τύπου ενός πεδίου με τον πραγματικό κωδικό πεδίου μετά από χειροκίνητη επεξεργασία.


Βήμα 4: Διαμόρφωση της συμπεριφοράς ενημέρωσης πεδίων με το FieldOptions

Document.FieldOptions (μια παρουσία του FieldOptions) καθορίζει πώς συμπεριφέρονται τα πεδία ολόκληρου του εγγράφου κατά τη διάρκεια μιας ενημέρωσης: το CurrentUser (μια παρουσία του UserInformation — Name, Initials, Address) παρέχει την ταυτότητα από την οποία διαβάζουν τα πεδία που σχετίζονται με το όνομα του συγγραφέα και του χρήστη, το DefaultDocumentAuthor σπέρνει τα αποτελέσματα που αφορούν τον συγγραφέα, και τα LegacyNumberFormat / UseInvariantCultureNumberFormat / PreProcessCulture / FieldUpdateCultureSource ελέγχουν τη μορφοποίηση αριθμών και ημερομηνιών. Για αδιάλειπτες γραμμές εργασίας, ορίστε το FieldOptions.UserPromptRespondent (ένα IFieldUserPromptRespondent) ώστε τα πεδία που βασίζονται σε προτροπές όπως το ASK και το FILLIN να μην μπλοκάρουν περιμένοντας διαδραστική είσοδο, και ορίστε ένα προσαρμοσμένο IFieldDatabaseProvider στο FieldOptions.FieldDatabaseProvider για να παρέχετε τις γραμμές του πεδίου DATABASE από τη δική σας πηγή δεδομένων αντί για πραγματική σύνδεση βάσης δεδομένων.


Βήμα 5: Καταγραφή ενημερώσεων πεδίων με μια επανάκληση

Εφαρμόστε το IFieldUpdatingCallback (FieldUpdating και FieldUpdated) και εκχωρήστε το στο FieldOptions για να εκτελεί κώδικα αμέσως πριν και μετά από κάθε επαναϋπολογισμό πεδίου — χρήσιμο για έλεγχο ακριβώς ποιά πεδία άλλαξαν σε μια εργασία παρτίδας. Για αναφορά προόδου σε ένα μεγάλο έγγραφο, εφαρμόστε το IFieldUpdatingProgressCallback (Notify), το οποίο λαμβάνει ένα FieldUpdatingProgressArgs που εκθέτει τα TotalFieldsCount, UpdatedFieldsCount και UpdateCompleted.


Βήμα 6: Μετατροπή ή αφαίρεση πεδίου

Field.Unlink() αντικαθιστά το πεδίο με το τελευταία-υπολογισμένο αποτέλεσμα του ως απλό στατικό κείμενο, απορρίπτοντας τον υποκείμενο κώδικα του πεδίου — χρησιμοποιήστε το όταν θέλετε η τιμή να ενσωματωθεί μόνιμα στο έγγραφο. Το Field.Remove() διαγράφει τους κόμβους FieldStart, Separator και FieldEnd μαζί με τον κώδικα και το αποτέλεσμα του πεδίου, αφαιρώντας το πεδίο ολοκληρωτικά. Προτιμήστε αυτές τις δύο μεθόδους αντί για τη διαγραφή των κόμβων δείκτη απευθείας, καθώς η χειροκίνητη αφαίρεση μόνο μέρους της δομής ενός πεδίου μπορεί να αφήσει το δένδρο του εγγράφου ασυνεπή.

Κοινά Προβλήματα και Διορθώσεις

Το εμφανιζόμενο αποτέλεσμα ενός πεδίου είναι παλιό μετά την επεξεργασία του εγγράφου. Aspose.Words FOSS δεν ενημερώνει αυτόματα τα πεδία κατά τη φόρτωση ή την αποθήκευση. Καλέστε Range.UpdateFields() or Field.Update() ρητά μετά την επεξεργασία.

PAGE, NUMPAGES, ή ένας αριθμός σελίδας του πίνακα περιεχομένων εμφανίζεται πάντα 0. Η διάταξη/απόδοση σελίδας δεν αποτελεί μέρος αυτής της έκδοσης, έτσι τα πεδία των οποίων το αποτέλεσμα εξαρτάται από τη σελιδοποίηση αξιολογούνται σε θέση κράτησης 0. Αυτή είναι η αναμενόμενη συμπεριφορά σε αυτήν την έκδοση.

Μια μαζική ενημέρωση πεδίου φαίνεται να κολλάει. Ένα πεδίο που καθοδηγείται από προτροπή (ASK, FILLIN) δεν έχει IFieldUserPromptRespondent εκχωρημένο. Εκχωρήστε FieldOptions.UserPromptRespondent, ή ορίστε DefaultResponse στο μεμονωμένο παράδειγμα πεδίου.

Το DATABASE το πεδίο δεν παράγει γραμμές. Καμία IFieldDatabaseProvider έχει εκχωρηθεί στο FieldOptions.FieldDatabaseProvider. Εφαρμόστε τη διεπαφή και εκχωρήστε τη πριν από την κλήση Range.UpdateFields().

Συχνές Ερωτήσεις

Το Aspose.Words FOSS αξιολογεί κάθε τύπο πεδίου Word;

Το μοντέλο αντικειμένου Field αντιπροσωπεύει κάθε τιμή FieldType και ενημερώνει τις περισσότερες από αυτές, αλλά τα πεδία των οποίων το αποτέλεσμα εξαρτάται από τη διάταξη της σελίδας — όπως τα PAGE και NUMPAGES — αξιολογούνται ως placeholder 0 επειδή αυτή η έκδοση δεν περιλαμβάνει τη μηχανή διάταξης/απόδοσης.

Πώς μπορώ να επαναξιολογήσω τα πεδία μετά από προγραμματική επεξεργασία;

Καλέστε το Range.UpdateFields() στην περιοχή που καλύπτει το επεξεργασμένο περιεχόμενο, ή το Document.Range.UpdateFields() για ολόκληρο το έγγραφο.

Μπορώ να μετατρέψω ένα πεδίο σε απλό, στατικό κείμενο;

Ναι — το Field.Unlink() αντικαθιστά το πεδίο με το τελευταίο του υπολογισμένο αποτέλεσμα ως απλό κείμενο.

Πώς μπορώ να αφαιρέσω εντελώς ένα πεδίο, συμπεριλαμβανομένου του αποτελέσματός του;

Καλέστε το Field.Remove(). Διαγράφει τους κόμβους FieldStart, Separator και FieldEnd μαζί με τον κώδικα του πεδίου και το περιεχόμενο του αποτελέσματος.

Πώς μπορώ να παρέχω προσαρμοσμένα δεδομένα στο πεδίο DATABASE;

Εφαρμόστε το IFieldDatabaseProvider και αντιστοιχίστε το στο Document.FieldOptions.FieldDatabaseProvider. Η υλοποίηση GetQueryResult() του επιστρέφει ένα FieldDatabaseDataTable που δημιουργείται από FieldDatabaseDataRow παραδείγματα.

Δείτε επίσης

 Ελληνικά