如何在 iManage 扩展中使用 Microsoft.Office.Interop.Excel 在 Excel 页脚中设置值?

问题描述 投票:0回答:1

我正在 .NET Framework 4.8 中为 iManage 工作桌面构建一个桌面扩展,它应该能够在 Word、Excel 和 Powerpoint 文档的页脚中设置特定值。

我已经设法使其在 Word 中工作,但在 Excel 中不起作用。通过阅读互操作文档,我的结论是页脚值可以设置为: https://learn.microsoft.com/en-us/dotnet/api/microsoft.office.interop.excel.pagesetup.centerfooter?view=excel-pia#microsoft-office-interop-excel-pagesetup-centerfooter

但是,使用 pageSetup.CenterFooter 我可以成功检索页脚中的值,但无法设置它。

我尝试通过在初始化中从 iManage.Work.Tools 订阅 IExcelPlugInHost 上的 WorkbookBeforeSave 和 WorkbookSaveAs 事件,当 iManage 中引发事件时,我可以成功触发函数。

每次触发事件时,我都可以成功更改单元格的值,但无法在页脚中设置值。

using System;
using iManage.Work.Tools;
using Microsoft.Office.Interop.Excel;

namespace iManageExcelPlugin
{
    public class AddFooterOnFileSaveExcel : PlugInBase
    {
        private int testvalue = 1;

        public override bool Initialize(iManage.Work.Tools.IPlugInHost host)
        {
            try
            {
                PlugInHost = host;
                PlugInId = "AddFooterOnFileSaveExcel";
                IExcelPlugInHost wdHost = host as IExcelPlugInHost;
                if (wdHost == null)
                {
                    throw new ArgumentNullException(nameof(wdHost), "Typecast to IExcelPlugInHost failed.");
                }

                wdHost.WorkbookBeforeSave += BeforeSaveTest;

                return true;
            }
            catch (Exception ex)
            {
                WLog.Error($"An error occured during initialize: {ex}");
                return false;
            }

        }

        private void BeforeSaveTest(object sender, WOfficeEventArgs e)
        {
            Workbook workbook = e.OfficeDocument as Workbook;
            Worksheet worksheet = workbook.Worksheets.Item[1] as Worksheet;

            var testString = $"Testing: {testvalue}";

            worksheet.Cells[1, 1] = testString;
            worksheet.PageSetup.CenterFooter = testString;

            testvalue++;
        }
    }
}

我还将提供 iManage Work Desktop 中的一个示例 下面是 2022 年 10 月版本 10.8.0 的 Windows SDK 指南文档。此示例显示如何在 Word 文档中设置页脚。不幸的是,没有 Excel 和 Powerpoint 的文档。

using System;
using iManage.Work.Tools;
using Word = Microsoft.Office.Interop.Word;
namespace Work10OfficePlugins
{
    public class WordPlugIn2 : PlugInBase
    {
        public override bool Initialize(IPlugInHost host)
        {
            PlugInHost = host;
            PlugInId = "myId";
            IWordPlugInHost wordhost = host as IWordPlugInHost;
            
            wordhost.DocumentBeforeSave += this.onDocumentBeforeSave;
            return true;
        }
        private void onDocumentBeforeSave(object sender, WOfficeSaveAsEventArgs e)
        {
            WLog.TraceEnter();
            WLog.Debug("onDocumentBeforeSaveCalled");
            
            var testString = "this is a test!";
            
            Word.Document documentBeingSaved = (Word.Document)e.OfficeDocument;
                        documentBeingSaved.Sections[1].Footers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range.Text = stateOfDocument;
            WLog.TraceExit();
        }
    }
}

我引用的是 Microsoft.Office.Interop.Excel 版本 15.0.0.0。

对我做错了什么有什么想法吗?任何帮助将不胜感激。

office365 office-interop imanage microsoft.office.interop.excel
1个回答
0
投票

经过进一步测试,我已成功根据需要正确更新页脚值。

WorkbookSaveAs 事件成功设置了页脚值一次,但 WorkbookBeforeSave 事件从未更新页脚值。我的理论是 PageSetup 仅在创建文档时使用,因此在创建和保存文档时第一次起作用。

要编辑现有文档,必须使用 Page 类: https://learn.microsoft.com/en-us/dotnet/api/microsoft.office.interop.excel.page?view=excel-pia

因此将代码更改为:

    private void BeforeSaveTest(object sender, WOfficeEventArgs e)
    {
        Workbook workbook = e.OfficeDocument as Workbook;
        
            var testString = $"&\"Arial,Regular\"&11 this is some text";
        
        foreach(Worksheet worksheet in workbook.Worksheets)
        {
            foreach(Page page in worksheet.PageSetup.Pages)
            {
                page.CenterFooter.Text = testString;
            }
        }

        testvalue++;
    }

page.CenterFooter.Text 可用于更新文本并应用字体和字体粗细。但是,我还没有设法以这种方式设置颜色。有什么想法吗?

© www.soinside.com 2019 - 2024. All rights reserved.