2017-05-01 51 views
7

I am cross-posting this question from Microsoft Community क्योंकि मुझे वहां कोई प्रतिक्रिया नहीं मिली है, और शायद यहां कोई व्यक्ति इस पर कुछ प्रकाश डाल सकता है।बीयूजी: वर्ड 2013 वीएसटीओ टेक्स्ट के सामने प्रारूपित शीर्षलेख में छवि को संभाल नहीं सकता है

मैंने एक ऐसी समस्या देखी है जो दस्तावेज़ को संसाधित करने के लिए VSTO का उपयोग करते समय Word 2013 के लिए विशिष्ट है।

दस्तावेज़ हेडर या फुटर है कि अपने लेआउट विकल्प के लिए सेट "पाठ रैपिंग के साथ" में एक छवि में या तो या "पाठ के सामने में" "पाठ के पीछे" के साथ:

Image with Layout Options set to "With Text Wrapping" with "Behind Text"

का उपयोग करना

The remote procedure call failed. (Exception from HRESULT: 0x800706BE) 

मैं एक रेप्रो यहाँ अपलोड किया है:: Word2013VstoImageFormattedInHeaderBug.zip

VSTO, अगर मैं दस्तावेज़ को खोलने और फिर आकार प्रोसेस करने का प्रयास है, मैं निम्नलिखित अपवाद

कोड के प्रासंगिक टुकड़ा WordFieldEnumerator.cs में है:

private static bool ShapesWithinGroup(Shape shape) 
{ 
    var result = false; 
    try 
    { 
     // shape.GroupItems throws the exception 
     if (shape.GroupItems != null && shape.GroupItems.Count > 0) 
     { 
      result = true; 
     } 
    } 
    catch (UnauthorizedAccessException) 
    { 
     // This shape is not in a group - ignore 
    } 
    catch (Exception exception) 
    { 
     var exceptionString = exception.BuildExceptionString(); 
     Console.WriteLine(exceptionString); 
     Console.WriteLine(exception.StackTrace); 
     //throw; 
    } 

    return result; 
} 

यहाँ पूर्ण अपवाद और स्टैकट्रेस है:

The remote procedure call failed. (Exception from HRESULT: 0x800706BE) 

    at Microsoft.Office.Interop.Word.Shape.get_GroupItems() 
    at Word2013VstoImageFormattedInHeaderBug.WordFieldEnumerator.ShapesWithinGroup(Shape shape) in C:\Users\QA\Desktop\Word2013VstoImageFormattedInHeaderBug\Word2013VstoImageFormattedInHeaderBug\WordFieldEnumerator.cs:line 170 
