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

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

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

VB.NET : DOCX : מדוע וורד נפתח לקריאה בלבד ?

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

    אני משתמש בתוכנית המפורסמת כאן כדי לחלץ את הטקסט שבמסמכי וורד:
    http://www.codeproject.com/Articles/20529/Using-DocxToText-to-Extract-Text-from-DOCX-Files

    אך לאחר שהתוכנית מחלצת את המסמך ומציגה רק את הטקסט שלו - אם פותחים את המסמך בוורד הוא נפתח לקריאה בלבד, אע''פ שהתוכנית כבר לא משתמשת במסמך כלל, ורק לאחר סגירת התוכנית אפשר לפתוח את המסמך בוורד לעריכה.
    מישהו מוכן לעיין בקוד של התוכנית ולאמר לי מדוע זה קורא ואיך אפשר למנוע את זה?
    תודה רבה!

    פורסם במקור בפורום CODE613 ב24/07/2013 20:22 (+03:00)

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

      לא ראיתי את כל הקוד ממש ואני גם לא יודע באיזו פונקציה אתה משתמש, אבל בכל אופן, צריך שיהיה באופן מפורש פקודת Close שמתיחחסת ישירות למסמך הוורד, אחרת הוא עדיין טעון ובשימוש של אותה התוכנית, כך שלפי כללי windows אסור ש 2 תהליכים ישתמשו באותו קובץ לעריכה, ועל כן הוא נפתח לקריאה בלבד.

      בהצלחה.

      פורסם במקור בפורום CODE613 ב25/07/2013 13:15 (+03:00)

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

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

        @ארכיטקט

        לא ראיתי את כל הקוד ממש ואני גם לא יודע באיזו פונקציה אתה משתמש, אבל בכל אופן, צריך שיהיה באופן מפורש פקודת Close שמתיחחסת ישירות למסמך הוורד, אחרת הוא עדיין טעון ובשימוש של אותה התוכנית, כך שלפי כללי windows אסור ש 2 תהליכים ישתמשו באותו קובץ לעריכה, ועל כן הוא נפתח לקריאה בלבד.

        בהצלחה.

        תודה.

        כיון שקובץ docx הוא בעצם ZIP משתמשים שם ב ספריה ICSharpCode.SharpZipLib.Zip
        ואכן יש שם פקודה של Close לאחר כל שימוש בספריה זו.
        יש פה עובדה מעניינת:
        אם הקובץ כבר פתוח בוורד ואני בא לחלץ את הטקסט שלו אי אפשר לפתוח אותו עם הספריה הנ''ל והוא מודיע שקובץ בשימוש, אבל אם הקובץ לא פתוח בשום מקום ועשיתי לו חילוץ ושוב חילוץ זה עובד ואין הודעת שגיאה שהקובץ תפוס כלומר שהחילוץ הראשון לא השאיר את הקובץ תפוס אלא סגר אותו ולכן אפשר לחלץ שוב. אבל כאשר פותחים את הקובץ אחר החילוץ בוורד הוא נפתח לקריאה בלבד כאילו הקובץ תפוס, וגם וורד לא שואל כלל אם לפתוח לקריאה בלבד כמו שהוא נוהג כאשר הקובץ בשימוש אלא מיד פותח לקריאה בלבד.

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

        פורסם במקור בפורום CODE613 ב25/07/2013 13:34 (+03:00)

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

          לדעתי הבעיה היא לא קובץ בשימוש, אלא סימון כסופי וכדומה.
          אתה יכול לבדוק זאת בקלות ע"י השוואת שני ה"חבילות" (הקבצים אחרי פתיחת ZIP).
          ככלל, כשיש ספק אם בעיה מסויימת היא עקב שימוש של יישום אחר, העתקה של הקובץ פותרת את הספק.

          אבל, וה"אבל" הזה גדול, אני לא מבין מה ההוא מCodeproject יותר טוב מהשימוש בOpen XML.
          לכן אני לא מבקש ממך להעלות את הקוד שלך, כי אני מקוה שבמקום להתעמק בשל ההוא, תשתמש עם הרשמי והמפורסם.
          הנה ההורדה הרשמית: http://www.microsoft.com/en-us/download/details.aspx?id=5124
          העיקר זה הקובץ הקטן, הוא הDLL. הגדול זה טוב ללמוד איך עובדים הקבצים מבוססי הOpenXml, מה הם מכילים ואיך לקרוא ולכתוב את זה.

          הנה מה שצריך לקריאת הטקסט כמדומני:

          Dim Doc = Packaging.WordprocessingDocument.Open(filename, False)
          Return Doc.MainDocumentPart.Document.InnerText
          Doc.Close()
          

          פורסם במקור בפורום CODE613 ב25/07/2013 15:38 (+03:00)

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

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

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

            @דוד ל.ט.

            לדעתי הבעיה היא לא קובץ בשימוש, אלא סימון כסופי וכדומה.

            כוונתך שהמסמך הוורד מסומן כסופי? אבל הוא לא מסומן, והראיה שאחרי סגירת תוכנית חילוץ הטקסט הקובץ נפתח לעריכה כרגיל.

            @דוד ל.ט.

            אתה יכול לבדוק זאת בקלות ע"י השוואת שני ה"חבילות" (הקבצים אחרי פתיחת ZIP).

            לא הבנתי למה כוונתך.

            @דוד ל.ט.

            ככלל, כשיש ספק אם בעיה מסויימת היא עקב שימוש של יישום אחר, העתקה של הקובץ פותרת את הספק.

            דווקא אפשר להעתיק קובץ וורד גם בזמן שהוא פתוח בוורד ע''י הפקודה File.Copy. וכאשר אני רוצה לחלץ טקסט מקובץ וורד שפתוח בוורד אני לא יכול לפתוח אותו עם ספריית ZIP הנ''ל כי הוא מוציא שגיאה שהקובץ בשימוש ואז אני קודם מעתיק אותו לקובץ זמני ואז את הזמני אני פותח עם ZIP.

            @דוד ל.ט.

            אבל, וה"אבל" הזה גדול, אני לא מבין מה ההוא מCodeproject יותר טוב מהשימוש בOpen XML.

            הקוד שלו נותן לך טקסט עם חלוקה לפסקאות אבל אם אתה תקח רק את ה Document.InnerText אתה תקבל את כל המילים דבוקות. דבר שהקוד שלו לא נותן זה הטקסט של ההערות שוליים והערות הסיום אבל את זה אני כבר הוספתי לבד.
            אגב על אותה הדרך כתבתי קלאס שמחלץ טבלאות/גליונות מתוך xlsx

            פורסם במקור בפורום CODE613 ב25/07/2013 15:53 (+03:00)

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

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

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

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

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

              פורסם במקור בפורום CODE613 ב25/07/2013 16:28 (+03:00)

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

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

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

                הנה קוד מעודכן למה שביקשת:

                Dim Doc = Packaging.WordprocessingDocument.Open(filename, False)
                Dim tb As New Text.StringBuilder
                For Each P In Doc.MainDocumentPart.Document.Elements(Of Wordprocessing.Paragraph)()
                    tb.Append(P.InnerText)
                    tb.Append(vbCrLf)
                Next
                Doc.Close()
                
                Return tb.ToString()
                

                פורסם במקור בפורום CODE613 ב25/07/2013 16:38 (+03:00)

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

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

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

                  @דוד ל.ט.

                  הנה קוד מעודכן למה שביקשת:

                  Dim Doc = Packaging.WordprocessingDocument.Open(filename, False)
                  Dim tb As New Text.StringBuilder
                  For Each P In Doc.MainDocumentPart.Document.Elements(Of Wordprocessing.Paragraph)()
                      tb.Append(P.InnerText)
                      tb.Append(vbCrLf)
                  Next
                  Doc.Close()
                  
                  Return tb.ToString()
                  

                  משום מה הקוד הזה לא עובד הוא לא מזהה שום פיסקה במסמך, מה גם שה DLL שלו הוא חמש מגה! וכעת אני מחלץ את הטקסט מוורד ואקסל בפחות מ300 KB

                  פורסם במקור בפורום CODE613 ב25/07/2013 16:56 (+03:00)

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

                    הנה הפרוייקט המקורי כפי שפורסם:
                    DocxToText_demo.zip

                    הקוד הוא מאוד פשוט וקצר אני מקווה שתגלו בקלות מה מונע את וורד לפתוח את הקובץ לעריכה.
                    תבורכו מפי עליון!

                    פורסם במקור בפורום CODE613 ב25/07/2013 17:13 (+03:00)

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

                      נכון, בקוד שלי יש טעות, צריך להוסיף אחרי המילה Document. את המילה Body.

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

                      אם אתה ממשיך עם הקוד ההוא עשה כעצתי ו"דבג" אותו צעד צעד.

                      פורסם במקור בפורום CODE613 ב25/07/2013 17:45 (+03:00)

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

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

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

                        @רחמים

                        הנה הפרוייקט המקורי כפי שפורסם:

                        הקוד הוא מאוד פשוט וקצר אני מקווה שתגלו בקלות מה מונע את וורד לפתוח את הקובץ לעריכה.
                        תבורכו מפי עליון!

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

                        פורסם במקור בפורום CODE613 ב25/07/2013 17:47 (+03:00)

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

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

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

                          ברוך ה' !
                          העצות הועילו ואכן היה חסר סגירה של הZIP כיון שהבקוד שפורסם יש סגירה רק בסוף כל פונקציה אבל מה שקורה שפעמים הוא יוצא מהפונקציה כבר באמצע בלא לסגור וכך הוא נשאר פתוח.

                          תודה רבה לכולם!!

                          פורסם במקור בפורום CODE613 ב25/07/2013 18:32 (+03:00)

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

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

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

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