Word 加载项功能区

Posted

技术标签:

【中文标题】Word 加载项功能区【英文标题】:Word Add-In Ribbon 【发布时间】:2013-01-12 12:26:10 【问题描述】:

我创建了一个 Office 插件项目,并为应用程序添加了功能区菜单。当我构建我的项目 word 文档时,我的功能区没有问题。

使用下面的按钮单击事件单击功能区菜单中的按钮时,如何使用 StreamReader 将活动文档保存为文件?

 private void btnsavefile_Click(object sender, RibbonControlEventArgs e)

    //Getting FileStream here.


【问题讨论】:

什么文件流? System.IO.StreamReader 工作正常 Office 插件 @John Koerner 如何在 Ribbon 菜单中使用 StreamReader 读取活动文档? 您到底想保存什么?电子邮件的正文?整个电子邮件使用相当于文件另存为.msg 扩展名? @Magnum 我想将文件保存到 MsSql 服务器,所以我需要获取文件流。 【参考方案1】:

我在 Stack Overflow 中找到了以下解决方案。希望它与您相关。

Serialize current ActiveDocument from office 2007 add-in

就个人而言,我在处理这种情况时也做过同样的事情。我已将文件的副本保存到临时位置并将副本推送到服务器。在这种情况下,活动文档保持原样。

Excel.Workbook xlb = Globals.ThisAddIn.Application.ActiveWorkbook;
xlb.SaveCopyAs(filePath);

希望这会有所帮助!

【讨论】:

【参考方案2】:

void Application_DocumentBeforeClose(Word.Document 文档, ref bool Cancel) 尝试

        string filePath = this.Application.ActiveDocument.FullName.ToString();
        string fileName = this.Application.ActiveDocument.Name;

        //dialogFilePath = filePath;
        dialogFileName = fileName;


        string tempFile;
        string tempPath;


        if (true) 
        

            var confirmResult = System.Windows.Forms.MessageBox.Show("Are you sure to save this document ??",
                    "Confirm Save!!",
                    System.Windows.Forms.MessageBoxButtons.YesNo);
            if (confirmResult == System.Windows.Forms.DialogResult.Yes)
            
                //document.Save();
                var iPersistFile = (IPersistFile)document;
                iPersistFile.Save(tempPath, false);

               //Do some action here 
            

            Word._Document wDocument = Application.Documents[fileName] as Word._Document;
            //wDocument.Close(Word.WdSaveOptions.wdDoNotSaveChanges);
            ThisAddIn.doc.Close(Word.WdSaveOptions.wdDoNotSaveChanges);
        

    
    catch (Exception exception)
    

    


【讨论】:

【参考方案3】:

创建 Word 插件项目-> 从添加新项目添加功能区视觉设计器。

将菜单添加到功能区设计器并在ribbonsample.cs 中编写以下代码

public partial class RibbonSample

  private void RibbonSample_Load(object sender, RibbonUIEventArgs e)
  
    // Initialise log4net 
  
  //Adding items in menu from DB
  public RibbonSample()
        : base(Globals.Factory.GetRibbonFactory())
    
        InitializeComponent();
        try
        
            System.Data.DataTable dt = new DataAcces().GetData();
            if (dt.Rows.Count > 0)
            
                for (int i = 0; i < dt.Rows.Count; i++)
                
                    RibbonButton Field = this.Factory.CreateRibbonButton();
                    Field.Label = dt.Rows[i][1].ToString();
                    Field.Tag = i;
                    Field.ControlSize =
                        Microsoft.Office.Core.RibbonControlSize.RibbonControlSizeLarge;
                    Field.Click += Field_Click;
                    menu1.Items.Add(Field);
                
            
            else
            
                System.Windows.Forms.MessageBox.Show("No Fields are available in database");
            
        
        catch (Exception exception)
        
            //thrw exception
        
    

//Select menu item text in word 
void Field_Click(object sender, RibbonControlEventArgs e)

    try
    
        Microsoft.Office.Interop.Word.Range currentRange = Globals.ThisAddIn.Application.Selection.Range;
        currentRange.Text = (sender as RibbonButton).Label;
    
    catch (Exception exception)
    
        log.Error(friendlyErrorMessage + " Field_Click Details:" + exception.Message, exception);
    
  

【讨论】:

以上是关于Word 加载项功能区的主要内容,如果未能解决你的问题,请参考以下文章

急求助,office 2010 Word,Excel的功能区突然消失了,点击展开功能区无效.在网上搜了很久没有找到解决办法

VSTO Word 加载项:内容控制嵌套

恢复word中审阅选项卡

office2016系列产品关闭时卡顿

将 Js 加载项添加到由 VSTO 加载项创建的自定义功能区选项卡

office 2010 自定义功能区 设置无效