דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. עוצו עצה בפרפואמנס - וורד

עוצו עצה בפרפואמנס - וורד

מתוזמן נעוץ נעול הועבר ארכיון code613m
11 פוסטים 4 כותבים 757 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • נתנאלנ מנותק
    נתנאלנ מנותק
    נתנאל
    כתב ב נערך לאחרונה על ידי
    #1

    אני מכין כעת איזה אפלקציה ששותלת קודים בהשוואת של מסמך וורד.
    זה מאוד מאוד איטי, ובפרט שאני צריך את זה למסות של חומר.
    שמתי לב למשהו מאוד מענין, שבהתחלה הוא מתחיל מהר את ה30 הראשונים ואחרי זה נהיה הרבה יותר זמן כל הפעולה הזו. בהתחלה חשבתי שזה בגלל האינדקסים שמשתנים, אבל במקרה שלנו אין אינדקסים משתנים ולא יעזור ג"כ להתחיל מהסוף.

    עוצו עצה ותקום - לעשות את זה ליותר מהר.

    עכשיו אני חושב תוך כדי - אם אני ישנה את הסוג השוואה שהוא enum למספר int זה יכול לקצר?

    var revisions = coparedDoc.Revisions;
              
                foreach (word.Revision item in revisions)
                    {
                        if (item.Type == word.WdRevisionType.wdRevisionDelete)
                        {
                            Thread.Sleep(10);
    
                            item.Range.Text = "@10" + item.Range.Text + "@20";
    
                        }
                        else
                        {
    
                            item.Range.Text = "@30" + item.Range.Text + "@40";
    
                        }
                    }
    

    פורסם במקור בפורום CODE613 ב08/09/2017 08:36 (+03:00)

    הצטרפות לרשימת התפוצה בעניני תכנות JS , React , Node וכל מיני דברים מענינים כאן :cool:
    https://programing-tips.web.app/

    תגובה 1 תגובה אחרונה
    0
    • dovidD מחובר
      dovidD מחובר
      dovid ניהול
      כתב ב נערך לאחרונה על ידי
      #2

      לדעתי הבעיה נעוצה באוטומציה עם וורד, אתה חייב לעבוד עם OpenXml.
      הEnum הוא למעשה int וגם אם לא זה פשוט הבדל אפסי שבאפסיים לעניין המקרה שלך.

      אם OpenXml חדש לך, אז בכל מקרה יש לך שיעורי בית נדרשים.
      אם אתה מכיר קצת תתחיל מהלינקים הללו:

      https://blogs.msdn.microsoft.com/microsoft_press/2016/06/27/from-the-mvps-comparing-open-xml-documents-without-automating-word/

      אשמח להיות לך לעזר, ואם תעלה מסמך דוגמה עם הוראות מה הפלט הנדרש אשחק את מה שאני יצליח ורווחא שמעתתא.

      פורסם במקור בפורום CODE613 ב08/09/2017 10:03 (+03:00)

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

      תגובה 1 תגובה אחרונה
      3
      • dovidD מחובר
        dovidD מחובר
        dovid ניהול
        כתב ב נערך לאחרונה על ידי
        #3

        גם את הכותרת אתה צריך לשנות מוורד לאוטומציה, זה הבאג הגדול.

        פורסם במקור בפורום CODE613 ב08/09/2017 10:05 (+03:00)

        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

        בכל נושא אפשר ליצור קשר dovid@tchumim.com

        תגובה 1 תגובה אחרונה
        0
        • נתנאלנ מנותק
          נתנאלנ מנותק
          נתנאל
          כתב ב נערך לאחרונה על ידי
          #4

          ההנתי שכל העינן הזה הוא לקחת את הוורד, בפורמט האקסמלי שלו, לשנות שם את הדברים והם אחרי זה ישתקפו במסמך. וזאת מכיון שה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)

          הצטרפות לרשימת התפוצה בעניני תכנות JS , React , Node וכל מיני דברים מענינים כאן :cool:
          https://programing-tips.web.app/

          תגובה 1 תגובה אחרונה
          0
          • dovidD מחובר
            dovidD מחובר
            dovid ניהול
            כתב ב נערך לאחרונה על ידי
            #5

            זה השגיאה שאתה מקבל? לפי מה שאני רואה אין בכלל מתודת Save לWordprocessingDocument, כך שלכאורה הקוד שלך לא בר קימפול.
            תנסה ככה:

            wdDoc.MainDocumentPart.Document.Save();
            

            פורסם במקור בפורום CODE613 ב10/09/2017 16:47 (+03:00)

            מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

            בכל נושא אפשר ליצור קשר dovid@tchumim.com

            תגובה 1 תגובה אחרונה
            0
            • נתנאלנ מנותק
              נתנאלנ מנותק
              נתנאל
              כתב ב נערך לאחרונה על ידי
              #6

              זה נופל עוד לפני השמירה.
              זה השגיאה

              Additional information: This OpenXmlLeafElement's InnerXml can only be set to null or to an empty string.

              פורסם במקור בפורום CODE613 ב10/09/2017 17:08 (+03:00)

              הצטרפות לרשימת התפוצה בעניני תכנות JS , React , Node וכל מיני דברים מענינים כאן :cool:
              https://programing-tips.web.app/

              תגובה 1 תגובה אחרונה
              0
              • dovidD מחובר
                dovidD מחובר
                dovid ניהול
                כתב ב נערך לאחרונה על ידי
                #7

                אולי האובייקט DeletedText לא ניתן לעריכה, לא יודע.

                פורסם במקור בפורום CODE613 ב10/09/2017 17:23 (+03:00)

                מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                בכל נושא אפשר ליצור קשר dovid@tchumim.com

                תגובה 1 תגובה אחרונה
                0
                • נתנאלנ מנותק
                  נתנאלנ מנותק
                  נתנאל
                  כתב ב נערך לאחרונה על ידי
                  #8

                  אני אדם אחר עכשיו.
                  זהו. היה עבר ועכשיו הווה. מצאתי איך זה עובד. מכוער ככל זה נראה אבל זה הפתרון שבסופו של יום עובד. אני אפייה את זה - לא אוציא את זה ככה ללקוח, אבל מרוב התלהבות אני חייב לשתף כעת. באמת אי אפשר לשנות אותו ישירות, צריך למחוק אותו ולהוסיף חדש.
                  זה פשוט עולם חדש, אני בהלם מהמהירות. ותודה אישית לדוד, שהכיר לי את העולם הזה שנקרא 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)

                  הצטרפות לרשימת התפוצה בעניני תכנות JS , React , Node וכל מיני דברים מענינים כאן :cool:
                  https://programing-tips.web.app/

                  תגובה 1 תגובה אחרונה
                  2
                  • א מנותק
                    א מנותק
                    ארכיטקט
                    כתב ב נערך לאחרונה על ידי
                    #9

                    @נתנאל

                    אני אדם אחר עכשיו.
                    זהו. היה עבר ועכשיו הווה. מצאתי איך זה עובד.

                    הדרמטיות שלך מאוד חיננית, אופייני לאנשים בצעדיהם הראשונים.
                    יש לי רק דבר אחד לומר לך, אם יש בך כל כך הרבה אנרגיה ואהבת המקצוע, מה לך אצל וורד, כלך לך אצל מערכות מידע, עתידך מובטח.

                    פורסם במקור בפורום CODE613 ב10/09/2017 23:37 (+03:00)

                    אידיאולוגיות גדולות נכנסות למטחנה של עולם המעשה ויוצאות ממנו בפירורים (ווינסטון צ'רצ'יל, סתם סתם, זה שלי)

                    תגובה 1 תגובה אחרונה
                    1
                    • dovidD מחובר
                      dovidD מחובר
                      dovid ניהול
                      כתב ב נערך לאחרונה על ידי
                      #10

                      @ארכיטקט

                      @נתנאל
                      אני אדם אחר עכשיו.

                      זהו. היה עבר ועכשיו הווה. מצאתי איך זה עובד.

                      הדרמטיות שלך מאוד חיננית, אופייני לאנשים בצעדיהם הראשונים.
                      יש לי רק דבר אחד לומר לך, אם יש בך כל כך הרבה אנרגיה ואהבת המקצוע, מה לך אצל וורד, כלך לך אצל מערכות מידע, עתידך מובטח.

                      כשתגמור מערכות מידע ניפגש בוורד, ותפתיע גם עם דרמטיות חיננית 🙂

                      פורסם במקור בפורום CODE613 ב11/09/2017 01:46 (+03:00)

                      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                      בכל נושא אפשר ליצור קשר dovid@tchumim.com

                      תגובה 1 תגובה אחרונה
                      0
                      • S מנותק
                        S מנותק
                        softs
                        כתב ב נערך לאחרונה על ידי
                        #11

                        הדוגמה שהובאה משתמשת ב 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)

                        תגובה 1 תגובה אחרונה
                        3

                        בא תתחבר לדף היומי!
                        • התחברות

                        • אין לך חשבון עדיין? הרשמה

                        • התחברו או הירשמו כדי לחפש.
                        • פוסט ראשון
                          פוסט אחרון
                        0
                        • דף הבית
                        • קטגוריות
                        • פוסטים אחרונים
                        • משתמשים
                        • חיפוש
                        • חוקי הפורום