wordVSTO插件实现自动填充序号
wordVSTO插件实现自动填充序号
开发环境:VS2022
核心代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using Word = Microsoft.Office.Interop.Word;
using Office = Microsoft.Office.Core;
using Microsoft.Office.Tools.Word;namespace WordAddIn1
{public partial class ThisAddIn{private void ThisAddIn_Startup(object sender, System.EventArgs e){}private void ThisAddIn_Shutdown(object sender, System.EventArgs e){}protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject(){return new 鑫鑫Ribbon();}#region VSTO 生成的代码/// <summary>/// 设计器支持所需的方法 - 不要修改/// 使用代码编辑器修改此方法的内容。/// </summary>private void InternalStartup(){this.Startup += new System.EventHandler(ThisAddIn_Startup);this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);}#endregion}[ComVisible(true)][Guid("A1B2C3D4-E5F6-7890-ABCD-EF1234567890")]public class 鑫鑫Ribbon : Office.IRibbonExtensibility{private Office.IRibbonUI ribbon;public string GetCustomUI(string ribbonID){// 确保返回有效的Ribbon XMLstring ribbonXml = @"<customUI xmlns='http://schemas.microsoft.com/office/2009/07/customui' onLoad='OnLoad'><ribbon><tabs><tab id='XinXinTab' label='鑫鑫工具箱' insertAfterMso='TabHome'><group id='XinXinGroup' label='表格工具'><button id='btnFillNumbers' label='自动填充序号' size='large'onAction='OnFillNumbersClick'imageMso='Numbering'/></group></tab></tabs></ribbon>
</customUI>";// 记录日志以便调试try{System.IO.File.WriteAllText(System.IO.Path.Combine(System.IO.Path.GetTempPath(), "RibbonDebug.log"), $"Ribbon XML generated at {DateTime.Now}: {ribbonXml}");}catch { }return ribbonXml;}public void OnFillNumbersClick(Office.IRibbonControl control){try{Word.Application wordApp = Globals.ThisAddIn.Application;Word.Selection selection = wordApp.Selection;// 检查是否选中了表格if (selection.Range.Tables.Count > 0){Word.Table selectedTable = selection.Range.Tables[1];FillTableWithNumbers(selectedTable);MessageBox.Show($"已为选中的表格填充序号,共 {selectedTable.Rows.Count} 行", "成功", MessageBoxButtons.OK, MessageBoxIcon.Information);}else{// 如果没有选中表格,检查文档中的所有表格Word.Document doc = wordApp.ActiveDocument;if (doc.Tables.Count > 0){int totalTables = 0;foreach (Word.Table table in doc.Tables){FillTableWithNumbers(table);totalTables++;}MessageBox.Show($"已为文档中的 {totalTables} 个表格填充序号", "成功", MessageBoxButtons.OK, MessageBoxIcon.Information);}else{MessageBox.Show("文档中没有找到表格!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);}}}catch (Exception ex){MessageBox.Show($"填充序号时出错: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);}}private void FillTableWithNumbers(Word.Table table){for (int i = 1; i <= table.Rows.Count; i++){try{table.Cell(i, 1).Range.Text = i.ToString();}catch{// 如果第一列不存在或无法访问,跳过该行}}}public void OnLoad(Office.IRibbonUI ribbonUI){this.ribbon = ribbonUI;try{System.IO.File.AppendAllText(System.IO.Path.Combine(System.IO.Path.GetTempPath(), "RibbonDebug.log"), $"Ribbon loaded at {DateTime.Now}\r\n");}catch { }}}
}
工程源码文件:https://download.csdn.net/download/weixin_43050480/91997447