This commit is contained in:
HuangHai
2026-01-24 17:53:22 +08:00
parent 5e0fe0c628
commit bb91aad9ac
22 changed files with 218 additions and 241 deletions

Binary file not shown.

View File

@@ -26,12 +26,8 @@
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 1,
"SelectedChildIndex": 0,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:0:0:{3ae79031-e1bc-11d0-8f78-00a0c9110057}"
},
{
"$type": "Document",
"DocumentIndex": 0,
@@ -40,11 +36,15 @@
"RelativeDocumentMoniker": "WordAddIn\\AiRibbon.cs",
"ToolTip": "D:\\dsWork\\aiData\\WordAddIn\\WordAddIn\\AiRibbon.cs",
"RelativeToolTip": "WordAddIn\\AiRibbon.cs",
"ViewState": "AgIAACgAAAAAAAAAAAAAACgAAAAIAAAAAAAAAA==",
"ViewState": "AgIAACgAAAAAAAAAAAAAACgAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2026-01-24T02:46:43.959Z",
"EditorCaption": ""
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{3ae79031-e1bc-11d0-8f78-00a0c9110057}"
},
{
"$type": "Document",
"DocumentIndex": 1,

View File

@@ -26,12 +26,8 @@
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 1,
"SelectedChildIndex": 0,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:0:0:{3ae79031-e1bc-11d0-8f78-00a0c9110057}"
},
{
"$type": "Document",
"DocumentIndex": 0,
@@ -40,11 +36,15 @@
"RelativeDocumentMoniker": "WordAddIn\\AiRibbon.cs",
"ToolTip": "D:\\dsWork\\aiData\\WordAddIn\\WordAddIn\\AiRibbon.cs",
"RelativeToolTip": "WordAddIn\\AiRibbon.cs",
"ViewState": "AgIAACgAAAAAAAAAAAAAACgAAAAIAAAAAAAAAA==",
"ViewState": "AgIAACgAAAAAAAAAAAAAACgAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2026-01-24T02:46:43.959Z",
"EditorCaption": ""
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{3ae79031-e1bc-11d0-8f78-00a0c9110057}"
},
{
"$type": "Document",
"DocumentIndex": 1,

View File

@@ -10,8 +10,9 @@ using System.Threading.Tasks;
using System.Windows.Forms;
using Office = Microsoft.Office.Core;
using Word = Microsoft.Office.Interop.Word;
using WordAddIn.Properties; // 引用 Properties 命名空间
using WordAddIn.Properties;
using WordAddIn.Models;
using Newtonsoft.Json;
namespace WordAddIn
{
@@ -23,7 +24,6 @@ namespace WordAddIn
private static bool _isLoggedIn = false; // 登录状态 (静态变量,确保整个应用程序生命周期内有效)
private string _documentContext = null; // 存储文档的全文分析上下文
private string _referenceContext = null; // 存储外部参考文档内容
private StyleProfile _styleProfile = null; // 存储文档的样式配置
public AiRibbon()
{
@@ -737,6 +737,122 @@ namespace WordAddIn
}
}
public void OnOutlineSettingClick(Office.IRibbonControl control)
{
if (!EnsureLoggedIn()) return;
using (var form = new OutlineSettingsForm())
{
form.ShowDialog();
}
}
public async void OnCreateOutlineClick(Office.IRibbonControl control)
{
if (!EnsureLoggedIn()) return;
string topic = null;
using (var form = new CreateOutlineForm())
{
if (form.ShowDialog() != DialogResult.OK) return;
topic = form.Topic;
}
LoadingForm loading = null;
try
{
loading = new LoadingForm("AI 正在生成大纲,请稍候...");
loading.Show();
loading.Refresh();
var outline = await Task.Run(() => _aiService.GenerateOutline(topic));
if (outline == null || outline.Count == 0)
{
MessageBox.Show("生成大纲失败,请重试。");
return;
}
// Load config
OutlineStyleConfig config = null;
try
{
string json = Settings.Default.OutlineStyles;
if (!string.IsNullOrEmpty(json))
{
config = JsonConvert.DeserializeObject<OutlineStyleConfig>(json);
}
}
catch { }
if (config == null) config = new OutlineStyleConfig();
var selection = Globals.ThisAddIn.Application.Selection;
// Move to end of selection to avoid overwriting if just cursor
selection.Collapse(Word.WdCollapseDirection.wdCollapseEnd);
foreach (var item in outline)
{
// Type text
selection.TypeText(item.Title);
// Get current paragraph
Word.Paragraph p = selection.Paragraphs[1];
// 1. Apply Built-in Style
try
{
switch (item.Level)
{
case 0: p.set_Style(Word.WdBuiltinStyle.wdStyleTitle); break;
case 1: p.set_Style(Word.WdBuiltinStyle.wdStyleHeading1); break;
case 2: p.set_Style(Word.WdBuiltinStyle.wdStyleHeading2); break;
case 3: p.set_Style(Word.WdBuiltinStyle.wdStyleHeading3); break;
default: p.set_Style(Word.WdBuiltinStyle.wdStyleNormal); break;
}
}
catch { }
// 2. Apply Custom Config
TextStyle style = null;
switch (item.Level)
{
case 0: style = config.MainTitle; break;
case 1: style = config.Heading1; break;
case 2: style = config.Heading2; break;
case 3: style = config.Heading3; break;
default: style = config.Heading3; break;
}
if (style != null)
{
p.Range.Font.Name = style.FontName;
p.Range.Font.Size = style.FontSize;
p.Range.Font.Bold = style.IsBold ? 1 : 0;
p.Range.Font.Color = Word.WdColor.wdColorBlack; // 强制设置为黑色
if (style.Alignment == 1) p.Format.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
else if (style.Alignment == 2) p.Format.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight;
else p.Format.Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft;
}
// New line for next item
selection.TypeParagraph();
}
}
catch (Exception ex)
{
MessageBox.Show("创建大纲失败: " + ex.Message);
}
finally
{
if (loading != null)
{
loading.CloseSafe();
loading.Dispose();
}
}
}
public void OnSettingsClick(Office.IRibbonControl control)
{
MessageBox.Show("请在代码 AiService.cs 中配置您的 API Key。", "设置");

View File

@@ -4,6 +4,8 @@
<tabs>
<tab id="tabAiAssistant" label="AI助手">
<group id="groupContent" label="内容创作">
<button id="btnCreateOutline" label="创建大纲" size="large" onAction="OnCreateOutlineClick" imageMso="ViewOutlineView" />
<button id="btnOutlineSetting" label="大纲配置" size="large" onAction="OnOutlineSettingClick" imageMso="ParagraphDialog" />
<button id="btnReadFull" label="通读全文" size="large" onAction="OnReadFullClick" imageMso="FindDialog" />
<button id="btnImportReference" label="补充背景" size="large" onAction="OnImportReferenceClick" imageMso="ImportTextFile" />
<button id="btnReferenceGenerate" label="素材写作" size="large" onAction="OnReferenceGenerateClick" imageMso="ReviewCompareTwoVersions" />

View File

@@ -131,6 +131,41 @@ namespace WordAddIn
return await GetChatCompletion(messages);
}
public async Task<List<OutlineItem>> GenerateOutline(string topic)
{
string systemPrompt = @"你是一个专业的文档大纲生成助手。请根据用户提供的主题或描述,生成一个结构化的文档大纲。
要求包含:
1. 主标题 (Level 0)
2. 一级目录 (Level 1)
3. 二级目录 (Level 2)
4. 三级目录 (Level 3)
请只返回一个JSON数组数组中的每个元素包含 'Title' (标题文本) 和 'Level' (整数层级0-3)。
例如:[{""Title"": ""关于人工智能的发展报告"", ""Level"": 0}, {""Title"": ""第一章 绪论"", ""Level"": 1}, {""Title"": ""1.1 研究背景"", ""Level"": 2}]
请确保返回的是合法的JSON格式不包含Markdown标记。";
var messages = new List<Message>
{
new Message { role = "system", content = systemPrompt },
new Message { role = "user", content = topic }
};
string jsonResponse = await GetChatCompletion(messages);
// 清理可能存在的 Markdown 代码块标记
jsonResponse = jsonResponse.Replace("```json", "").Replace("```", "").Trim();
try
{
return JsonConvert.DeserializeObject<List<OutlineItem>>(jsonResponse);
}
catch (Exception ex)
{
Console.WriteLine("JSON Parsing Failed: " + ex.Message);
return new List<OutlineItem>();
}
}
public async Task<List<HeadingInfo>> AnalyzeStructure(string text)
{
string systemPrompt = @"你是一个文档格式专家。请分析用户提供的文档内容识别出所有的标题及其对应的层级1级、2级、3级...)。

View File

@@ -1,120 +0,0 @@
using System;
using System.Drawing;
using System.Windows.Forms;
using WordAddIn.Properties;
namespace WordAddIn
{
public class FormatOptionsForm : Form
{
public string SelectedFontName { get; private set; }
public float SelectedFontSize { get; private set; }
public float SelectedLineSpacing { get; private set; }
private ComboBox cmbFontName;
private ComboBox cmbFontSize;
private ComboBox cmbLineSpacing;
private Button btnOk;
private Button btnCancel;
public FormatOptionsForm()
{
InitializeComponent();
LoadSettings();
}
private void InitializeComponent()
{
this.Text = "格式化设置";
this.Size = new Size(350, 250);
this.StartPosition = FormStartPosition.CenterScreen;
this.FormBorderStyle = FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
int labelX = 30;
int inputX = 120;
int startY = 30;
int gapY = 40;
// 1. 字体
var lblFont = new Label { Text = "字体:", Location = new Point(labelX, startY + 5), AutoSize = true };
cmbFontName = new ComboBox { Location = new Point(inputX, startY), Width = 150, DropDownStyle = ComboBoxStyle.DropDownList };
// 简单添加几个常用中文字体
cmbFontName.Items.AddRange(new object[] { "微软雅黑", "宋体", "黑体", "楷体", "Arial", "Times New Roman" });
// 2. 字号
var lblSize = new Label { Text = "字号:", Location = new Point(labelX, startY + gapY + 5), AutoSize = true };
cmbFontSize = new ComboBox { Location = new Point(inputX, startY + gapY), Width = 150, DropDownStyle = ComboBoxStyle.DropDownList };
cmbFontSize.Items.AddRange(new object[] { "9", "10", "10.5", "11", "12", "14", "16", "18", "22", "24" });
// 3. 行间距
var lblSpacing = new Label { Text = "行间距(倍):", Location = new Point(labelX, startY + gapY * 2 + 5), AutoSize = true };
cmbLineSpacing = new ComboBox { Location = new Point(inputX, startY + gapY * 2), Width = 150, DropDownStyle = ComboBoxStyle.DropDownList };
cmbLineSpacing.Items.AddRange(new object[] { "1.0", "1.25", "1.5", "2.0", "2.5", "3.0" });
// Buttons
btnOk = new Button { Text = "确定", Location = new Point(130, 160), Width = 80, Height = 30, DialogResult = DialogResult.OK };
btnOk.Click += BtnOk_Click;
btnCancel = new Button { Text = "取消", Location = new Point(220, 160), Width = 80, Height = 30, DialogResult = DialogResult.Cancel };
this.Controls.Add(lblFont);
this.Controls.Add(cmbFontName);
this.Controls.Add(lblSize);
this.Controls.Add(cmbFontSize);
this.Controls.Add(lblSpacing);
this.Controls.Add(cmbLineSpacing);
this.Controls.Add(btnOk);
this.Controls.Add(btnCancel);
this.AcceptButton = btnOk;
this.CancelButton = btnCancel;
}
private void LoadSettings()
{
// 读取保存的设置,如果没有则使用默认值
string fontName = Settings.Default.FormatFontName;
float fontSize = Settings.Default.FormatFontSize;
float lineSpacing = Settings.Default.FormatLineSpacing;
if (cmbFontName.Items.Contains(fontName))
cmbFontName.SelectedItem = fontName;
else
cmbFontName.SelectedIndex = 0;
string sizeStr = fontSize.ToString();
if (cmbFontSize.Items.Contains(sizeStr))
cmbFontSize.SelectedItem = sizeStr;
else
cmbFontSize.SelectedItem = "12";
string spacingStr = lineSpacing.ToString();
if (cmbLineSpacing.Items.Contains(spacingStr))
cmbLineSpacing.SelectedItem = spacingStr;
else
cmbLineSpacing.SelectedItem = "1.5";
}
private void BtnOk_Click(object sender, EventArgs e)
{
// 保存设置
if (cmbFontName.SelectedItem != null)
Settings.Default.FormatFontName = cmbFontName.SelectedItem.ToString();
if (cmbFontSize.SelectedItem != null && float.TryParse(cmbFontSize.SelectedItem.ToString(), out float size))
Settings.Default.FormatFontSize = size;
if (cmbLineSpacing.SelectedItem != null && float.TryParse(cmbLineSpacing.SelectedItem.ToString(), out float spacing))
Settings.Default.FormatLineSpacing = spacing;
Settings.Default.Save();
// 更新属性供外部调用
SelectedFontName = Settings.Default.FormatFontName;
SelectedFontSize = Settings.Default.FormatFontSize;
SelectedLineSpacing = Settings.Default.FormatLineSpacing;
}
}
}

View File

@@ -46,4 +46,27 @@ namespace WordAddIn.Models
{
public string url { get; set; }
}
// Outline Models
public class OutlineItem
{
public string Title { get; set; }
public int Level { get; set; } // 0=MainTitle, 1=H1, 2=H2, 3=H3
}
public class OutlineStyleConfig
{
public TextStyle MainTitle { get; set; } = new TextStyle { FontSize = 22, IsBold = true, FontName = "微软雅黑", Alignment = 1 }; // Center
public TextStyle Heading1 { get; set; } = new TextStyle { FontSize = 16, IsBold = true, FontName = "黑体" };
public TextStyle Heading2 { get; set; } = new TextStyle { FontSize = 14, IsBold = true, FontName = "黑体" };
public TextStyle Heading3 { get; set; } = new TextStyle { FontSize = 12, IsBold = true, FontName = "宋体" };
}
public class TextStyle
{
public string FontName { get; set; } = "宋体";
public float FontSize { get; set; } = 12;
public bool IsBold { get; set; } = false;
public int Alignment { get; set; } = 0; // 0=Left, 1=Center, 2=Right
}
}

View File

@@ -70,5 +70,17 @@ namespace WordAddIn.Properties {
this["LastImageStyle"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string OutlineStyles {
get {
return ((string)(this["OutlineStyles"]));
}
set {
this["OutlineStyles"] = value;
}
}
}
}

View File

@@ -16,5 +16,8 @@
<Setting Name="LastImageStyle" Type="System.String" Scope="User">
<Value Profile="(Default)">写实摄影 (Photorealistic)</Value>
</Setting>
<Setting Name="OutlineStyles" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
</Settings>
</SettingsFile>

View File

@@ -1,96 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Word = Microsoft.Office.Interop.Word;
using Microsoft.Office.Interop.Word;
namespace WordAddIn
{
public class StyleProfile
{
public Dictionary<string, StyleAttributes> Styles { get; set; } = new Dictionary<string, StyleAttributes>();
public string NumberingSchemeDescription { get; set; } // 描述编号规则,如 "一级标题使用一、,二级使用(一)"
}
public class StyleAttributes
{
public string FontName { get; set; } // ASCII Font
public string FontNameFarEast { get; set; } // Asian Font
public float FontSize { get; set; }
public int Color { get; set; }
public int Bold { get; set; }
public float LineSpacing { get; set; }
public Word.WdLineSpacing LineSpacingRule { get; set; }
public float FirstLineIndent { get; set; }
public float SpaceBefore { get; set; }
public float SpaceAfter { get; set; }
public string StyleName { get; set; } // Word内部的样式名称
}
public static class StyleAnalyzer
{
public static StyleProfile AnalyzeDocumentStyles(Document doc)
{
var profile = new StyleProfile();
// 定义我们需要关注的样式层级
// wdStyleHeading1 = -2, Heading2 = -3, Heading3 = -4, Normal = -1
var targets = new Dictionary<WdBuiltinStyle, string>
{
{ WdBuiltinStyle.wdStyleHeading1, "Heading 1" },
{ WdBuiltinStyle.wdStyleHeading2, "Heading 2" },
{ WdBuiltinStyle.wdStyleHeading3, "Heading 3" },
{ WdBuiltinStyle.wdStyleNormal, "Normal" }
};
foreach (var target in targets)
{
try
{
// 获取文档中的样式定义
Style style = doc.Styles[target.Key];
var attrs = new StyleAttributes
{
FontName = style.Font.Name,
FontNameFarEast = style.Font.NameFarEast,
FontSize = style.Font.Size,
Color = (int)style.Font.Color,
Bold = style.Font.Bold,
StyleName = style.NameLocal, // 获取本地化名称,如 "标题 1"
LineSpacing = style.ParagraphFormat.LineSpacing,
LineSpacingRule = style.ParagraphFormat.LineSpacingRule,
FirstLineIndent = style.ParagraphFormat.CharacterUnitFirstLineIndent > 0 ? style.ParagraphFormat.CharacterUnitFirstLineIndent : style.ParagraphFormat.FirstLineIndent,
SpaceBefore = style.ParagraphFormat.SpaceBefore,
SpaceAfter = style.ParagraphFormat.SpaceAfter
};
profile.Styles[target.Value] = attrs;
}
catch
{
// 样式可能不存在
}
}
return profile;
}
public static string GenerateStyleDescription(StyleProfile profile)
{
var sb = new StringBuilder();
sb.AppendLine("文档排版规则:");
foreach (var kv in profile.Styles)
{
var s = kv.Value;
string levelName = kv.Key == "Normal" ? "正文" : kv.Key.Replace("Heading ", "级标题");
sb.AppendLine($"- {levelName}: 中文字体[{s.FontNameFarEast}], 英文字体[{s.FontName}], 大小[{s.FontSize}]");
}
return sb.ToString();
}
}
}

View File

@@ -225,16 +225,12 @@
<Compile Include="ExpandOptionsForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="FormatOptionsForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ImageOptionsForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ReferenceGeneratorForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StyleAnalyzer.cs" />
<Compile Include="LoginForm.cs">
<SubType>Form</SubType>
</Compile>
@@ -244,6 +240,12 @@
<Compile Include="AiService.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="CreateOutlineForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="OutlineSettingsForm.cs">
<SubType>Form</SubType>
</Compile>
<EmbeddedResource Include="AiRibbon.xml" />
<None Include="ThisAddIn.Designer.xml">
<DependentUpon>ThisAddIn.cs</DependentUpon>

View File

@@ -166,14 +166,14 @@
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="WordAddIn.dll" size="88576">
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="WordAddIn.dll" size="90112">
<assemblyIdentity name="WordAddIn" version="1.0.0.0" language="neutral" processorArchitecture="msil" />
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>UfaMRUXaY5UnnT7MdvsYAO8ZpOP8TEHjaBY8tbnu7lA=</dsig:DigestValue>
<dsig:DigestValue>+twUOyk3hKDGsqzQPUAqOQJEwzHYRY33n87+7HOnfig=</dsig:DigestValue>
</hash>
</dependentAssembly>
</dependency>
@@ -200,4 +200,4 @@
</vstov4:customizations>
</vstav3:application>
</vstav3:addIn>
<publisherIdentity name="CN=DESKTOP-Q6H7B6L\Administrator" issuerKeyHash="42606c52715d5764c2f9dab5bee6dcd76cc7a67d" /><Signature Id="StrongNameSignature" xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha256" /><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" /><DigestValue>6ARPRBIXfvsxGG+s7eLh9omVJw9+d6u+WZ1MWHaFv9g=</DigestValue></Reference></SignedInfo><SignatureValue>lc7c7Ko4DjaT7/xRXqxQ2fw75HYlonmqxf5ZPHDZaSM5o+VXQe8ngHzBAnPrqV9OjS/qq2y7A9thSlCOIOK0A5nRaFldm+gbsG2ZAMawVau7zHAnPx+DSgiS09QuENpimg14k9UvSAQIeaQ2IomwDHtT/AcRQDm6nKGIlCIQXmU=</SignatureValue><KeyInfo Id="StrongNameKeyInfo"><KeyValue><RSAKeyValue><Modulus>23ghUI75yy8GcLhPT5yA+v2ssRfSW+chNqMI+pq5OAr7RXQJOt/+bHdoT9NoS9GQkvblc7ekoUNShIcN601ZZOPgAxkXaQS+La14Wp8GOwnM1qHNJwgla4VAIYjmCj3CUMXLsxspOFVZKRnB6/idYku4Gzhc7NjRBAwe8qWBXaE=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue><msrel:RelData xmlns:msrel="http://schemas.microsoft.com/windows/rel/2005/reldata"><r:license xmlns:r="urn:mpeg:mpeg21:2003:01-REL-R-NS" xmlns:as="http://schemas.microsoft.com/windows/pki/2005/Authenticode"><r:grant><as:ManifestInformation Hash="d8bf8576584c9d59beab777e0f279589f6e1e2edac6f1831fb7e1712444f04e8" Description="" Url=""><as:assemblyIdentity name="WordAddIn.dll" version="1.0.0.0" publicKeyToken="06a92c46db516926" language="neutral" processorArchitecture="msil" type="win32" /></as:ManifestInformation><as:SignedBy /><as:AuthenticodePublisher><as:X509SubjectName>CN=DESKTOP-Q6H7B6L\Administrator</as:X509SubjectName></as:AuthenticodePublisher></r:grant><r:issuer><Signature Id="AuthenticodeSignature" xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha256" /><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" /><DigestValue>v/TLe11MKFnBs0fYGMUK+rtaLVC8eIbxj2MA2r2imss=</DigestValue></Reference></SignedInfo><SignatureValue>Ow7xC42PXmaP6HJGnBlAJsrYoDDPA0pe5Kcj/G9EKx98/3iQtnC+sjo16MHcnrR96ksGJm6HGft41fthoalccDcd770dKF9lc6L0KqOVur5/Jyze2Dvw/bmObKCcDPzhxtciK+8XMtNxiN4YxQA0MQMtUGhcpY2XKAWyQIYenIs=</SignatureValue><KeyInfo><KeyValue><RSAKeyValue><Modulus>23ghUI75yy8GcLhPT5yA+v2ssRfSW+chNqMI+pq5OAr7RXQJOt/+bHdoT9NoS9GQkvblc7ekoUNShIcN601ZZOPgAxkXaQS+La14Wp8GOwnM1qHNJwgla4VAIYjmCj3CUMXLsxspOFVZKRnB6/idYku4Gzhc7NjRBAwe8qWBXaE=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue><X509Data><X509Certificate>MIICDTCCAXagAwIBAgIQJpSlsxfGbpRNgyjD5Q/yDjANBgkqhkiG9w0BAQsFADBFMUMwQQYDVQQDHjoARABFAFMASwBUAE8AUAAtAFEANgBIADcAQgA2AEwAXABBAGQAbQBpAG4AaQBzAHQAcgBhAHQAbwByMB4XDTI2MDEyNDAwMzYxNVoXDTI3MDEyNDA2MzYxNVowRTFDMEEGA1UEAx46AEQARQBTAEsAVABPAFAALQBRADYASAA3AEIANgBMAFwAQQBkAG0AaQBuAGkAcwB0AHIAYQB0AG8AcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA23ghUI75yy8GcLhPT5yA+v2ssRfSW+chNqMI+pq5OAr7RXQJOt/+bHdoT9NoS9GQkvblc7ekoUNShIcN601ZZOPgAxkXaQS+La14Wp8GOwnM1qHNJwgla4VAIYjmCj3CUMXLsxspOFVZKRnB6/idYku4Gzhc7NjRBAwe8qWBXaECAwEAATANBgkqhkiG9w0BAQsFAAOBgQC3GjWMhEFFrn9PGYrQVGNAaibG1sR/eRX3ZWNRjYLhiqbsdeHvm4CX/W0EWd9yZlbaej87XyeUbX+mC3q3yMFVPCRn/W65WYyBPbWTWmSfU9VLKKULAH6WqjS7CqEU3cQSuKcU6nYG4AJu2/FkQJaA82tr3pvcQD28HmOlDeNh0Q==</X509Certificate></X509Data></KeyInfo></Signature></r:issuer></r:license></msrel:RelData></KeyInfo></Signature></asmv1:assembly>
<publisherIdentity name="CN=DESKTOP-Q6H7B6L\Administrator" issuerKeyHash="42606c52715d5764c2f9dab5bee6dcd76cc7a67d" /><Signature Id="StrongNameSignature" xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha256" /><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" /><DigestValue>Czzez1ajncrcmDUKihHHVGzi3SI5kLLF/wxZIDDFIIw=</DigestValue></Reference></SignedInfo><SignatureValue>EjrIJ43qQo2EldJbNnATamzKEKTmSgFpoHKD2FjpPE/9SRvzNoGk4zVlVKmwChE6LrmtbTM2PzBlKgR81RFAaYb3W2xQ68E26Z0oDU156KZp/lMYBnOwXJgENnrGTrxZZoJ+pcsOJX52zjl4Z2YqlxnCxwnCL/qM3ryHnKEESI8=</SignatureValue><KeyInfo Id="StrongNameKeyInfo"><KeyValue><RSAKeyValue><Modulus>23ghUI75yy8GcLhPT5yA+v2ssRfSW+chNqMI+pq5OAr7RXQJOt/+bHdoT9NoS9GQkvblc7ekoUNShIcN601ZZOPgAxkXaQS+La14Wp8GOwnM1qHNJwgla4VAIYjmCj3CUMXLsxspOFVZKRnB6/idYku4Gzhc7NjRBAwe8qWBXaE=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue><msrel:RelData xmlns:msrel="http://schemas.microsoft.com/windows/rel/2005/reldata"><r:license xmlns:r="urn:mpeg:mpeg21:2003:01-REL-R-NS" xmlns:as="http://schemas.microsoft.com/windows/pki/2005/Authenticode"><r:grant><as:ManifestInformation Hash="8c20c53020590cffc5b2903922dde26c54c7118a0a3598dcca9da356cfde3c0b" Description="" Url=""><as:assemblyIdentity name="WordAddIn.dll" version="1.0.0.0" publicKeyToken="06a92c46db516926" language="neutral" processorArchitecture="msil" type="win32" /></as:ManifestInformation><as:SignedBy /><as:AuthenticodePublisher><as:X509SubjectName>CN=DESKTOP-Q6H7B6L\Administrator</as:X509SubjectName></as:AuthenticodePublisher></r:grant><r:issuer><Signature Id="AuthenticodeSignature" xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha256" /><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" /><DigestValue>mRyxepAcY8eK1+Hg6r+OQKAut6EzEIImoGwlscXbtWk=</DigestValue></Reference></SignedInfo><SignatureValue>BNQ0LxuA6RhLv16doQ6Ql1oAZDnYDCnA6dAX0mDgMUePL1+Rfnm6xBXXeBQUYmf4vyFIevfGsUAwtS94WGLgGZxKvBxa0I2kcLFsANS0qxqHEBgOhZ5E2UkyRXtzProocDpTpO0Oh5WzWgz/aTsfxRtAUT2yNegMClzRdlHFklY=</SignatureValue><KeyInfo><KeyValue><RSAKeyValue><Modulus>23ghUI75yy8GcLhPT5yA+v2ssRfSW+chNqMI+pq5OAr7RXQJOt/+bHdoT9NoS9GQkvblc7ekoUNShIcN601ZZOPgAxkXaQS+La14Wp8GOwnM1qHNJwgla4VAIYjmCj3CUMXLsxspOFVZKRnB6/idYku4Gzhc7NjRBAwe8qWBXaE=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue><X509Data><X509Certificate>MIICDTCCAXagAwIBAgIQJpSlsxfGbpRNgyjD5Q/yDjANBgkqhkiG9w0BAQsFADBFMUMwQQYDVQQDHjoARABFAFMASwBUAE8AUAAtAFEANgBIADcAQgA2AEwAXABBAGQAbQBpAG4AaQBzAHQAcgBhAHQAbwByMB4XDTI2MDEyNDAwMzYxNVoXDTI3MDEyNDA2MzYxNVowRTFDMEEGA1UEAx46AEQARQBTAEsAVABPAFAALQBRADYASAA3AEIANgBMAFwAQQBkAG0AaQBuAGkAcwB0AHIAYQB0AG8AcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA23ghUI75yy8GcLhPT5yA+v2ssRfSW+chNqMI+pq5OAr7RXQJOt/+bHdoT9NoS9GQkvblc7ekoUNShIcN601ZZOPgAxkXaQS+La14Wp8GOwnM1qHNJwgla4VAIYjmCj3CUMXLsxspOFVZKRnB6/idYku4Gzhc7NjRBAwe8qWBXaECAwEAATANBgkqhkiG9w0BAQsFAAOBgQC3GjWMhEFFrn9PGYrQVGNAaibG1sR/eRX3ZWNRjYLhiqbsdeHvm4CX/W0EWd9yZlbaej87XyeUbX+mC3q3yMFVPCRn/W65WYyBPbWTWmSfU9VLKKULAH6WqjS7CqEU3cQSuKcU6nYG4AJu2/FkQJaA82tr3pvcQD28HmOlDeNh0Q==</X509Certificate></X509Data></KeyInfo></Signature></r:issuer></r:license></msrel:RelData></KeyInfo></Signature></asmv1:assembly>

View File

@@ -14,8 +14,8 @@
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>Cy7n1QaBs9zvjHlZNLpWQeHMimrr7CoRNpQ6mYSMmgw=</dsig:DigestValue>
<dsig:DigestValue>lGR+g0G3oRh6CYqn4BOwswtXYIPtDSPLISmW3/6m/B4=</dsig:DigestValue>
</hash>
</dependentAssembly>
</dependency>
<publisherIdentity name="CN=DESKTOP-Q6H7B6L\Administrator" issuerKeyHash="42606c52715d5764c2f9dab5bee6dcd76cc7a67d" /><Signature Id="StrongNameSignature" xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha256" /><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" /><DigestValue>ZFWmviVXbUoNNcTzjlF6CIAwgFjucuAe0uaxM3GynHY=</DigestValue></Reference></SignedInfo><SignatureValue>QsNzP/zBkv4DjAGj7OxFeO2+ULAJpFzHIQWvvZJ5we+j1FaKDwRRWfPxulWzuN8FufVJxBDfTP1u6P+AjcCXexiR4Z6FqsQIjp+srwZVS/s+5aqE+/g6sM467hj9EoaAT06G3UGd5zfS7jSrml0cixdgdxccDSKXMhrzRKLXaQk=</SignatureValue><KeyInfo Id="StrongNameKeyInfo"><KeyValue><RSAKeyValue><Modulus>23ghUI75yy8GcLhPT5yA+v2ssRfSW+chNqMI+pq5OAr7RXQJOt/+bHdoT9NoS9GQkvblc7ekoUNShIcN601ZZOPgAxkXaQS+La14Wp8GOwnM1qHNJwgla4VAIYjmCj3CUMXLsxspOFVZKRnB6/idYku4Gzhc7NjRBAwe8qWBXaE=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue><msrel:RelData xmlns:msrel="http://schemas.microsoft.com/windows/rel/2005/reldata"><r:license xmlns:r="urn:mpeg:mpeg21:2003:01-REL-R-NS" xmlns:as="http://schemas.microsoft.com/windows/pki/2005/Authenticode"><r:grant><as:ManifestInformation Hash="769cb27133b1e6d21ee072ee58803080087a518ef3c4350d4a6d5725bea65564" Description="" Url=""><as:assemblyIdentity name="WordAddIn.vsto" version="1.0.0.0" publicKeyToken="06a92c46db516926" language="neutral" processorArchitecture="msil" xmlns="urn:schemas-microsoft-com:asm.v1" /></as:ManifestInformation><as:SignedBy /><as:AuthenticodePublisher><as:X509SubjectName>CN=DESKTOP-Q6H7B6L\Administrator</as:X509SubjectName></as:AuthenticodePublisher></r:grant><r:issuer><Signature Id="AuthenticodeSignature" xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha256" /><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" /><DigestValue>IGWhRxMC2v3ue2XqINSJOZycFNAcbH/CGBZthW7V9BY=</DigestValue></Reference></SignedInfo><SignatureValue>KNH1p1S/yjcNQCG+fkNvmwbN0kZfwZcenBKArK8+E8ktY0Arv1JPWatVI/ZjnjDilPuSdYpkJr/dOWavuWaPwxyL+x5PoCIGTsq6uXlnTq/ylkqY8mesFYZk6fC7qfSH1zDo7sQljlmpd7NtPq4wzyG2HOGyxytfBw6Hg7TgJ0I=</SignatureValue><KeyInfo><KeyValue><RSAKeyValue><Modulus>23ghUI75yy8GcLhPT5yA+v2ssRfSW+chNqMI+pq5OAr7RXQJOt/+bHdoT9NoS9GQkvblc7ekoUNShIcN601ZZOPgAxkXaQS+La14Wp8GOwnM1qHNJwgla4VAIYjmCj3CUMXLsxspOFVZKRnB6/idYku4Gzhc7NjRBAwe8qWBXaE=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue><X509Data><X509Certificate>MIICDTCCAXagAwIBAgIQJpSlsxfGbpRNgyjD5Q/yDjANBgkqhkiG9w0BAQsFADBFMUMwQQYDVQQDHjoARABFAFMASwBUAE8AUAAtAFEANgBIADcAQgA2AEwAXABBAGQAbQBpAG4AaQBzAHQAcgBhAHQAbwByMB4XDTI2MDEyNDAwMzYxNVoXDTI3MDEyNDA2MzYxNVowRTFDMEEGA1UEAx46AEQARQBTAEsAVABPAFAALQBRADYASAA3AEIANgBMAFwAQQBkAG0AaQBuAGkAcwB0AHIAYQB0AG8AcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA23ghUI75yy8GcLhPT5yA+v2ssRfSW+chNqMI+pq5OAr7RXQJOt/+bHdoT9NoS9GQkvblc7ekoUNShIcN601ZZOPgAxkXaQS+La14Wp8GOwnM1qHNJwgla4VAIYjmCj3CUMXLsxspOFVZKRnB6/idYku4Gzhc7NjRBAwe8qWBXaECAwEAATANBgkqhkiG9w0BAQsFAAOBgQC3GjWMhEFFrn9PGYrQVGNAaibG1sR/eRX3ZWNRjYLhiqbsdeHvm4CX/W0EWd9yZlbaej87XyeUbX+mC3q3yMFVPCRn/W65WYyBPbWTWmSfU9VLKKULAH6WqjS7CqEU3cQSuKcU6nYG4AJu2/FkQJaA82tr3pvcQD28HmOlDeNh0Q==</X509Certificate></X509Data></KeyInfo></Signature></r:issuer></r:license></msrel:RelData></KeyInfo></Signature></asmv1:assembly>
<publisherIdentity name="CN=DESKTOP-Q6H7B6L\Administrator" issuerKeyHash="42606c52715d5764c2f9dab5bee6dcd76cc7a67d" /><Signature Id="StrongNameSignature" xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha256" /><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" /><DigestValue>iEFRnZU9D2CuwgoEUx12Fub+u5LGVopuy6gF4w0Ypmw=</DigestValue></Reference></SignedInfo><SignatureValue>bD/ev1Krz3V8Zujwd2WBrkPBzUVb4AbfI1GOxQCLHPGC4RmrUrCQmHEAKMoDIaYT6aNxokGccY+1uIanZA9RzYgLtIkHSPgO60hj/xDwQo/L7X/MgN6kyrcVpf4IivQxqMpC2guGEThoe7VlVPrcG1u2UFOsthLVcdVneHBw10s=</SignatureValue><KeyInfo Id="StrongNameKeyInfo"><KeyValue><RSAKeyValue><Modulus>23ghUI75yy8GcLhPT5yA+v2ssRfSW+chNqMI+pq5OAr7RXQJOt/+bHdoT9NoS9GQkvblc7ekoUNShIcN601ZZOPgAxkXaQS+La14Wp8GOwnM1qHNJwgla4VAIYjmCj3CUMXLsxspOFVZKRnB6/idYku4Gzhc7NjRBAwe8qWBXaE=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue><msrel:RelData xmlns:msrel="http://schemas.microsoft.com/windows/rel/2005/reldata"><r:license xmlns:r="urn:mpeg:mpeg21:2003:01-REL-R-NS" xmlns:as="http://schemas.microsoft.com/windows/pki/2005/Authenticode"><r:grant><as:ManifestInformation Hash="6ca6180de305a8cb6e8a56c692bbfee616761d53040ac2ae600f3d959d514188" Description="" Url=""><as:assemblyIdentity name="WordAddIn.vsto" version="1.0.0.0" publicKeyToken="06a92c46db516926" language="neutral" processorArchitecture="msil" xmlns="urn:schemas-microsoft-com:asm.v1" /></as:ManifestInformation><as:SignedBy /><as:AuthenticodePublisher><as:X509SubjectName>CN=DESKTOP-Q6H7B6L\Administrator</as:X509SubjectName></as:AuthenticodePublisher></r:grant><r:issuer><Signature Id="AuthenticodeSignature" xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha256" /><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" /><DigestValue>4A3DJErRH421ddNaDY5wUhU7rnuNYWOJ6Uw0CbjdQtE=</DigestValue></Reference></SignedInfo><SignatureValue>vrd8laleYqhCHvJEilCJMwBu1WXyuCICm1RySKI9KdKdcrV7F6Vuk+0H8uNDn3tyW6vKmUm4xHyjSUWHzjmpVP8SF6UpgHnCSy5MlVHsD+W2zwZpHp0RWmsa3l3xmA/R2ZIzWFH3lKc+Ris5DCWt6c95QpYrFTozHiI5tzGN11E=</SignatureValue><KeyInfo><KeyValue><RSAKeyValue><Modulus>23ghUI75yy8GcLhPT5yA+v2ssRfSW+chNqMI+pq5OAr7RXQJOt/+bHdoT9NoS9GQkvblc7ekoUNShIcN601ZZOPgAxkXaQS+La14Wp8GOwnM1qHNJwgla4VAIYjmCj3CUMXLsxspOFVZKRnB6/idYku4Gzhc7NjRBAwe8qWBXaE=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue><X509Data><X509Certificate>MIICDTCCAXagAwIBAgIQJpSlsxfGbpRNgyjD5Q/yDjANBgkqhkiG9w0BAQsFADBFMUMwQQYDVQQDHjoARABFAFMASwBUAE8AUAAtAFEANgBIADcAQgA2AEwAXABBAGQAbQBpAG4AaQBzAHQAcgBhAHQAbwByMB4XDTI2MDEyNDAwMzYxNVoXDTI3MDEyNDA2MzYxNVowRTFDMEEGA1UEAx46AEQARQBTAEsAVABPAFAALQBRADYASAA3AEIANgBMAFwAQQBkAG0AaQBuAGkAcwB0AHIAYQB0AG8AcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA23ghUI75yy8GcLhPT5yA+v2ssRfSW+chNqMI+pq5OAr7RXQJOt/+bHdoT9NoS9GQkvblc7ekoUNShIcN601ZZOPgAxkXaQS+La14Wp8GOwnM1qHNJwgla4VAIYjmCj3CUMXLsxspOFVZKRnB6/idYku4Gzhc7NjRBAwe8qWBXaECAwEAATANBgkqhkiG9w0BAQsFAAOBgQC3GjWMhEFFrn9PGYrQVGNAaibG1sR/eRX3ZWNRjYLhiqbsdeHvm4CX/W0EWd9yZlbaej87XyeUbX+mC3q3yMFVPCRn/W65WYyBPbWTWmSfU9VLKKULAH6WqjS7CqEU3cQSuKcU6nYG4AJu2/FkQJaA82tr3pvcQD28HmOlDeNh0Q==</X509Certificate></X509Data></KeyInfo></Signature></r:issuer></r:license></msrel:RelData></KeyInfo></Signature></asmv1:assembly>

View File

@@ -1 +1 @@
b1dd600e6e5ec491b0bd8e58b71d496f8d22083cd1f3a16f9892bb70b2e31a3f
0d64e77cb4bdacc7f0baf6ddf9ef2f438b5bde539b8038cdf17f2259249243fd