2016-09-14 7 views
0

Я работаю над надстройкой Office. Я застрял в проблеме. Я хочу добавить документ Word в качестве связанного объекта в другой документ с использованием C# и VSTO. Я копаю и обнаружил, что для этой цели я должен использовать поле «INCLUDETEXT». В VSTO InsertFile fuction имеет параметр с именем «Ссылка», если этот параметр установлен в true, тогда указанный документ слова вставлен как связанный объект.Selection.InsertFile C# Ошибка

Вот мой код:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Microsoft.Office.Tools.Ribbon; 
using Microsoft.Office.Interop.Word; 
using System.Windows.Forms; 
using System.Drawing; 

namespace WordAddIn1 
{ 
    public partial class MyRibbon 
    { 
     string txt = ""; 
     bool hhh = false; 
     string file_name = ""; 
     string file_path = ""; 
     DataObject o; 
     string cmp=""; 

     private void MyRibbon_Load(object sender, RibbonUIEventArgs e) 
     { 
      checkBox1.Checked = false; 
      o = (DataObject)Clipboard.GetDataObject(); 

     } 

     private void checkBox1_Click(object sender, RibbonControlEventArgs e) 
     { 

      if (checkBox1.Checked == true && (o.ContainsText()||o.ContainsImage())) 
      { 


       txt = Globals.ThisAddIn.Application.Selection.Text.Trim(); 
       file_name = Globals.ThisAddIn.Application.ActiveDocument.Name; 
       file_path = Globals.ThisAddIn.Application.ActiveDocument.Path; 
       cmp = file_path + "\\" + file_name; 
       hhh = txt.Length > 0; 

       if (hhh) 
       { 

        Console.Beep(); 

       } 
      } 

      else 
      { 

       if (o.ContainsText() || o.ContainsImage()) 
       { 
        string FileName = "C:\\final.docx"; 
        object range = "hashim"; 

        object ConfirmConversions = false; 
        object Link = true; 
        object Attachment = false; 


        Globals.ThisAddIn.Application.Selection.InsertFile(FileName, range,ConfirmConversions ,Link, Attachment); 

        Form1 frm = new Form1(file_name.ToString(),file_path.ToString()); 
        frm.Show(); 

       } 

      } 

    } 



    } 
} 

Линия

Globals.ThisAddIn.Application.Selection.InsertFile (FileName, диапазон, ConfirmConversions, Link, приложение);

не показывает какой-либо ошибки в редакторе или во время компиляции, но, когда я использую надстройку в офисе дает ошибку на этой линии и сказал «Command Failed»

Вот скриншот ошибки

enter image description here

Вот StackTrace из Error

enter image description here

Но когда я просто использую эту строку, она не дает ошибок, и файл вставлен, но не как связанный объект.

Globals.ThisAddIn.Application.Selection.InsertFile (FileName)

Где проблема? Также скажите, есть ли у вас идея вставить связанный объект (документ Word) в другой документ. ?

+1

Вставляет ли документ в закладки с именем «hashim»? –

+0

@DirkVollmar да он содержит –

+1

Можете ли вы успешно вставить поле INCLUDETEXT вручную? На вкладке * Вставить * выберите * Быстрые части *> * Поля ... *, затем выберите INCLUDETEXT слева и нажмите кнопку * Полевые коды *. Затем введите «INCLUDETEXT» C: \\ final.docx «hashim' в качестве кода поля. Если есть проблема с файлом или именем закладки, вы, скорее всего, получите сообщение об ошибке, отличное от сообщения COMException. –

ответ

0

Примечание: В приведенном выше коде отсутствует ошибка. Проблема заключается в том, что у меня нет объекта закладки в моем текстовом файле, который будет связан. Я создал один с именем «hashim» и он работает как шарм.

Решение:

Если мы обратимся к документации InsertFile

Summary: 
     //  Inserts all or part of the specified file. 
     // 
     // Parameters: 
     // FileName: 
     //  Required String. The path and file name of the file to be inserted. If you don't 
     //  specify a path, Microsoft Word assumes the file is in the current folder. 
     // 
     // Range: 
     //  Optional Object. If the specified file is a Word document, this parameter refers 
     //  to a bookmark. If the file is another type (for example, a Microsoft Excel worksheet), 
     //  this parameter refers to a named range or a cell range (for example, R1C1:R3C4). 
     // 
     // ConfirmConversions: 
     //  Optional Object. True to have Word prompt you to confirm conversion when inserting 
     //  files in formats other than the Word Document format. 
     // 
     // Link: 
     //  Optional Object. True to insert the file by using an INCLUDETEXT field. 
     // 
     // Attachment: 
     //  Optional Object. True to insert the file as an attachment to an e-mail message. 

См Диапазон параметра Если файл мы связываем это "Документ Word" затем в этом файле должна быть создана закладка с именем. Вы должны передать это имя закладки в объекте Range. Как

object Range = "hashim"; 

здесь Хашим это имя закладки в файл, который связан в другой файл документа.

Если закладка не указана, она должна дать ошибку.

Теперь, если связующий объект является Excel Document тогда объект диапазон должен содержит информацию клетки, как

object Range = "R1C1:R3C4"; 

Здесь «R1C1: R3C4» является диапазон ячеек в Excel, что мы хотим связать в нашем документе.

Примечание: Мы можем добавить полный или часть документа Excel или слова. Просто просмотрите документацию Range Object.

Надеюсь, что ответ ясно. Спасибо