The RPC server is unavailable. (Exception from HRESULT: 0x800706BA) 

    at Microsoft.Office.Interop.Word.Shape.get_TextFrame() 
    at Word2013VstoImageFormattedInHeaderBug.WordFieldEnumerator.ProcessShapes(IEnumerable`1 shapes) in C:\Users\QA\Desktop\Word2013VstoImageFormattedInHeaderBug\Word2013VstoImageFormattedInHeaderBug\WordFieldEnumerator.cs:line 124 
The RPC server is unavailable. (Exception from HRESULT: 0x800706BA) 

    at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo) 
    at System.Runtime.InteropServices.CustomMarshalers.EnumeratorViewOfEnumVariant.MoveNext() 
    at System.Linq.Enumerable.<CastIterator>d__aa`1.MoveNext() 
    at Word2013VstoImageFormattedInHeaderBug.WordFieldEnumerator.ProcessShapes(IEnumerable`1 shapes) in C:\Users\QA\Desktop\Word2013VstoImageFormattedInHeaderBug\Word2013VstoImageFormattedInHeaderBug\WordFieldEnumerator.cs:line 90 
    at Word2013VstoImageFormattedInHeaderBug.WordFieldEnumerator.GetAllFields() in C:\Users\QA\Desktop\Word2013VstoImageFormattedInHeaderBug\Word2013VstoImageFormattedInHeaderBug\WordFieldEnumerator.cs:line 64 
    at Word2013VstoImageFormattedInHeaderBug.Program.LockDialogFields(Document document) in C:\Users\QA\Desktop\Word2013VstoImageFormattedInHeaderBug\Word2013VstoImageFormattedInHeaderBug\Program.cs:line 116 
    at Word2013VstoImageFormattedInHeaderBug.Program.PdfDocument(String documentFilePath) in C:\Users\QA\Desktop\Word2013VstoImageFormattedInHeaderBug\Word2013VstoImageFormattedInHeaderBug\Program.cs:line 60 

अपवाद है कि क्या मैं इसे पकड़ने का प्रयास हो या नहीं फेंक दिया जाता है, और यह दुर्घटनाओं वर्ड 2013:

Event Viewer entry

इस बग वर्ड 2016 को घटित नहीं होता है, और मैं आकृतियों को सफलतापूर्वक संसाधित कर सकता हूं। हालांकि, Office 2016 में अपग्रेड करना एक विकल्प नहीं है। मुझे लगता है कि बग को ठीक करने के लिए Office 2013 के लिए हॉटफिक्स की आवश्यकता है।

क्या वर्ड 2013 पर काम करने के लिए मैं कुछ भी कर सकता हूं? मैंने कई लाभों का प्रयास किया है, जिसमें कई मरम्मत और ऑफिस 2013 के पुन: इंस्टॉल शामिल हैं, इसका कोई फायदा नहीं हुआ है।

+1

1. क्या आपने [अपना वीडियो ड्राइवर अपडेट किया है] (http://codeworks.it/blog/?p=136)? 2. क्या एंटी-वायरस/फ़ायरवॉल बंद करना कोई फर्क पड़ता है? 3. क्या आपने नामकरण की कोशिश की है [wwlib.dll] (https://answers.microsoft।com/en-us/office/forum/office_2010-word/word-2010-crashes-one-in-two-days-event-viewer/8b415426-3486-45c9-801a-01cbc114b184) और कार्यालय की मरम्मत करना? 4. आप इसे सर्वर ओएस पर नहीं चला रहे हैं? 5. [आकार के साथ काम करने के लिए कोड] (https://social.msdn.microsoft.com/Forums/office/en-US/b89dd0df-d46a-4fbd-97fe-d597fc292ceb/problem-setting-width-for-inlineshape मंच = worddev) सही है? –

+0

@ जेरेमी थॉम्पसन 1. हां। 2. नहीं 3. हां। 4. नहीं, विंडोज 10 64-बिट संस्करण 1511 (ओएस बिल्ड 10586.318), वर्ड 2013 32-बिट 15.0.4823.1000 (एमएसओ 15.0.4823.1000), कार्यालय मानक 2013 का हिस्सा। 5. हां। बग अभी भी होता है, और शब्द अभी भी दुर्घटनाग्रस्त हो जाता है। क्या मुझे कुछ और जांचना चाहिए? –

+0

क्या यह तब भी होता है जब आप समूह के समूह के अपवाद को पकड़ने के बजाय आकार के 'प्रकार' को चेक करते हैं? – Chris

उत्तर

1

आकारों को पृष्ठ पर कहीं भी रखा जा सकता है, लेकिन वे हमेशा टेक्स्ट की एंकरिंग रेंज से जुड़े होते हैं। आकार में आकार देने से पहले वर्तमान श्रेणी का चयन करने से HRESULT 0x80010105 RPC_E_SERVERFAULT अपवाद हल हो सकता है।

अपने GetAllFields() विधि में, चुनें() शीर्ष लेख और पाद की सीमा क्रमशः ProcessShapes() कॉल करने से पहले।

foreach (HeaderFooter header in section.Headers) 
{ 
    if (header.LinkToPrevious) // || header.Index != WdHeaderFooterIndex.wdHeaderFooterFirstPage 
    { 
     continue; 
    } 

    header.Range.Select(); 

    // Add the fields in the header 
    fields.AddRange(header.Range.Fields.Cast<Field>()); 

    // Add the fields in the shapes in the header 
    var fieldsInShapes = ProcessShapes(header.Shapes.Cast<Shape>()); 
    fields.AddRange(fieldsInShapes); 
} 

foreach (HeaderFooter footer in section.Footers) 
{ 
    if (footer.LinkToPrevious) // || footer.Index != WdHeaderFooterIndex.wdHeaderFooterFirstPage 
    { 
     continue; 
    } 

    footer.Range.Select(); 

    // Add the fields in the footer 
    fields.AddRange(footer.Range.Fields.Cast<Field>()); 

    // Add the fields in the shapes in the footer 
    var fieldsInShapes = ProcessShapes(footer.Shapes.Cast<Shape>()); 
    fields.AddRange(fieldsInShapes); 
} 

मुझे नहीं पता कि यह आपकी मदद करता है या नहीं? (मैं कोई पद इंटरॉप विशेषज्ञ हूँ ..)

+0

यह दिलचस्प है और कुछ स्पष्ट नहीं है अगर कोई श्रेणी के बजाय आकार पर केंद्रित है। मैं इसे एक शॉट दूंगा और आपको बता दूंगा कि यह कैसा चल रहा है। उत्तर देने के लिये धन्यवाद! –

+0

मैं इस बारे में बहुत उत्साहित हूं, हमारे क्यूए विभाग ने वर्ड 2013 के लिए इस फिक्स को मंजूरी दे दी है! आधिकारिक तौर पर बग को निश्चित रूप से चिह्नित करने से पहले चलाने के लिए उनके पास कुछ और परीक्षण हैं। तब मैं आपको बक्षीस दूंगा, अच्छी तरह से योग्य! मैं व्यक्त नहीं कर सकता कि मैं कितना डूब गया हूं (गूंगा का उल्लेख नहीं करना), लेकिन यह वीएसटीओ और कॉम है इसलिए मुझे लगता है कि इस तरह की समस्याओं के समाधान बाएं क्षेत्र से बाहर आने की उम्मीद है! एक बार फिर धन्यवाद! –

+0

हाय समीर। मुझे लगता है कि कई लोग महसूस करते हैं कि कार्यालय इंटरऑप/वीएसटीओ एसडीके कम से कम (स्वयं शामिल) कहने के लिए काम करने के लिए मुश्किल हैं। मुझे खुशी है कि चीजें आपके लिए और टीम के लिए सही रास्ते पर हैं और बक्षीस के लिए धन्यवाद। हैप्पी कोडिंग!/फ्रेड्रिक – Fredrik

0

मैं इस पर काम करने के बाद एक बहुत वर्ग WordFieldEnumerator

//foreach (Section section in Document.Sections) 
      //{ 
      // foreach (HeaderFooter header in section.Headers) 
      // { 
      //  if (header.LinkToPrevious) // || header.Index != WdHeaderFooterIndex.wdHeaderFooterFirstPage 
      //  { 
      //   continue; 
      //  } 
      //  // Add the fields in the header 
      //  fields.AddRange(header.Range.Fields.Cast<Field>()); 

      //  // Add the fields in the shapes in the header 
      //  var fieldsInShapes = ProcessShapes(header.Shapes.Cast<Shape>()); 
      //  fields.AddRange(fieldsInShapes); 
      // } 

      // foreach (HeaderFooter footer in section.Footers) 
      // { 
      //  if (footer.LinkToPrevious) // || footer.Index != WdHeaderFooterIndex.wdHeaderFooterFirstPage 
      //  { 
      //   continue; 
      //  } 
      //  // Add the fields in the footer 
      //  fields.AddRange(footer.Range.Fields.Cast<Field>()); 

      //  // Add the fields in the shapes in the footer 
      //  var fieldsInShapes = ProcessShapes(footer.Shapes.Cast<Shape>()); 
      //  fields.AddRange(fieldsInShapes); 
      // } 
      //} 

यह कोई त्रुटि के साथ संभव के रूप में अच्छी तरह से काम पर इस कोड टिप्पणी की; त्रुटि हेडर और पाद लेख में हैं, उनके पास पहुंच समस्या है

+0

दुर्भाग्य से नहीं, कोड 2013 को क्रैश करने के कारण कोड को टिप्पणी करने से कोई फिक्स नहीं पड़ता है। माफ़ कीजिये। –

संबंधित मुद्दे