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 0000000..e9e78e5 Binary files /dev/null and b/Resources/icon_32.png differ 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 + } +}