From 60a4a0853b2bde4e664a54c9ec266ef462300859 Mon Sep 17 00:00:00 2001 From: "earo.lau" Date: Sun, 10 Aug 2025 18:19:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=A1=B9=E7=9B=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- JQSalesSummaryPanel.Designer.cs | 216 ++++++++++++++++++++++ JQSalesSummaryPanel.cs | 57 ++++++ JQSalesSummaryPanel.resx | 120 +++++++++++++ KellyReport_D.csproj | 298 +++++++++++++++++++++++++++++++ KellyReport_D.sln | 25 +++ Properties/AssemblyInfo.cs | 38 ++++ Properties/Resources.Designer.cs | 146 +++++++++++++++ Properties/Resources.resx | 149 ++++++++++++++++ Properties/Settings.Designer.cs | 26 +++ Properties/Settings.settings | 7 + Resources/icon_32.png | Bin 0 -> 50718 bytes Ribbon1.Designer.cs | 93 ++++++++++ Ribbon1.cs | 33 ++++ Ribbon1.resx | 120 +++++++++++++ ThisAddIn.Designer.cs | 237 ++++++++++++++++++++++++ ThisAddIn.Designer.xml | 5 + ThisAddIn.cs | 36 ++++ 17 files changed, 1606 insertions(+) create mode 100644 JQSalesSummaryPanel.Designer.cs create mode 100644 JQSalesSummaryPanel.cs create mode 100644 JQSalesSummaryPanel.resx create mode 100644 KellyReport_D.csproj create mode 100644 KellyReport_D.sln create mode 100644 Properties/AssemblyInfo.cs create mode 100644 Properties/Resources.Designer.cs create mode 100644 Properties/Resources.resx create mode 100644 Properties/Settings.Designer.cs create mode 100644 Properties/Settings.settings create mode 100644 Resources/icon_32.png create mode 100644 Ribbon1.Designer.cs create mode 100644 Ribbon1.cs create mode 100644 Ribbon1.resx create mode 100644 ThisAddIn.Designer.cs create mode 100644 ThisAddIn.Designer.xml create mode 100644 ThisAddIn.cs diff --git a/JQSalesSummaryPanel.Designer.cs b/JQSalesSummaryPanel.Designer.cs new file mode 100644 index 0000000..491deca --- /dev/null +++ b/JQSalesSummaryPanel.Designer.cs @@ -0,0 +1,216 @@ +namespace KellyReport_D +{ + partial class JQSalesSummaryPanel + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); + this.step1Lab = new System.Windows.Forms.Label(); + this.step1DescLab = new System.Windows.Forms.Label(); + this.step1NoteLab = new System.Windows.Forms.Label(); + this.buttonWrapper1 = new System.Windows.Forms.Panel(); + this.initForecastBtn = new System.Windows.Forms.Button(); + this.flowLayoutPanel2 = new System.Windows.Forms.FlowLayoutPanel(); + this.step2Lab = new System.Windows.Forms.Label(); + this.step2DescLab = new System.Windows.Forms.Label(); + this.buttonWrapper2 = new System.Windows.Forms.Panel(); + this.importSalesBtn = new System.Windows.Forms.Button(); + this.flowLayoutPanel1.SuspendLayout(); + this.buttonWrapper1.SuspendLayout(); + this.flowLayoutPanel2.SuspendLayout(); + this.buttonWrapper2.SuspendLayout(); + this.SuspendLayout(); + // + // flowLayoutPanel1 + // + this.flowLayoutPanel1.AutoSize = true; + this.flowLayoutPanel1.Controls.Add(this.step1Lab); + this.flowLayoutPanel1.Controls.Add(this.step1DescLab); + this.flowLayoutPanel1.Controls.Add(this.step1NoteLab); + this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Top; + this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.flowLayoutPanel1.Name = "flowLayoutPanel1"; + this.flowLayoutPanel1.Size = new System.Drawing.Size(600, 36); + this.flowLayoutPanel1.TabIndex = 0; + // + // step1Lab + // + this.step1Lab.AutoSize = true; + this.step1Lab.Dock = System.Windows.Forms.DockStyle.Top; + this.step1Lab.Font = new System.Drawing.Font("微软雅黑", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.step1Lab.Location = new System.Drawing.Point(3, 0); + this.step1Lab.Name = "step1Lab"; + this.step1Lab.Size = new System.Drawing.Size(238, 36); + this.step1Lab.TabIndex = 0; + this.step1Lab.Text = "Resources.STEP1"; + // + // step1DescLab + // + this.step1DescLab.AutoSize = true; + this.step1DescLab.Dock = System.Windows.Forms.DockStyle.Top; + this.step1DescLab.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.step1DescLab.Location = new System.Drawing.Point(247, 0); + this.step1DescLab.Name = "step1DescLab"; + this.step1DescLab.Size = new System.Drawing.Size(244, 28); + this.step1DescLab.TabIndex = 1; + this.step1DescLab.Text = "Resources.STEP1_DESC"; + // + // step1NoteLab + // + this.step1NoteLab.AutoSize = true; + this.step1NoteLab.Dock = System.Windows.Forms.DockStyle.Fill; + this.step1NoteLab.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.step1NoteLab.ForeColor = System.Drawing.Color.Firebrick; + this.step1NoteLab.Location = new System.Drawing.Point(497, 0); + this.step1NoteLab.Name = "step1NoteLab"; + this.step1NoteLab.Size = new System.Drawing.Size(63, 36); + this.step1NoteLab.TabIndex = 3; + this.step1NoteLab.Text = "label1"; + // + // buttonWrapper1 + // + this.buttonWrapper1.AutoSize = true; + this.buttonWrapper1.Controls.Add(this.initForecastBtn); + this.buttonWrapper1.Dock = System.Windows.Forms.DockStyle.Top; + this.buttonWrapper1.Location = new System.Drawing.Point(0, 36); + this.buttonWrapper1.Margin = new System.Windows.Forms.Padding(3, 3, 3, 10); + this.buttonWrapper1.Name = "buttonWrapper1"; + this.buttonWrapper1.Size = new System.Drawing.Size(600, 56); + this.buttonWrapper1.TabIndex = 5; + // + // initForecastBtn + // + this.initForecastBtn.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.initForecastBtn.BackColor = System.Drawing.SystemColors.ControlLight; + this.initForecastBtn.Cursor = System.Windows.Forms.Cursors.Hand; + this.initForecastBtn.FlatAppearance.MouseOverBackColor = System.Drawing.SystemColors.Control; + this.initForecastBtn.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.initForecastBtn.ForeColor = System.Drawing.Color.Black; + this.initForecastBtn.Location = new System.Drawing.Point(220, 3); + this.initForecastBtn.MinimumSize = new System.Drawing.Size(0, 50); + this.initForecastBtn.Name = "initForecastBtn"; + this.initForecastBtn.Size = new System.Drawing.Size(200, 50); + this.initForecastBtn.TabIndex = 2; + this.initForecastBtn.Text = "button1"; + this.initForecastBtn.UseVisualStyleBackColor = true; + // + // flowLayoutPanel2 + // + this.flowLayoutPanel2.AutoSize = true; + this.flowLayoutPanel2.Controls.Add(this.step2Lab); + this.flowLayoutPanel2.Controls.Add(this.step2DescLab); + this.flowLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Top; + this.flowLayoutPanel2.Location = new System.Drawing.Point(0, 92); + this.flowLayoutPanel2.Name = "flowLayoutPanel2"; + this.flowLayoutPanel2.Size = new System.Drawing.Size(600, 36); + this.flowLayoutPanel2.TabIndex = 6; + // + // step2Lab + // + this.step2Lab.AutoSize = true; + this.step2Lab.Dock = System.Windows.Forms.DockStyle.Top; + this.step2Lab.Font = new System.Drawing.Font("微软雅黑", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.step2Lab.Location = new System.Drawing.Point(3, 0); + this.step2Lab.Name = "step2Lab"; + this.step2Lab.Size = new System.Drawing.Size(238, 36); + this.step2Lab.TabIndex = 1; + this.step2Lab.Text = "Resources.STEP1"; + // + // step2DescLab + // + this.step2DescLab.Dock = System.Windows.Forms.DockStyle.Top; + this.step2DescLab.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.step2DescLab.Location = new System.Drawing.Point(247, 0); + this.step2DescLab.Name = "step2DescLab"; + this.step2DescLab.Size = new System.Drawing.Size(244, 36); + this.step2DescLab.TabIndex = 2; + this.step2DescLab.Text = "Resources.STEP1_DESC"; + // + // buttonWrapper2 + // + this.buttonWrapper2.AutoSize = true; + this.buttonWrapper2.Controls.Add(this.importSalesBtn); + this.buttonWrapper2.Dock = System.Windows.Forms.DockStyle.Top; + this.buttonWrapper2.Location = new System.Drawing.Point(0, 128); + this.buttonWrapper2.Name = "buttonWrapper2"; + this.buttonWrapper2.Size = new System.Drawing.Size(600, 56); + this.buttonWrapper2.TabIndex = 7; + // + // importSalesBtn + // + this.importSalesBtn.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.importSalesBtn.BackColor = System.Drawing.SystemColors.ControlLight; + this.importSalesBtn.Cursor = System.Windows.Forms.Cursors.Hand; + this.importSalesBtn.FlatAppearance.MouseOverBackColor = System.Drawing.SystemColors.Control; + this.importSalesBtn.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.importSalesBtn.ForeColor = System.Drawing.Color.Black; + this.importSalesBtn.Location = new System.Drawing.Point(220, 3); + this.importSalesBtn.MinimumSize = new System.Drawing.Size(0, 50); + this.importSalesBtn.Name = "importSalesBtn"; + this.importSalesBtn.Size = new System.Drawing.Size(200, 50); + this.importSalesBtn.TabIndex = 2; + this.importSalesBtn.Text = "button1"; + this.importSalesBtn.UseVisualStyleBackColor = true; + // + // JQSalesSummaryPanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 18F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.Controls.Add(this.buttonWrapper2); + this.Controls.Add(this.flowLayoutPanel2); + this.Controls.Add(this.buttonWrapper1); + this.Controls.Add(this.flowLayoutPanel1); + this.Name = "JQSalesSummaryPanel"; + this.Size = new System.Drawing.Size(600, 184); + this.Resize += new System.EventHandler(this.JQSalesSummaryPanel_Resize); + this.flowLayoutPanel1.ResumeLayout(false); + this.flowLayoutPanel1.PerformLayout(); + this.buttonWrapper1.ResumeLayout(false); + this.flowLayoutPanel2.ResumeLayout(false); + this.flowLayoutPanel2.PerformLayout(); + this.buttonWrapper2.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; + private System.Windows.Forms.Label step1Lab; + private System.Windows.Forms.Label step1DescLab; + private System.Windows.Forms.Label step1NoteLab; + private System.Windows.Forms.Panel buttonWrapper1; + private System.Windows.Forms.Button initForecastBtn; + private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel2; + private System.Windows.Forms.Label step2Lab; + private System.Windows.Forms.Label step2DescLab; + private System.Windows.Forms.Panel buttonWrapper2; + private System.Windows.Forms.Button importSalesBtn; + } +} diff --git a/JQSalesSummaryPanel.cs b/JQSalesSummaryPanel.cs new file mode 100644 index 0000000..7274fc9 --- /dev/null +++ b/JQSalesSummaryPanel.cs @@ -0,0 +1,57 @@ +using KellyReport_D.Properties; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace KellyReport_D +{ + public partial class JQSalesSummaryPanel : UserControl + { + public JQSalesSummaryPanel() + { + InitializeComponent(); + } + + override + protected void OnLoad(EventArgs e) + { + base.OnLoad(e); + this.step1Lab.Text = Resources.Step1; + this.step1DescLab.Text = Resources.STEP1_DESC; + this.step1NoteLab.Text = Resources.STEP1_NOTE; + this.initForecastBtn.Text = Resources.INIT_FORECAST; + + this.step2Lab.Text = Resources.Step2; + this.step2DescLab.Text = Resources.STEP2_DESC; + this.importSalesBtn.Text = Resources.IMPORT_SALES; + } + + private void panel1_Resize(object sender, EventArgs e) + { + initForecastBtn.Left = (buttonWrapper1.ClientSize.Width - initForecastBtn.Width) / 2; + initForecastBtn.Top = (buttonWrapper1.ClientSize.Height - initForecastBtn.Height) / 2; // 可选:垂直居中 + } + + private void JQSalesSummaryPanel_Resize(object sender, EventArgs e) + { + //this.step2DescLab.Size = new Size(this.Width, 65); + int width = this.Width; + // 预留内边距 + int padding = this.step2DescLab.Padding.Vertical + 4; + // 计算文本所需高度 + Size textSize = TextRenderer.MeasureText( + this.step2DescLab.Text, + this.step2DescLab.Font, + new Size(width, int.MaxValue), + TextFormatFlags.WordBreak + ); + step2DescLab.Size = new Size(width, textSize.Height + padding); + } + } +} diff --git a/JQSalesSummaryPanel.resx b/JQSalesSummaryPanel.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/JQSalesSummaryPanel.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/KellyReport_D.csproj b/KellyReport_D.csproj new file mode 100644 index 0000000..aefbbb3 --- /dev/null +++ b/KellyReport_D.csproj @@ -0,0 +1,298 @@ + + + + + {BAA0C2D2-18E2-41B9-852F-F413020CAA33};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Debug + AnyCPU + {FEB9B0D1-503E-42D5-9D86-4F15DDCF8600} + Library + false + KellyReport_D + KellyReport_D + v4.8.1 + VSTO40;UseOfficeInterop + true + False + true + publish\ + + zh-chs + 1.0.0.1 + true + true + 7 + days + KellyReport_D + + + KellyReport_D + + 3 + + + + False + Microsoft .NET Framework 4.8.1 %28x86 和 x64%29 + true + + + False + .NET Framework 3.5 SP1 + false + + + False + Microsoft Visual Studio 2010 Tools for Office Runtime %28x86 和 x64%29 + true + + + + + Excel + + + + true + full + false + bin\Debug\ + false + $(DefineConstants);DEBUG;TRACE + 4 + + + + pdbonly + true + bin\Release\ + false + $(DefineConstants);TRACE + 4 + + + + + + + + + + + + + + + + + + + + + False + + + False + + + False + + + False + + + False + + + + + True + + + + + + + False + true + + + False + true + + + + + + + {2DF8D04C-5BFA-101B-BDE5-00AA0044DE52} + 2 + 7 + 0 + tlbimp + False + true + + + {00020813-0000-0000-C000-000000000046} + 1 + 8 + 0 + tlbimp + False + true + + + + + + + False + + + + + + UserControl + + + JQSalesSummaryPanel.cs + + + Code + + + JQSalesSummaryPanel.cs + + + PublicResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + Ribbon1.cs + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + + + Component + + + Ribbon1.cs + + + Code + + + ThisAddIn.cs + + + ThisAddIn.Designer.xml + + + + + + + + + 10.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + true + + + KellyReport_D_TemporaryKey.pfx + + + AE7A694AECE4F9D414288368667D706D52C47471 + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/KellyReport_D.sln b/KellyReport_D.sln new file mode 100644 index 0000000..8bfd8b7 --- /dev/null +++ b/KellyReport_D.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.9.34728.123 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KellyReport_D", "KellyReport_D.csproj", "{FEB9B0D1-503E-42D5-9D86-4F15DDCF8600}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FEB9B0D1-503E-42D5-9D86-4F15DDCF8600}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FEB9B0D1-503E-42D5-9D86-4F15DDCF8600}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FEB9B0D1-503E-42D5-9D86-4F15DDCF8600}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FEB9B0D1-503E-42D5-9D86-4F15DDCF8600}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {53CDA27C-F3CD-4714-884D-B3DDD4E7B47B} + EndGlobalSection +EndGlobal diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..9489fc0 --- /dev/null +++ b/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Security; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("KellyReport_D")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("HP Inc.")] +[assembly: AssemblyProduct("KellyReport_D")] +[assembly: AssemblyCopyright("Copyright © HP Inc. 2025")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +//将 ComVisible 设置为 false 将使此程序集中的类型 +//对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型, +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("2f4e225f-decb-4582-86db-d45340dc77d9")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, +// 方法是按如下所示使用“*”: : +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs new file mode 100644 index 0000000..84ae4f9 --- /dev/null +++ b/Properties/Resources.Designer.cs @@ -0,0 +1,146 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace KellyReport_D.Properties { + using System; + + + /// + /// 一个强类型的资源类,用于查找本地化的字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + public class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 返回此类使用的缓存的 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("KellyReport_D.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 重写当前线程的 CurrentUICulture 属性,对 + /// 使用此强类型资源类的所有资源查找执行重写。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// 查找类似 JQ销售年度预估表 的本地化字符串。 + /// + public static string APP_NAME { + get { + return ResourceManager.GetString("APP_NAME", resourceCulture); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + public static System.Drawing.Bitmap icon_32 { + get { + object obj = ResourceManager.GetObject("icon_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找类似 導入銷售表 的本地化字符串。 + /// + public static string IMPORT_SALES { + get { + return ResourceManager.GetString("IMPORT_SALES", resourceCulture); + } + } + + /// + /// 查找类似 制定年度預估 的本地化字符串。 + /// + public static string INIT_FORECAST { + get { + return ResourceManager.GetString("INIT_FORECAST", resourceCulture); + } + } + + /// + /// 查找类似 Step1: 的本地化字符串。 + /// + public static string Step1 { + get { + return ResourceManager.GetString("Step1", resourceCulture); + } + } + + /// + /// 查找类似 請在"銷售年度預估" 和 "產品年度預估" 工作簿中填寫年度預估值,然後點擊下方按鈕開始生成《業務月達成 》和《年度JQ產品》表。 的本地化字符串。 + /// + public static string STEP1_DESC { + get { + return ResourceManager.GetString("STEP1_DESC", resourceCulture); + } + } + + /// + /// 查找类似 * 如果年度預估已經制定並沒有更改,請跳過該步驟。 的本地化字符串。 + /// + public static string STEP1_NOTE { + get { + return ResourceManager.GetString("STEP1_NOTE", resourceCulture); + } + } + + /// + /// 查找类似 Step2: 的本地化字符串。 + /// + public static string Step2 { + get { + return ResourceManager.GetString("Step2", resourceCulture); + } + } + + /// + /// 查找类似 請導入銷售數據表, 並點擊下方 "導入銷售表" 按鈕。 + ///程序將會根據銷售表的數據生成各個業務的JQ Total表。 的本地化字符串。 + /// + public static string STEP2_DESC { + get { + return ResourceManager.GetString("STEP2_DESC", resourceCulture); + } + } + } +} diff --git a/Properties/Resources.resx b/Properties/Resources.resx new file mode 100644 index 0000000..2f425e5 --- /dev/null +++ b/Properties/Resources.resx @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + JQ销售年度预估表 + + + + ..\Resources\icon_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + 導入銷售表 + + + 制定年度預估 + + + Step1: + + + 請在"銷售年度預估" 和 "產品年度預估" 工作簿中填寫年度預估值,然後點擊下方按鈕開始生成《業務月達成 》和《年度JQ產品》表。 + + + * 如果年度預估已經制定並沒有更改,請跳過該步驟。 + + + Step2: + + + 請導入銷售數據表, 並點擊下方 "導入銷售表" 按鈕。 +程序將會根據銷售表的數據生成各個業務的JQ Total表。 + + \ No newline at end of file diff --git a/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs new file mode 100644 index 0000000..35dff37 --- /dev/null +++ b/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace KellyReport_D.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/Properties/Settings.settings b/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Resources/icon_32.png b/Resources/icon_32.png new file mode 100644 index 0000000000000000000000000000000000000000..e9e78e50db2c2bcaf642e9ce172f86c34b100a52 GIT binary patch literal 50718 zcmV)AK*Ya^P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D#j{C7K~#8N#Qk}+ zZp%?02>v4X{?0jfc!Qpv-qV1PKtck6B*1`LfQ4Mf%f?`r!1J?*48 zjLU9&xlEO@yW7idSL5#0c9#o005%qrF%&{#k`O|G2GBgd@lNNQZ)ZmT@%u$)?%_M< z-Y2R$?z-pOJIBb#$c)Iy$lP{%cIpNI4gd*2fdjC3Gvm91kN|UoyTcR@I1K!C0LcvQ z1&)NlfZ_%21~Zmy=5ROF!aU|G!yIk~6xQX%0RwD?o1wrk7%CntCjnl7WU%5uGL!@3hg z9xWCSE9RH*Od$W;5s zMFWzGcmsuHWDy>zF{nC^9ZuXu=-T-%+L<`WkvLdjF<-F1Ty#<2u|t^0#0bQ`pdcXy zX~Z>NI2fWnQl1Q5`x<0W6W;C)ORQWuD=)N}Be8yP5`Y;eZ1qC`%O{hC_Ju?_e^~LG2FwOt?g_0YGw& zQ{l*2S{1oE(W6c>SxOpQF;z)Ylum14>Oi>8n8G;*w%TrvR4CP9WTY6puJTBoMwpn~ zC_O1fqd#LrvYx;txUG}2F@QVvfuwK{(Q6BugobEKrWF<3qIR`Y6O!ni)Q*^Z9K<Y2~pxNmCmA5%utG?mY5L82)1Uc zNgcC+@1Efvv%6IG#P$`@Dw#Tgyu}WJp=bscHk`H9)P=mOYL|E- zR4*6fh3EtOi>0ZL5(jc)DALzcr~Xy#MiW|au?DvTRPj0bsqT{Cl6KM#R7oY&5<0tP zJ|Q7~ggY<{hH)6#fe}|r1DoTHYyhOvA_ha{Xw_c{(o`N2Dki4_I912w4mAVrK(U0O z6d-Z-L`sq{B&mbcGSdVQOhFs{=Ds^h0G0dbYTN5;5GBTaHRVi5KO>YxUR9Tl3 zXq_4fNE_uzQrF?^x4uQ>jq{Nn}}a! z{(w*+$w_3|N}QOXQ{s$m3FA1zJ!=+dgGZ&+Cz4MyP)sm=bO$ZvJan019TMR!|7M!a zzylDZP?n3bZpHOsv-pj~8$pDF5pyWfuN%puudOzwrE;a|^DN7lwSO7eC)fgy5zKUr z4>jp`afiydAnG3CE_!RB#X)T*1G#W*nzJ+>69HW7&q@=OWTYnFwZy5qi{c9?X_Ldw z&rUhCVtSVGr&_dJh7b`;p_~DWqjdtHsZb7ih-NHut74=pD^B}c4LI5zV@$h_sX8LWL-gALh-m(HM5soZdw`8BRaKD6 z9ifEFiM|45X*pTeM%4lXLN%L(wi0GoEKrJ9DlLaubTf0w8KJ8ppV|_2%xAT8PaY*G8(8GSt9=;$g#Qjh!FmE@mt!{MzIwRMl^85 z?6r*9!f#$6_geeVLlw?jGz;3Cxet|d0K9uvnX~-&SX_k-wAXN$K7H6$3}LJN8xU>0 zG~p7qXuf*c1joGlFVArpX4`^ZP>RE+j127($bMce<_2vc6)qu7#w9=w1}fH!CVbkB zT5px&FgR=+aWsxIWCG?iZOz+yx)3%9dvVTn4F}UJqNVGN9!e53c@5J{5zrUh>0*vW z2X8HJ4kGrcLd<5LLIoG-%AZ21Yv^foS-F=cxCHt>TovT{U54KU94fB1i!TO8cE@y{ z;Uy!D+U|0+#4$J#wj)YTT6v8rSRC0E&Outd0Or^oAK_@^cE=XfVmbqntFo3t@l_?` z@2t$w9)$dw21^VgHfqH|m9HAeDjoIIRY14Ft})Q|Pi_Xi%Hfwaq)4ZRB3Q zZ^9O-6y^Y|Y6phF5{`~{7>5BRXIWk)5Mod|WU1wLl0&L23u{R6-BAiXb9P6^i++n7 z^Pnviw1;)BbqGVbub39x9r(>d*7=_){Q8!*4MAJ>%CbZ69vUq!$azQ#Ze-aAx<_a& z!?G;Lh0BFCTo!*X@F|oPS(m>D;o=0jOgKNAFbv@SXTPR20CLU&3@JP~VtbbEZs4dM zMjRaUy%w|XIKoEoM$o-MXW&pki?ewQAS-1TGKbAlo*~>@%a%O7`Fjw0yw{iy zX~b?wC^7YNr8#=_t*^7!{USk!`HbJ@c9wb9gc)-+t98eE`g)g? zTfT3?f>?p$1`VzLxd41V7{hQxVsB*Ls3(AV;-wAiTH;K{=JTqC4Kn$~)e^b{^>HIp z*SZeZ7SHDuRu{r7wWChshe}z7$Dyiq%wgzL&YO96Wr$5Tpf7DBMHjsrcNmX%C?&%! zi~o!E^)xWed1@eyJB(>pOQ}UKI%&ppTVmue<_&7cD&bZ+0t?}FILRdtmCXyN?U)50 z>C32kg0=%&Aba(S9b_^g#?}TJf;D=@d!RiYjulpS$9JL=P0hw6G+&v zD_lU&qnAM-xz-pr`?v9VR5H&sQyul#Lbl1j4s~FrdN(2hI#sa(o0W8^&UIa@CIDSJ zwm06^2^q3k>NA6Goz`ngea%~%1vatUz-!ef8~H5QZmFwnC58gKh*hQzF06P9E=v@? zbl60)ZdP3b!)nZm zvg?UsS^H-HtrB(Y>5?SANEnZ`{&ibJJGJ^}0fuG(T4%oilyHkgJ@n;WmKF`s$hJb~ z!ZJvtO{p7BDIKlWCPTui&H%#!1iBnc3D?1v{eMOBRT7rA3Jy3_Sq~cALmE*s4~Lim zDW!yA805P*N3WIJQ0(ivtlrH=U6v`p(K0Ps&es+wO?(}*r0f9;Em`L7AnI8Sm@RF< z*SJ43XeF=exCrjH?heoGnwlmsD{@)>@*U{P5s@NIU;Jjj^dWOx4#UEdzf8KQWEovS z5!I$}FyWkNvq}FR`+j${tG7ltfRrrp-W>o~2z1VFbFBIq&sMR|9HN|B-m*~_RAgaZ z-hvDA1=y@zd^nVChE{aQR@`O)E+}~oEoCcc#@7p+?+O+cEXUl?v#x3RyaiqT3!2RG z`UbIjDYiAa0r!XtTAGcdcU6)iDo-sFcJ1&kewJ*RCt$OI?38ggq7<$*Q=0j|E(E&O zKZ~$~uM6NnZ{;7h_C+v%XE|Dg&*KQo_YSGM&KcAA&F5Yxts< zHaL;i~8k5Y)y#Y2) zI8U`bt8Oi-`+E9L*_ur@f*Kr(T+K9_h_(FncYDK>xi`wFux&J(`2;)@SmocQ@j*H) zVT(Hrvx+uSY`|p|9w?;??s;Ga2Z}yW;$1<{W7{RID_w_lpvbV>_UyKm&u8I%ig*s3 z3_}{>_1M=&k{Lvxce@p<=q;2kg1N(ZkNhSM9W3LQ?`v4&*5{e!Unhl;{OfwU?Tm(d zmujOd^z|JWXM_zYRreaZ4!I{dfY1T9iI9W%9;$xHAc7WrXs7f*NVfu7#T^Knf!9Ct z7H;aPivsn`pJh$9Nii%^Zq0`Q9@L052|yZP#d$RPQV?GtQ1OE}{W?I;gm(+fGt0Jx zV}xzRt)NSEK|Y6XY6cB9GF=!xhgGURU={fcKxHf^nP&>i%Ob+t^5TMniW@Y)7jR{& z`7S2bs_)iGTGwkUV+|Xb?h*PDaw$l6-3@AMO})zI%Yb`=x!T9dmI|U@Sj%!CA22jU z*g*?m4@~UsvHg1e(_P;`2gXJ%OL2oOBCeBQ9XP9QUBnD7rkOxxbell;4jnz}pp1%V zjMKvBctzb^!b_0ZY8Nkx?n5pn*1W~@&o=~YpkCj^0o&ahu+a(2w7oln0WgoR_CVnq zh+z?RL9z>Gm3xF)B^TBB>jYbf-%Yi5lctAd`sMp3+*P8xf{RLerg8TKpK?K;ash$^ z@$LAQdZpU4`6F);Oj@3i2JA>md@K14g?>B87?ctfV(boE_atwxWe69*bc@Y zjObuPiuc6aD8e!Cn2jVexX|F_sNa3z%RG9C8oK&6;||po;j?(X9O93=0mlJM4!|ZJ z0SEe9!K-drrV9`$FRJTejH8lyM)NpR<%<#)%e)r7Oej!r6u*(;8N-1Z?+q4(IP~eW zMZq4tQ^PN+eYHZl5Dt}eC>)o>MeG{qZQv&lbeX?8>TZ;Tt*}oCI$l|qdtu~-@C>rd z;TaWh`O3T%d-oNzf!V{BTDJkqYWThk-AH&Z(C0l=&Y|!Q93Assl>VZ)Ex0IsSLr&L zBvx$EY~Z!dGl!*-WfLyz%T*;Zq6xKGn#~I5?dywM6tA-sQM-Q|7{fqMtzcjX%qRV=hSyy##2Cm^Q zlYMHi(GeR#v+x;g1_~~UI|Pe7hl;p}J7%hEE8x;@`QHgPD7yehH<@q5Z)#gOT;3Aa z$@CqUyU5#MT}lKW8dwK%5H5^dz@=#~PVh{6ewMEGjUEm)coVksxcS^-E!Zlf!NJ&r5p%d#Z2pge%h10p{xUd}|4{fL zh|ac+yi3-Jbil<+Ro9bE}c3YN9sOJ0KGF6{^xz%twN{czwtz+L2T!lmFq z>U$jq>(tT7*o+k%jF`i{VsjWetn}F9S*NS@uEHEHh`bQju(xQIXKgtO zs7~P$>AIf^zUb5%-yyh->$*`*N3gyjf@RHwt+K6ei`sF>U368=Jeb)HU8XaAKsNdxmwsbx4G5#RRmttyB?4O7@C!iy`rXgtdgN;tmJT!O`@tOEO#% zJ%f4L%X9WAynETowN+ZsW>st7z8P$VHJB|`7D?C37}xK@5~m=31hyrONw!b^{|{Kz zy$a~?J_KI>9ESDWN8pIxo)H|H730!dXa@F(1PmEde`ED#NlUgsD?rfVX1%P*oV`@s zP;$g^>WkE527@izvP8!LfZq=VcoIFZCpHrG@P(e(9%rB=t7z4;1ubn^wRa2pvdt*x z__a5zGBNFvwxmrD{h*wez%XE`?!@!rPM}4@+iOs^t2-k5JPz#P*k`nUF<=5PZIEw^ zL|c;m5VUj$awwR(M3-hJVEMFiFbL8e44|y8M7KUklw@t)u??-z$l{$gef!Mui%&Sd z``3V9{KRccHsJQn2|f-OHLVwOBouf73O|C){j?$Ri%DMex%vdN37!E@0|p0dU>ht0 zo@7#UevG$xM$QEz44w?RaGEvoQ?UZ`1T({6&hKXeD3(MT?%_EShGBviGLJj>H75YT zfMURC4uBsDE}>@@I#MS$SOSLP$N)+zNM(Q1aL>r87&lpl7`xjoT>?r}Iu%7}Sm(rRN?0;DKSnvrZD8eZ_Eu9Y(SzI}q&XtXY!`!Sa)nS(7_T;$TS}E&x*l zTAx?~Fd5PgD4IeCgO~;|cT6@QB?odrN(ojBZlx`mI(^CAVab33By)ai)Hvv2(B;I= zi6pSn8G@jVyAz4RvWpo;143~~NMuNN~9nWB%}g(+{CN_nluat2N}-!344dMC;*Amer@-;7k-J!0eC^O z5oQyZh0K>slEXB>T{StSKr%xiH^NXfNwiNqm~o+#)c#5e4IDuJyPjcbl%x;|O@kIj z@g^oUeOMSqwIL+fU<0x~=?0kU<{XhwfRx}E;GVU1OE7ax?$}Ay$%WzSG?Lgkpok~& zDW>k!^{4$+sE!0qr31_|vh$-k0Q)M#F%(K#^Y|unH?SRWBQ0T^u-rJQT1m*FDF=Ch zrBv}6JR_%sK{Ou#+?))bICXsRcE)e}%pLyX7ae1$s$D@rs+!vd_X_4QhtuIe>{i$u z<^!{fSiUoiD#Z#SarECtk~K^KM!pmk zz#LxKjRhg0Vsaq@>}=wrvBAq+j0Lg_G++}a0CtK#M`--;wxvN|TZ)FUP?Opz-Lno* zFcusO1to==#c-hT+n)wbI+Ca?Ho?3|!s%CxpNp8bP_-V7s<%UJHc2lpz>p~Yl$T^N z;_6h72Tfo}ZJ>bSz)zY`vc5j$$*B5Qb=;8Rq>5Bg4qB?QaKMc92gwX7hhMIOd4bzd zXG@m~>L^HhMt1%dspwuiSsFkQ&iv4FN=79{>s2#K+YEzS!e9kEb39!VKJ+B}<{$ni zJAC^61M%k!bBNP7U~8lZSl}}Bu3)vsd`55qZVg%@;+rw$0l)wIZsN}5cG2Nio+t&S0>VkgJskG<2jyAq1*$?gi$KLDIlM zUT^?nBdSoL!YL0hNHVdl31TGGQ;;Mr7#~8%%;AMnjm%ft=f5pJ56+VzUNT^+N5u3* z$(J3FsbHMD=DV6s|IGFy6<904je)@ zAZd+j9_l=485PV~$N+t1*`x|JaNwJ8b*kG5hKaq4!3!ocjBpH= z@bS}(_dMbFdtb4`7eD_PnRA+Gv&3l*cg6P45JGAn0M`)Nfd1C@yTYy|aW^|YO8K3zUQx8&I zix==LyJqy1I0-ws-JFulC~8FK1Y}A7QZ%WtJojL22fScN4!9;NH#jojg@e=8zK|cL zwR%0%Ny88&F4b-?g)}VGAYft40;Pv*T}TXQ#6h7YF0eO8N?PlJ`yK_HET9PzKCpdG zsc$gZ0D>zE4Mj*Oo-jBw79(9IB%DqKj~p95^T7fC<&U1@MkYVC1;9PP<{-gE5f=jc zuFE_xhUje~s9W1Ft+pS)3_!Ai8x!zdzvg(^{RMgNNHQo4KCnLL;41DEQ*leYB$-LW zVY*l=%BW#fXUJP25e9VZ#7?(Row#->l7J~w_INR5F(jEvCfJxb5UQQlo@!`e6#z^U zJERt+IHVeuVj83ayil?yPq56k4j}WH0m*6n0%%|<=17CnZeo=1ZV52b*E~@*wFC?U z`@t!JVFjKN2GHsp3Oo!LoZo4j03Z#d9|pxc07_JMS$8$SC~*^|x+T&laS|Yx=*a*S zt{<%!GHBppIgX-rJSC~qlEXz0+-VyyI3|}V*)yOXD3GQQ{qK!?U6TUK1k4M@l#pTg zv?~P{`(NC;d*oGd}XeJrI7-+%A- z-N2A`c=7du+j|4o?5%^mfF}8nT8M>zsAQa0%mL4ob{uwOl&hEYFgOQ3gC(VuZ;~{D zNunms3kgjH=BO=5g@c6B7S&)AZD{miO%fh6LkT6hCNXtiiF8D|>uZ*giq@nuzNq@j z8p+v*RWZ}V8CF^nn}#fsK2%_;^HnoYe{&g6?ZPl%??oy)iQB7xrQ*yuNQLL)K+C#2 zhC%~lN+W*yqqp(5zw`*Nd(jnS8ONU~klKd|2s$1Pxr;UCBFnOb!+}5_u0cFa7Q7C$%1W6PL0H|7O4$~H~Q~j~RJv|LXv!0U@RkGN2Ffv5}fMQ7T zv1~CV8Cb>(XFZTgRlxoYwTWv#GHKD;ibf!=GY3m>d7TUf7)*PgoB#sXYOF#`5($P3 z_oNBOQG9?Q(*Pt&dN3R`$w(4MxwNuU($)ctU`VZ9t9nWE4_R7jx9Ue&wBsen2#&K< zxZb6PqT^&miW(scI3wmL;39K7Ae95S|PHjnm@>>4DRzO)w3PC9x_j1C!qI7vmT z;D(f_Rj_evQ%MCrvAsJ0pU8&1FZk!b{Yn)g9PDfhAG;ZP0bQyK;OigFb>>^9|yy}7Y27YfI5>~sJ!m7^ck`m=B~6x%V5gDor#0T zK;}22&~R`|pt$48U`V4OP1@6oiKd7VjK-1TiTk3?wH$>O)nS8y2F-$G2^kYrPUqS+ zwqH2%NlQ-yQYk3OX=HOcYCu~-MjobvL`m2K$S&0{apH@?V#(oU1UzFm4qQyQj5``| z=9$JAH&|9)4Pt13WeXbsNA+OB30z7HvbIrsDJVtK-2j+jZ(P?77?3=3;3mLJ+nX&; zjrYtFMwiNqHi$C}yG#-PmZu8-;cG^`>iNe~Cgzgw;Al7)(SV%Tm3ANxtChq&kmdl) zQ{QdgEJ65Ze&7b4ItL!Sva6GifwLT^TkdUT6x^H)AHJD!dom=;n6fs%^N4gbp=4TP z%|OGBW>r|im7_J;8 zy#L8l{N0}~c)@kxS;r%abD!2qrg6W}Me;ZSAHA{1^X^OdyRW|@j_$d7o6EOD4~O3k z+{GI6nShEEQv$#~J9dNNtskB6$A9z;zwP;kr?Y9}7}__Jvp@o#Jk23a8lHQd z#Z}uw6y4bs8Wl=&A}HDySpbv9U*cL*EpKz*AaAIuedUgVo2Q1a`Zu@n+DCV|RSJ#C z;2(G3XaL^)(Twl^omX)Eq<|}%R%*ivS{*GJgXt)>BW3@~pBf+PY%OCstG2jSdn4|* z|7^yOd~lD?zTa@>G3gaJ5>m<-&G6=rP57a&y&uQBzBA@!AAZLix4u2DF!4_l8y&75 zGfO~g#hhvdKl{;)Z+Y_`pM6~#lP2v{43ikiV7Qtb|KURu{`uG3htGVVX>rS5`1OG` zrV-k0r5=Dq^d+gg%DM`jsu%z~zNaOu$XL)1jUefj1Uz+Sc*Bblo_DQaKLI&A&I(nf zsZdDlK~-vBy8oV#4VauJ|6DlR@0D*Vz?6XrTzgE#u+REm4EqdBvWia5S$FEnXWfSE ziQyTzoek~-Zk*A_mg*$egKz+`SLu!kh9~!i2|Jum!o`6pv+k_0oD-&rVdviCZkRH0 zId@?1hP^u`H?}3(>&(k`1^(T$r03pUWtU2eGdDN}JbhNU8!_8{V24_vmNON@jq`$x zgwqK)7ftp~T1Yn(-a z2w*f|OjKWX2{aNVsyIo;o-uK8KbT>Zu`z+39V1ssd^YAy2JA-q*bb^AC8po$cQA&t zd|)>)E}3IU1ryjduCHRz1Q=*+nUJtk8+M^~n(!ZhH0pN%Mm-;y>eiOzH~_n3I5J>o zz)p_tLt>kE$*>d7G@iBm%&RctDUQK_AyKUy6mI~g1OOT4RNZ5PpG@GAGR$K^*Qg`P zPn?v;f$0Vi_c8Db9MymPW&AkM_!D>!u|8J0QQt1=5iaBlN1{`gEV?5eJkHqX0iy$E z1;Khq2_+|PD_OzS;+8`GO6ioPx3E@x^}v@L;aY5+JZ1;a3)a3hC0jWJiLo=-_@K~6AHPldMp z2UG_ljkmURWQBz-KzZYTl;85Vmxwo+#{i>ioofpXh7aG#I7$VR4JfijG*>|&@f;xX z1bpzR3D7#VRX8L4)+^szm8*C{>!0qYd#LS{iKJVP%?Q}TDqsooGCH~t;o=yRP6Nag z;jyR34SF~3KOT*0*#&i~*bQi*EJBu?RdIaVF5_ab`k%SOU_@gImvc0z$Qhjux!6ae zDscqP6`UTIQG&*L(4cD&!?q9X`U6m3^QFcJjasUas%?wIkaSp}QariNlgdW0qN`vt zFo0VrTj1y>&_#F!p>hbK-`O08*}%c;pzm><>r~>{QzdN@AnSOP<&aUht8=}&|& z<3Y-Hg{&LkZD6XiqxMCjivuo(pnD*gl4GB_<{~L5HNsfoQXd8@)yH+!xCIV1e${Jw zs#I0LMjN7Yo)H*(yLuC8O-AY82*6}Xd#gIT*&}cA_7OgPyW@F|qCz83v@(PW7VCGW zp^$76rNV~x0dR6O(4rh$H4a*=Da|PLqeO0RETM(0$iHml0r2`~11`vK=m!#UcQ`jS z<-Um6OEm!CZh)g;NSx&8@4P_uf;#U8SXC6VF3bQqnf4(I;?{Q6&hH`xE1Goyk>4GF zakHLBe>fc3*{auR?KDtliDF_`qe6#c|6AL-k$#5vtPKlf4+7KC`GC(ex@eN&<~%#o z!Hy3Xj@Z6Q-t4L^w<=%Yuxyg`F9DSvEi+x~nruZ=7&gKC_NaWTN5d#mW64qLlH-0| zvUGSYQLNArZ7WSglVSv`f7bN43=FaSkb_9EIIgYjr$kLB63es8U0YZkBHmN@00IYs zE7bT4`U2gOX4WIiJUwByV98?M^^j;1Q81@k6a%k>$_Ee~3)RTAx3~>NN9^3KMY_lt zIBC8CUEl@vMLN<#&;9zz6LjeYPdU_Z<3Zs9IC$HDnH&VVnWUwkuNwnqsBg4mBj}!> z(yuaEe50_w%Qb=S;ZZonb)!@`H^D7C)&kH z$H4ydm|Qgp!J9fUtMhIU*ns(1ISd^K36UP6jIONhV*7lYae8P~kW9sRbcoB$IM8a^ zBLis29;$z2z^d-92Ul?w7_-qjU|FUyU|rTa1ggGiBxKAa!%t5K!vGlX3G#uicKwtX zn7PVaO1ACV8!-N|RBQ0~vz!SW9Seo?x5E;r9yc;JmmNH40K|UuVN8~M;T_g0qCFpg z8n>)O5jD75H}jMYoi>UWxF-GDe&gVyh9j*`OMxhHS=}0R%DD+iNFeLd>W9FB!;6Sc6OM{VqX3EiN)H%CF@u4KU#<2=0r;5>u^gR%)j=7pd8% zl1)78Bz`faH}eK;PKt|pdlQzWF5bQM<2<^rFP=kY3_&0S#>0^s`7c&i}dMAEuQLaqA%A@2s3>XBZ%fw@umic$-RL4}R%5;6{{ zX9^}0iwMRGpU_KX-Q6-xN~gU>=AGlTB9a#IO$lRt2bRvltY!UBLy(7q##x&Tc z0wiRvo3o4v$&k&Fz>A}JZAAh!Q$qu|Rn`c(oJ_ea0mIEq_R1vA?gmbrlb^#9;~x5c*a}z7a`bCX>RuPm;!#^h1sEz*96|va{ZWQ_ zENs~gY2XZ;Nn%zbLr`)Q z-2wpPY|J&ZbX@wBH;@Hz)eZrxS|ZF&i97~15@3D$jksRhn8UK%22RvqpdBD7(5n_s zwn>Rh6}72}^?$%pC`7vh>*%Xl5@>B0uuRZ{Y!_5j=cA|LVHk?e)4JS;jJ!y#&4`K4 z|HgrO(ImNd1)^1gVMeB)BMXQgRQJuYIP;YK@O^G*WiE<;* zf2y@^JRb++8B0_n3jeeGR&9?$gT5Q$p&Qf{(Jk1H3nnM%xyOS|5Z4ak=t!VB(I{b( zJMTV?cGZsBZV-bukXi*9C7cFMEuYPAFsq}dOM_?*(5?;5b>KUVSi;)nNTKeM-zi~* zVh@T8vaKkrFzb|;4g)~P*8<#iXx*V(C3q2ZrGnDB8Pbq}k^$|d>xN)tka#f{&=;iL zo%>8-LGrsUOJnu2E?Ok9{(Zj6X4mk4MM091S_J(r<0=ma&rt$FSQ0du@sg&hrp=kG zFPlFN-z9V<%);lOxadiVn#~+tQVUubbW|%ijfsp+qWYvYC)*L*3@Xf`#0HGn=$nlo z82iC08G6i>VbPe)wh3PYZ9SAGRK3YAENh^?%kHU7XqpNOs(%gu9WvTmqvf(YUAB4$ z4=mN^=_z{TM(`6Tf1li zu$j$m+a`1|m+6kEcYY${yMATD zxBg_opZK9W`1S7S<0?QWFeczraJw#v^smHF?EdsW%&2qbTEWx|~FzK_V&ed$?Zdy~S0Zt{!b$!IV z_NIERu-d2}5nPeLx{WM$W{B_u?WwR4r@I4Kdh)7D0c{43y3OLTKCBAeniFb@c<4rN zk1sLl;Sf`7fYP~>sS?*0fjL}lb-r>ds3cjNTlk^s`tXe=t{~R5+$%MV4m@!O_$R-3 zir@decktE!<`%x`hwk7z-hPgEJ$45-&jCZiuRW3R1HXEPZ~N&x_|4ya8-L;lZsCbL zhMTtyR|camlMYh@kfi7Kl|f5_B*HG4Vb!?hm~_r`?$_ChnTM`w+YD-GMz7O4{IOfWxBTR7{J!tIiSK&ngp*;y3yu?B^Jv0r zA5Hj-`+?_PO?c?U@M-rAc=<182bfBY+Iu{looCh&(Zn zOn3Og=YwwE-&+ASu);Eyu;_~}Q9PzTeipM4#&likSva5i=Kva4nK&1wDh8OYU9=>_ zh-oHM9{QNhRl65>i!v-o9n2hI-KOx;!3kYCiQ z|CV@LdN!a8v7F~V2PZEBFZ=KM&-m6i`7oy2lLHVaEmXUWf;Q=mMYCjTUdr>-dn$zy zMcWGoV5sKza6fE$55Z=Pw|iW>KtL#R#$U&^49f&vNos<$42XNo=3E(^5aT{Owu;IB^5)315o&#qS2dzsp;r<5iP|EI@ z>e|q7iUE5V_A+$17i8_dl2+WSjr)#D;aN^>ni^ICD@yh-OWo6ckzrZtVjr_3;_}J( zhs0%Aq+TLlCEYBv@W0en^Qy>mgW3&67iOg>qpQ<3gbxt_h)7NjvhyyYUDWPMS*{_L zutgr{c|@;A_409^GNR|Qx3#oy zLxq;9#q{f8#ldy*-$5&KsIlQvsE&@$gc#5U(t=|Twy%%aO0?{jC*kfn^ce{cYGq?OI$# z;u%x{?)6W7jH;5pz+5MmXp_>@vx#(IhAqt3_|>%4wu;jR_*VyuAr}zu4kMs zlhni7PUv$De5x*rQOdk;DtcYO;)1EGV!$iBQ;+2Qcu zpu|XQM_hs8pyiy!RF$W;C4@^WbBTGtJiOAqP__KqZ{6dO>j@=|{93l_uHXbYsL)X3 zPV2F`V}Sf%MS3r!XWUfiprqxRzaO@m`~`0OoJ11eap`seSvMo1XIl?PvIy^?T`bVT zLrrJK_GbZYmR!_8BGq(#Zas+tk=(#_3umTA9)NvZw=|tqK;e4rbs(hz3HSn{9rFi#=!G_{No|uueBftV$vUP$we7mT+%4wb5 zh;Vl>pZA-9W4OmaLmNmY)hO9qbz}~P<)TZ5XDl#>GFzkdShVmhRiaPossY%rS}gO5 zG*M=>oRUP09P#deZkCHfGE|*X+bHR^fq;#mLoh?nRw1?ci;C0RNzeHq$;qS&~N$|GxZa-YgX z94q`{R$V4AlP4ZCLU!y%;3x`FK{EkaS34UxbVzLR{yK}&s~6_ci&?NEe8oq-K_=06 zGxV80$kLegA1Uht<(#FXc`MiqT*JX+PR%6xU#I<@H_$CX_I@0izu;x4fTSo7-x;WqsjscA#}+t5xlvaaU90TE=DC?-9@ffmpl%I7d#)C_iZW^fA)_?9 zQ2~_D>Cb8|>zg%e-C;|pd6!9J?S3eFS=C02IX|Wpd84eImhO+&1YJVwyk~ zwFrXZ0e$40?%mUp92Yl^_;s8reAq??8o1qKiQn!B2I+77U>0-r_C&)$}( zYs)5JQ**ckWYf~*%F)Na8D3(27a#AVRkKPMuYbDt`J=195z8H)@WdTQF8q8u0648U zaOYksLaIyK0(3$|+bnT%D;xwo&h?u3$e>9PyrIFp5>LgTB)Z}`=I1^)dTbW9?1F$Q zL@p?6nO9TE-NEH4wHj1H>vVlJ9Y~ysc^!ou%{7Fhv+GPR_qDAVY{_V>XWKj-nc8|G z2(^{?5NshKJPJ8%Fq3;)LMgN|2g6j_bkGl+yMjfAb#_S=bTdN0GVx-Pn}O1rfrb%t z*uVk6C`n6z?bGO*RbgF0-J{RRSAnMhkMZoQ37#G2;eaBoBOykd`c3Cw0S;DxU-Bj% z^xjF)Kj1)3b!o$Lz34osIXO@RIKlZ<^Vlz~xUMBz#CUsbP{)D5dNzts21Kx0)OgkU z*abxJvfdd8vt@q--CWYoWA>sp0+@~$fy8zgKf!JKymE(s>4eo1nRs1PeKBk`=wK!$ zUPen(0{Yoi6Oncs;5>z?ea%GU1;l7Q)YrbD1ZoxYFsy=DaT_8RtdN=_asg;v=TTIv z&B22QDcskTthdbea1jr=!ixc~dT79dJK)ASbGSa3TU%wcF2E&IEa?;xzepVC+fC%GLYl3C(R<-pJx`s!)(zFiA~5$2fAh`Nz}u6F5hJtk%WOIjFO zd;<6UDB`vqcEc&5uSCDEEatX8n)|aJKA7_z1U9_*Jjyew2)t9;evrthBAQ$9WfmV3S zcdRFjrubkC4(4@F2O;Jtb#FaR^|{5*)dj{Z=st@F7B~o}h|b1#aRO;Lo5j97t%-5# z(E@Qn7Z~fPjdUA9_XZagP}pWld{V?AS1)NhvGj1M@sW*j2k3YKxUT*H_V|KFM%=kA zNm*3|a*ctDUkjDp3ovl}5N$TBItFDfo1iaz$D|Wr9@}?O1GO7oInphSl;xt8pVdFJ zkV{}YO`B39UcbwULO5@f(-J!7n75?u!>96n*3}LzI}fSKYX&@x!EF?Ae*714D=I6& zGk;q)qb|gk&<(IPbfxr(gcCc@u@l{5cBhiS3~oH|ivq6AfCH*#S3x)tZ6IcIQWKW% zSdpW_D!gUp9$LejG?tblwK5rJ9QIS8BvUDU(NYW#Lc|UhqISgdt~zd<(>WvPn;@wu zwZlQ}G(+Hx)(yUZq87Xc7|$t3N1hTY~C%=SyXd)Eua}M;3{TxzYC{f&5(l+IN$GaN@^kJwyDi} z+A6BzBgq;6(GT7(VV`d{EIKmuW%6ep8IyRF!8RuB0XYz4c+TP|cDC67Pu!b3wn0V7 zEL7`h5YJ>IzR&Oy1I}_u9h)WV=n`S`hj^B(aWN}^Jq#tsi6DIkQ+5I`oO!$yjM~=n zp5B1ORx_Av;bFoNRogUt-DmA^2YZ}h5I!uK4h1wCro`J6WB(IDkEGKsMN1_4BhzvV z-u|zCqhkTxLREtrAUXNeH&y*oN2B$sY)3N{ z5AXAEY!NuY@;B7&`+5@pWxcH+AS#Yy_cfF9KirHWanfg z-TIa@FgVcpvK)I2D)Ae1Xt&5!eszpRB^6dF+i=hiznY|1k5eQG$#vse3}!6~EOA+% zVZ13XnNFuK=(G6c^PD)dw@_94(b$0jb;F3TGS!+)c&hsv7gD!&mBttlbJ7gzNtWILUz(d8g zyjDg9X`n%?WfQw(j48Yn`>(xvhsW<;?w%U-)=Z+iTUU#u=P z0(xjI60cQv3srZY=59^)R>ARPmoHRgP&%Pgv6sH~GD;P2)X&7pX%iwAV|a zNz9E=JA zv*J1!Ml~Z^Y9CX%1XF9`VEP-{XnXjA!i(Q(-->Pb5H^z$b4PeD!A?;l6?GH%*jCiIUfv zs>m~yy8f~hOdRplBvJx$!JT4w=Timm{=_LBxjr@>T|zNgLUxC_w%y{gf#5lkQVdDf z=4-bu?YNb_&dZ*QIj#)A+dk>|-7nwaPkinUXBjxAt*(PM#O8e8LyKvt?;bQTrHe0P zYuSDE-Sb`47)hqWnfix5FyXKN)EQp$=zyDh&SGxdJ2G=*=gERw8MwK3JbuSf24F0V z%gF(wSqM39N^^c37MxOx4#cv*v`)}KEnc`71lNOw>wdUFu4RC`VX)>PkTt_|;wUuD zXUCXESSi>eBin%c$BY-;H{w_mMb<%Y2aR4uS66=M)`UBgqsV*3orie=z)+~xXG#>R zRnjto(23SjeuPyqCbt(O{yPyq)^1fPGe<$vKJi3)>7A>^47ULz3Ld>W;Qk}o1GL^` znR+gcJscmr;kcct+oxnWhhcE&zC(V!Eg8#b^*c}36u?oi$AF^|II)83JI8&y0ar)n zHLxR?o$@gud|=UhUNvXC#eF|gHAw;iCu)E+x9DU^<}0b-ZI2cF?$18LpZJ^|PTg># zxnTwBl8`~p0aaDwP3VWx21IlxG5HfrRN>M>4%F0@;l}mLQ38JO{S*G?Po3e59!!s{hHO80K}m+)z^MeL zqk@_qxp&9OWY)jcKmiQk^W?huL6aJ{Iapt*v=AG6p=6K*4k^JoA=Z!u+=U>gon^;) z=67b2>tZfqsG1T|Dj3amfz=4Fw+V^INuM}#U9?NJO*iOiZC2HL59Vh$_plfe?}JR?7HX*med!kdkv~aN3~m_U zFblI&W;jGKkMAcE!hH*F7|Baow`hRL;6nx?iKFch{i%9`XBwrdnRAeExot>Dl5Udt z3Zq0#NQnj@-Y0IPj~7_sYH<()#u_Ad`sRC(zP`f7FXQtJSQDBRflF?Ne{?FwlM7JJ|^Nw?C- zYoTqFQp+@GJ#4IV0QOigelJVFMXM2@vKsGXZY_m|k(;cB%lBE<5^un3BXkFx* zZKZ9(-H_#U&Pz2D+y}t*;Uh?`G}6SV9arWm^zlI|k~E++3`=wD@HOQxCPjx?MlSsJ zq#K#RU7sW<1=%w)7l`z-aWM;=__-sOu%_#NS9wwu9T6ftpWsrQk^gf3?+zI zopgk?36}43R4pDAY*0f@GZRMw8yWPM^)8C?67ow-i$>(QX^*2sv%c1!*#{c`2HqA9 zS!iKYZ^%lVDP5{F)z0n%t;T`wZg3}aXE$UgQ@H8UCow?*c-w+LL+sX6N~&#|Z5lP; znHU6PxhE7DN--4O6$Aj5rIJFp=w4OVIygHgFG?4CU}An7Fv2ie!e9wIOV}Cr6nBI6M+dH#j=;7IDcZvI;F0z|j}tIrm~F!I zo+6104PJg~5P&6&y5)}h$z0bDM*19SAN53go5$e6YdEDB*UnNctGcTJ7}8P$<=Cj& zCpbnF9KmoLd$@_^r$l$oBO|?z24Ec32WFg_LJ0u?Bi}ik8Vkbpj}xX?a|VsmIVo;K zCwlAPn!g?b^HTK(LJZ12D5Tl~Hj;K>&Vi`DoH9G^hd+?JVR@oAr3`$v9QIpm@VSY!f z!7{i*ubG=nLE;x^&6X(9VF_jvGDes=t|s7tqXF)FU>K!JGp~VGM>oSK&NJ@p6UM0`Zz025qRK}0kcX7kPT3u!q)dz#PIV;uR17Ie6Olszk27&?JUKAN2Vq@? zC`lkI1QuVUnZ&^jh zWcZQyP58?{eTFZ8j^XLOA?budGH%AB7u0EoGD;MuiiV^PhE5|4x@QQyt!;km}BC4Hw_L$!OeZb zCvO{`ePu$WOE#kj(0zq@%5j*!`HoRcw%x^dz2E6&PGyKr+ypG*? z4q(T{9>jnExrw7m4eki5qgF)5xyClN&6U@rKIy~-!oflF?-FMi*UEKKD-{j^zV*k? z@GDOP&%Z|B+F*8OcZ|b;w|@K_-~V;ja1vOGZREe;t7Ngg^gd6Fz*~@yHSVq0NlqTvxrg z(;e|`j}^S(B_qE1)yLQu$FAd>OGd~HypiCpAuy+*O+oW2xmcb-jgE(wKKQCaynFW_ zz$8gPBS1p&Qt$k6qYW&X;nrk0cfiYl^NF)zmfDte4lidJG%_%GLM}$9_CiPXsmO>_ z3|UUsG~m!MLPzl=CvQ_e!}*jjm4uv=oYfPuBu>$dcV6h|kR7<=2DgNpx$xvjIj1v% zv2J%m#(>Et?DvLSdk0rqG+t!Q;MpiWvK#i3VV@Hm3ArRpIU$2M=3 zCRwRz7|Kq@EMeS{A*8sBF*cyMAsaP=a3m)~8*4e zjbWT$_HyXw97TtdqPDVOEewhd@gi+c5PNf*a5$*1PxNAsC>UN>VPKIX1NiSok}DYpgT?Zgf0P+OJG0$st+> z8#zMr-DuEBy!a}drD-&f&@p=7>;_=0zjRvPja(0>fkvZb+%Kd-gO_TVjKYuuy&16c zf~@t(=!PQO3HL1vMoGdjWN6t%+~j;d$apb~bO5(#mz?RxPbe2{9)kw+@O6?t-rFK0`thS7Wti%}eTH_DhpmmtuC z)pnskvtymfv=JYlL~xq>2N4X;#+ZyJ6{Nj+4C*CpG|M_7glZh&^`+DJEPAS<(X@z4 zcJ8+W0CwYuBhYYCAd`NW`3o7G$EtL$s`XQC3n111Fhl))YoHs^mq? z;^3i&_dlKS(r2IGYd>q0C(^uqUjL}877h34bGb(%_$Vd;=%ka=V~aHPwoOvYX2H>( zc%;HJV?$G2naNy~oS1$)kx>q$0h4GhkN&x71UJ{Ren6jl;GU*R%l6n5%mWwp$WQsLi2Q`~%o)fRbmU zTip=~M$h=@<9i$*W%$5#Yw<*92PAmr2@0eE$0Jp)T!h_1a>fg564rfK*MKE2%$|*t zoiH3bYHbDL+D=hEAPs^TJd zP@T{x#y$2K)!8a$0g|{~$lRdC=YBFp$dP_F>)g~L4G=Rg+d(e}a_4Z+bSEKEm2n=i3 z2aQ~V6kU$W%<3CgIvFVeQ`bn^CfDtFBmvK{0=%5N(~6?39J^A;`0svlLMaoTbCPg6 zW$gvGbsYv8jvNKY3HZdFf@?>HKk)K!geOAteuc!T@g}co3czFQKeh9dHKG9O908(1`$^wpE&WO#vu4!YWo3d+@n7H@)db%~L381#iKB8f(-1fLo*MVdK6DEF!S6lC zANseac*n;lJTW;=#H54KD#5i~!I-$={>T->JDza-zVCe+|NNJrX@Z_6YjQ5ce{D9? zHWDyVNUZsUNg~$1=)svcf=%S(X&y@SVy(PLYoJf?fTTT0j%>B0qI{%%;9vMy#=n2> z9xr>=5kLAf>;U;ghl2;bHR&*NCp$iLBjY<>f3@{iNNJV51h%q!*Tmi1CTNIj0^c47>*MvyD88)9H~ycbe*Q1-0{+1FJdI(< zc>N0!UjD#<>tp5#7vT`j?3N5U6^!!QdFlNLpYxn!{GGQvh5zn9o}z%puU4;WUl6su z&KqW6WNqK7J?jAuus;{nq-&Z+Fq^`*gz3MnjSKr|p?^RI5H%g}f^T{A89wjPBb@Cs ziVuKiz`%pvaT9^o@4J-nD^F$opFjT^o_md!;jrzhB@5V&i%F;;xSR$!R!kgAqNU$b z+nY`%bzXE?%4nbQ#;nG99J=LcAJ#qh(88H1p|fsU3*Ur8g+?=aSe9k_GbDpq?j{>~ z_(wwLwI4ahJS-`-Y;^Zti@Ffh(3-H#?903^q86Zv+2Z7<-C+2>ciqO{dD9KN^5GFL zyat?>g0tfEtE3LDY%%#53<;Bvo(d0*zvczU_}M2N|JnDS0Vb_N`A~matCx6k?@uvu z^zZYqI;B~5$cz+vk~?68kAnm1hiHXqI|OpM^D?3gVA&y=3`jiiiNE^hJY$+7}axg9^~RDF-0|I!$8OB^t4k&YC7?JCNlP2=09% zIdZigNp^KK?faoeV;L7O7o)n2Wu}B!{2p3Z9{`^fxwKxiU_k2;J-7pdBnSU%0EXV0 z*uhQZXrx&-G>E{?jYJ1vCGO{|Ph!F+W3-ZSCQRUsBu|_b{Pmy7_@Wn`V3!QHa)Q^- zpL5M@lKe=qmuWmNt$MNn?v9fk@X7}VyyJ1;-H-3NH@EDB*{nS8qqa+k+8)NY@IG`s zeF|dT81xlSnwAl9(Q=Hu@EIP=F(OkCfohM*>A?r!!%t;=?|aYiiiZs6nM2#7U(GZ) zNsFBUXP)q$8x#J?>#rg0!tGG4>1_adzbDYGeWZp?<7fhnBJsA{FIFU?+)dm;s1G(Ewb>ZHiP`0}TSnf(Mu}itUS; zX(~%JWFB9vU;^-sKX`^0K5&HNGLdoOGy=f&Rgyu=(H$A$gkx$q z4}1Y%f2grgNUpjHZY5shB`As{>=5jO*5z3n-vO*oq?%#~QDhuppr%hsOqD zcvL{U`!M9#-=v}-V-KJI=o?S*iibz;3l<$dhur_1>uR@A7nNna=kbC+_&L{c-!b=l z+nm(3G3XpomjKfR-3qUlDGcGD)$ zMeC2(@cGK36d)nt7eC?n)h9DP<2ol04m;hj7j20NNe8%V?{h&nliUdfxATbSKbY~@ z9mhv*@xtqhQ$Nr)2VLuQgM^U6dr&7IfZ9v*prDWI)CM&2V1RQsaFW*z&p}AS6-PqB zcf9Qkw@bnEc7{BSD7wfy$wA%FJ`Ot;;IVT<@{B+ID%xFAd>t)jC?RC^|5i)a@1&)% z92@8}9BT$KX_0lA*u)2isnt;zA}q^Z6LtCC`e%d64b}z6+(@QzEPH<=#|*l}daRR9 zr-F9<%upRMf^+UO(El<{7nm9M4^)yxAsY=0KW?U3IGC$qcJQJjYr4LTt^E~$rwTi{ z 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 literal 0 HcmV?d00001 diff --git a/Ribbon1.Designer.cs b/Ribbon1.Designer.cs new file mode 100644 index 0000000..db6afa5 --- /dev/null +++ b/Ribbon1.Designer.cs @@ -0,0 +1,93 @@ +namespace KellyReport_D +{ + partial class Ribbon1 : Microsoft.Office.Tools.Ribbon.RibbonBase + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + public Ribbon1() + : base(Globals.Factory.GetRibbonFactory()) + { + InitializeComponent(); + } + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.tab1 = this.Factory.CreateRibbonTab(); + this.groupName = this.Factory.CreateRibbonGroup(); + this.button1 = this.Factory.CreateRibbonButton(); + this.tab1.SuspendLayout(); + this.groupName.SuspendLayout(); + this.SuspendLayout(); + // + // tab1 + // + this.tab1.ControlId.ControlIdType = Microsoft.Office.Tools.Ribbon.RibbonControlIdType.Office; + this.tab1.Groups.Add(this.groupName); + this.tab1.Label = "TabAddIns"; + this.tab1.Name = "tab1"; + // + // groupName + // + this.groupName.Items.Add(this.button1); + this.groupName.Name = "groupName"; + // + // button1 + // + this.button1.ControlSize = Microsoft.Office.Core.RibbonControlSize.RibbonControlSizeLarge; + this.button1.Image = global::KellyReport_D.Properties.Resources.icon_32; + this.button1.Label = ""; + this.button1.Name = "button1"; + this.button1.ShowImage = true; + this.button1.Click += new Microsoft.Office.Tools.Ribbon.RibbonControlEventHandler(this.button1_Click); + // + // Ribbon1 + // + this.Name = "Ribbon1"; + this.RibbonType = "Microsoft.Excel.Workbook"; + this.Tabs.Add(this.tab1); + this.Load += new Microsoft.Office.Tools.Ribbon.RibbonUIEventHandler(this.Ribbon1_Load); + this.tab1.ResumeLayout(false); + this.tab1.PerformLayout(); + this.groupName.ResumeLayout(false); + this.groupName.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + internal Microsoft.Office.Tools.Ribbon.RibbonTab tab1; + internal Microsoft.Office.Tools.Ribbon.RibbonGroup groupName; + internal Microsoft.Office.Tools.Ribbon.RibbonButton button1; + } + + partial class ThisRibbonCollection + { + internal Ribbon1 Ribbon1 + { + get { return this.GetRibbon(); } + } + } +} diff --git a/Ribbon1.cs b/Ribbon1.cs new file mode 100644 index 0000000..ba7c104 --- /dev/null +++ b/Ribbon1.cs @@ -0,0 +1,33 @@ +using KellyReport_D.Properties; +using Microsoft.Office.Tools; +using Microsoft.Office.Tools.Ribbon; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace KellyReport_D +{ + public partial class Ribbon1 + { + private CustomTaskPane jqSalesSummaryPanel; + + private void Ribbon1_Load(object sender, RibbonUIEventArgs e) + { + this.button1.Label = Resources.APP_NAME; + + } + + private void button1_Click(object sender, RibbonControlEventArgs e) + { + if (jqSalesSummaryPanel == null) + { + var panel = new JQSalesSummaryPanel(); + jqSalesSummaryPanel = Globals.ThisAddIn.CustomTaskPanes.Add(panel, Resources.APP_NAME); + jqSalesSummaryPanel.Width = 600; + } + + jqSalesSummaryPanel.Visible = true; + } + } +} diff --git a/Ribbon1.resx b/Ribbon1.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/Ribbon1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ThisAddIn.Designer.cs b/ThisAddIn.Designer.cs new file mode 100644 index 0000000..ae3436f --- /dev/null +++ b/ThisAddIn.Designer.cs @@ -0,0 +1,237 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +#pragma warning disable 414 +namespace KellyReport_D { + + + /// + [Microsoft.VisualStudio.Tools.Applications.Runtime.StartupObjectAttribute(0)] + [global::System.Security.Permissions.PermissionSetAttribute(global::System.Security.Permissions.SecurityAction.Demand, Name="FullTrust")] + public sealed partial class ThisAddIn : Microsoft.Office.Tools.AddInBase { + + internal Microsoft.Office.Tools.CustomTaskPaneCollection CustomTaskPanes; + + internal Microsoft.Office.Tools.SmartTagCollection VstoSmartTags; + + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")] + private global::System.Object missing = global::System.Type.Missing; + + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")] + internal Microsoft.Office.Interop.Excel.Application Application; + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] + public ThisAddIn(global::Microsoft.Office.Tools.Excel.ApplicationFactory factory, global::System.IServiceProvider serviceProvider) : + base(factory, serviceProvider, "AddIn", "ThisAddIn") { + Globals.Factory = factory; + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] + protected override void Initialize() { + base.Initialize(); + this.Application = this.GetHostItem(typeof(Microsoft.Office.Interop.Excel.Application), "Application"); + Globals.ThisAddIn = this; + global::System.Windows.Forms.Application.EnableVisualStyles(); + this.InitializeCachedData(); + this.InitializeControls(); + this.InitializeComponents(); + this.InitializeData(); + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] + protected override void FinishInitialization() { + this.InternalStartup(); + this.OnStartup(); + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] + protected override void InitializeDataBindings() { + this.BeginInitialization(); + this.BindToData(); + this.EndInitialization(); + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] + private void InitializeCachedData() { + if ((this.DataHost == null)) { + return; + } + if (this.DataHost.IsCacheInitialized) { + this.DataHost.FillCachedData(this); + } + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] + private void InitializeData() { + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] + private void BindToData() { + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + private void StartCaching(string MemberName) { + this.DataHost.StartCaching(this, MemberName); + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + private void StopCaching(string MemberName) { + this.DataHost.StopCaching(this, MemberName); + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + private bool IsCached(string MemberName) { + return this.DataHost.IsCached(this, MemberName); + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] + private void BeginInitialization() { + this.BeginInit(); + this.CustomTaskPanes.BeginInit(); + this.VstoSmartTags.BeginInit(); + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] + private void EndInitialization() { + this.VstoSmartTags.EndInit(); + this.CustomTaskPanes.EndInit(); + this.EndInit(); + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] + private void InitializeControls() { + this.CustomTaskPanes = Globals.Factory.CreateCustomTaskPaneCollection(null, null, "CustomTaskPanes", "CustomTaskPanes", this); + this.VstoSmartTags = Globals.Factory.CreateSmartTagCollection(null, null, "VstoSmartTags", "VstoSmartTags", this); + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] + private void InitializeComponents() { + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + private bool NeedsFill(string MemberName) { + return this.DataHost.NeedsFill(this, MemberName); + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] + protected override void OnShutdown() { + this.VstoSmartTags.Dispose(); + this.CustomTaskPanes.Dispose(); + base.OnShutdown(); + } + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")] + internal sealed partial class Globals { + + /// + private Globals() { + } + + private static ThisAddIn _ThisAddIn; + + private static global::Microsoft.Office.Tools.Excel.ApplicationFactory _factory; + + private static ThisRibbonCollection _ThisRibbonCollection; + + internal static ThisAddIn ThisAddIn { + get { + return _ThisAddIn; + } + set { + if ((_ThisAddIn == null)) { + _ThisAddIn = value; + } + else { + throw new System.NotSupportedException(); + } + } + } + + internal static global::Microsoft.Office.Tools.Excel.ApplicationFactory Factory { + get { + return _factory; + } + set { + if ((_factory == null)) { + _factory = value; + } + else { + throw new System.NotSupportedException(); + } + } + } + + internal static ThisRibbonCollection Ribbons { + get { + if ((_ThisRibbonCollection == null)) { + _ThisRibbonCollection = new ThisRibbonCollection(_factory.GetRibbonFactory()); + } + return _ThisRibbonCollection; + } + } + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")] + internal sealed partial class ThisRibbonCollection : Microsoft.Office.Tools.Ribbon.RibbonCollectionBase { + + /// + internal ThisRibbonCollection(global::Microsoft.Office.Tools.Ribbon.RibbonFactory factory) : + base(factory) { + } + } +} diff --git a/ThisAddIn.Designer.xml b/ThisAddIn.Designer.xml new file mode 100644 index 0000000..7410750 --- /dev/null +++ b/ThisAddIn.Designer.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ThisAddIn.cs b/ThisAddIn.cs new file mode 100644 index 0000000..2749800 --- /dev/null +++ b/ThisAddIn.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Linq; +using Excel = Microsoft.Office.Interop.Excel; +using Office = Microsoft.Office.Core; +using Microsoft.Office.Tools.Excel; +using Microsoft.Office.Tools.Ribbon; + +namespace KellyReport_D +{ + public partial class ThisAddIn + { + private void ThisAddIn_Startup(object sender, System.EventArgs e) + { + } + + private void ThisAddIn_Shutdown(object sender, System.EventArgs e) + { + } + #region VSTO 生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InternalStartup() + { + this.Startup += new System.EventHandler(ThisAddIn_Startup); + this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown); + } + + #endregion + } +}