我正在 .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。
对我做错了什么有什么想法吗?任何帮助将不胜感激。
经过进一步测试,我已成功根据需要正确更新页脚值。
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 可用于更新文本并应用字体和字体粗细。但是,我还没有设法以这种方式设置颜色。有什么想法吗?