עוצו עצה בפרפואמנס - וורד
-
לדעתי הבעיה נעוצה באוטומציה עם וורד, אתה חייב לעבוד עם OpenXml.
הEnum הוא למעשה int וגם אם לא זה פשוט הבדל אפסי שבאפסיים לעניין המקרה שלך.אם OpenXml חדש לך, אז בכל מקרה יש לך שיעורי בית נדרשים.
אם אתה מכיר קצת תתחיל מהלינקים הללו:אשמח להיות לך לעזר, ואם תעלה מסמך דוגמה עם הוראות מה הפלט הנדרש אשחק את מה שאני יצליח ורווחא שמעתתא.
פורסם במקור בפורום CODE613 ב08/09/2017 10:03 (+03:00)
-
ההנתי שכל העינן הזה הוא לקחת את הוורד, בפורמט האקסמלי שלו, לשנות שם את הדברים והם אחרי זה ישתקפו במסמך. וזאת מכיון שהXML הוא כמו עמוד הדרה של המסמך ושם כתוב כל הפרטים שלו. בנתיים אני צריך לשנות את הטקסט של כל השוואה, אז יש לי את הקוד הבא, אבל אני לא מצליח לשנות את זה הוא אומר לי שזה לקריאה בלבד. יש כאן איזה שיטה או משהו?
var fileName = @"C:\Users\Admin\Desktop\compare.docx"; using (WordprocessingDocument wdDoc = WordprocessingDocument.Open(fileName, true)) { Body body = wdDoc.MainDocumentPart.Document.Body; List<OpenXmlElement> deletions = body.Descendants<DeletedText>().Cast<OpenXmlElement>().ToList(); foreach (var item in deletions) { item.InnerXml = "@30 " + item.InnerXml + "@40"; } wdDoc.Save(); } }
פורסם במקור בפורום CODE613 ב10/09/2017 16:06 (+03:00)
-
אני אדם אחר עכשיו.
זהו. היה עבר ועכשיו הווה. מצאתי איך זה עובד. מכוער ככל זה נראה אבל זה הפתרון שבסופו של יום עובד. אני אפייה את זה - לא אוציא את זה ככה ללקוח, אבל מרוב התלהבות אני חייב לשתף כעת. באמת אי אפשר לשנות אותו ישירות, צריך למחוק אותו ולהוסיף חדש.
זה פשוט עולם חדש, אני בהלם מהמהירות. ותודה אישית לדוד, שהכיר לי את העולם הזה שנקרא openXml (מלבד הישועות הפזורות למכביר)
(מה שכן, הוא מוסיף את זה כטקסט בלבד ולא שומר על זה כרוויזיה, כעת זה טוב לי.)var fileName = @"C:\Users\Admin\Desktop\ השוואה.docx"; using (WordprocessingDocument wdDoc = WordprocessingDocument.Open(fileName, true)) { Body body = wdDoc.MainDocumentPart.Document.Body; List<OpenXmlElement> insrtets = body.Descendants<InsertedRun>().Cast<OpenXmlElement>().ToList(); List<Run> run = new List<Run>(); foreach (var item in insrtets) { run.AddRange(item.Descendants<Run>().ToList()); } foreach (var run2 in run) { string innerText = run2.InnerText; string modifiedString = run2.InnerText.Replace(innerText, "@10" + innerText +"@20"); Text t = new Text(modifiedString); run2.RemoveAllChildren<Text>(); run2.AppendChild<Text>(t); }
פורסם במקור בפורום CODE613 ב10/09/2017 21:50 (+03:00)
-
אני אדם אחר עכשיו.
זהו. היה עבר ועכשיו הווה. מצאתי איך זה עובד.הדרמטיות שלך מאוד חיננית, אופייני לאנשים בצעדיהם הראשונים.
יש לי רק דבר אחד לומר לך, אם יש בך כל כך הרבה אנרגיה ואהבת המקצוע, מה לך אצל וורד, כלך לך אצל מערכות מידע, עתידך מובטח.פורסם במקור בפורום CODE613 ב10/09/2017 23:37 (+03:00)
-
@נתנאל
אני אדם אחר עכשיו.זהו. היה עבר ועכשיו הווה. מצאתי איך זה עובד.
הדרמטיות שלך מאוד חיננית, אופייני לאנשים בצעדיהם הראשונים.
יש לי רק דבר אחד לומר לך, אם יש בך כל כך הרבה אנרגיה ואהבת המקצוע, מה לך אצל וורד, כלך לך אצל מערכות מידע, עתידך מובטח.כשתגמור מערכות מידע ניפגש בוורד, ותפתיע גם עם דרמטיות חיננית
פורסם במקור בפורום CODE613 ב11/09/2017 01:46 (+03:00)
-
הדוגמה שהובאה משתמשת ב DOM שזו הדרך הקלה ביותר אמנם לטפל בקובץ OpenXML ואף היעילה ביותר עבור קריאה של קובץ ברוב המקרים,
לעומת זאת ביצירה של קבצים בני מיליוני שורות (אקסל לדוגמה אבל לא רק) גישת ה SAX היא העוצמתית ביותר מבחינת ביצועים.
וארכיטקט יכול להיות לי פה תנא דמסייע...
https://blogs.msdn.microsoft.com/brian_jones/2010/06/22/writing-large-excel-files-with-the-open-xml-sdkפורסם במקור בפורום CODE613 ב11/09/2017 14:20 (+03:00)