我们有许多.xla/.xlam Excel Addins,现在是时候迁移到更容易进行版本控制和维护的东西了.
如果可能的话,我想用C#编写,Addins需要做以下几种: -
目前所有这些都是可行的,并且很容易使用.xlam移动到VSTO或创建C#Addin的优点/缺点是什么(我注意到VS2010有一个创建Excel 2007 Addin的New Project选项).
有没有好的文件来源?
谢谢戴夫
首先,非常感谢任何阅读此问题并且可以提供帮助的人.
我正在唱VS2010并且我使用向导创建了一个Excel 2007外接程序项目,然后我在我的项目中添加了一个名为Ribbon的新文件夹,并在其中创建了一个新项目,它是一个功能区(可视设计器).
从这里开始,我在功能区中添加了一个新组,并添加了一个新按钮.我双击了新按钮,我看到了这个代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Tools.Ribbon;
using System.Xml.Linq;
namespace UploadFCStats.Ribbon
{
public partial class FCRibbon
{
private void FCRibbon_Load(object sender, RibbonUIEventArgs e)
{
}
private void button1_Click(object sender, RibbonControlEventArgs e)
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想要做的就是为一些单元格着色,或者在变量中存储一些值,然后创建与SQL服务器的连接并使用insert语句上传一些数据.
但是我似乎无法访问任何典型的Excel属性.现在我是C#和Excel Add-In的新手,但对C++,Java和Excel有很好的理解.在这种情况下,我用Google搜索没有任何帮助.
我最好的猜测是我错过了一个图书馆,但经过一些摆弄似乎并没有解决我的问题.使用此按钮,如何从工作表中获取值?我如何着色细胞?如何访问excel中的公式函数?
谢谢!
我正在使用Visual Studio 2010创建Excel加载项.我的目的是向单元格添加上下文菜单,并对选定的单元格执行某些操作.这是我现在的代码
Public Class CC
Private Sub ThisAddIn_Startup() Handles Me.Startup
AddMenu()
End Sub
Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown
DeleteMenu()
End Sub
'AddMenu add context menu to excel
Sub AddMenu()
On Error Resume Next
Dim Bar As Microsoft.Office.Core.CommandBar
Dim NewControl As Microsoft.Office.Core.CommandBarControl
Application.CommandBars("Cell").Controls("A").Delete()
Bar = Application.CommandBars("Cell")
NewControl = Bar.Controls.Add(Microsoft.Office.Core.MsoControlType.msoControlPopup, Id:=1, Temporary:=True)
With NewControl
.Caption = "A"
.BeginGroup = True
.TooltipText = "Change case of selected cells."
End With
With NewControl.Controls.Add(Microsoft.Office.Core.MsoControlType.msoControlButton)
.Caption = "A1"
.FaceId = 1144
.OnAction = "A1"
End …Run Code Online (Sandbox Code Playgroud) 我用C#语言编写了一个用于Office 2013的Excel Addin.
我知道有几种方法可以打开现有的Excel文件,但是所有这些文件都在Excel上的新实例中打开文件.
我有一个Excel的当前实例,并希望当有人点击按钮时,新文件在当前的isctance(不是新的)中打开!
例如,我使用以下代码:
Excel.Application excelApp = new Excel.Application();
excelApp.Visible = true;
string workbookPath = (@"C:\Downloads\Sample.xlsx");
Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(workbookPath,
0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "",
true, false, 0, true, false, false);
Run Code Online (Sandbox Code Playgroud)
但是此代码在excel文件的新实例中打开Sample.xlsx.
任何的想法?
提前致谢.
我正在处理 excel 插件项目 c#。
想要创建带有在 List 中传递的名称的复选框列表,如何使用该传递命名创建它?
并希望也采用该复选框选定的值。
目前我有一个按钮,LoadEmployee当我点击所有 EmployeeNames 直接从 Sql 表加载到 Excel 表中时
现在我想做的是,当我点击LoadEmployee它时,会打开一个包含所有员工姓名的弹出窗口,每个员工姓名都有一个复选框,我选择哪个复选框只填充员工姓名而不填充其他。
在@Vajura 给出的答案的帮助下,我尝试过
调用弹出窗体使用
new FilterDataForm().ShowDialog(mylist);
Run Code Online (Sandbox Code Playgroud)
在弹出表单 .cs 上
internal void ShowDialog(MyModel.ListEmployee> mylist)
{
GenerateFilterList(mylist);
}
private void GenerateFilterList(List<ListEmployee> mylist)
{
System.Windows.Forms.CheckBox box;
for (int i = 0; i < mylist.Count; i++)
{
box = new System.Windows.Forms.CheckBox();
box.Tag = mylist[i];
box.Text = mylisti].ToString();
box.AutoSize = true;
box.Location = new Point(10, i * 50); //vertical
//box.Location = new Point(i * 50, 10); …Run Code Online (Sandbox Code Playgroud) 我正在为Excel开发一个vsto插件,并且试图将颜色更改为Excel中的注释。
这是我的代码:
Excel.Range activeCell = _application.ActiveCell;
activeCell.AddComment("some text"));
activeCell.Comment.Shape.Fill.BackColor = Color.Red;
Run Code Online (Sandbox Code Playgroud)
我得到的例外是:
无法将类型“ System.Drawing.Color”隐式转换为“ Microsoft.Office.Interop.Excel.ColorFormat”
我找不到如何在两种格式之间进行转换。
我正在寻找一些技巧,以解决如何将宏分发给公司中的其他用户的问题。
我已经创建了一个特定的工作簿,其中包含许多类型的数据,例如日期,字符串和数字。每个用户都必须管理相同类型的数据,因此我们将此工作簿用作模板。数据存储在一个列中,在该列中我应用了条件格式和数据验证,以防止用户插入错误的值。该工作簿包含一些具有特定名称的工作表。该工作表的名称出现在代码中–为每个工作表进行一些特定的计算(基于工作表的名称)。
问题是,将来我可能会希望对代码进行一些更改,例如使我的宏更有效或实施一些必要的更改。
我已经在互联网上进行搜索以找到最佳的解决方案,我认为最好的方法是创建一个Excel加载项。但是我对此有一些疑问。
这真的是最好的解决方案吗?有人可以给我提示以更好的方式吗?
如果“加载项”是最好的,是否有办法仅将其添加到特定的工作簿(这是我的模板)中?
是否可以在有人打开特定工作簿时(使用Workbook_Open)安装加载项,并在工作簿关闭时(使用Workbook_BeforeClose)将其卸载。我已经在网上寻找答案,但是我不清楚这件事。如果可能,是否会影响关闭/打开工作簿的速度?
感谢您的帮助/建议!
我在互联网上搜索了很多小时,但没有找到满意的结果 - VSTO Addin 和 COM Addin (我们作为类库项目并使用 excel 对象制作)之间有什么区别?VSTO 项目是否有任何限制,例如它仅适用于特定版本的 Excel。
我正在尝试在 VSTO Excel 插件中使用 CefSharp WindowForm 控件。CefSharp.WinForms 版本是 75.1.142,我正在 Excel 2013(64 位)到 VS 2017 上制作插件。
我收到 FileNotFoundException: '无法加载文件或程序集 'CefSharp, Version=75.1.142.0, Culture=neutral, PublicKeyToken=40c4b6fc221f4138' 或其依赖项之一。该系统找不到指定的文件。' 在下面的代码执行中。
public void InitBrowser()
{
var cefSettings = new CefSettings();
cefSettings.MultiThreadedMessageLoop = true;
// I'm setting current directory to D:\\CEF\\cefsharp\\ExcelWinform\\ExcelWinformAddIn\\bin\\x64\\Debug\\ where all the CefSharp dlls and dependencies are present.
cefSettings.BrowserSubprocessPath = "D:\\CEF\\cefsharp\\ExcelWinform\\ExcelWinformAddIn\\bin\\x64\\Debug\\CefSharp.BrowserSubprocess.exe";
if (!Cef.Initialize(cefSettings, performDependencyCheck: true, browserProcessHandler: null))
{
throw new Exception("Unable to Initialize Cef");
}
browser = new ChromiumWebBrowser("http://www.google.com");
{
Dock = DockStyle.Fill;
}
BrowserSettings browserSettings …Run Code Online (Sandbox Code Playgroud) 我已经上网几个月了,但还没有真正找到我想要执行的以下任务的解决方案。这是一笔交易。
我正在用 VBA 编写一堆代码,这基本上是在工作簿中创建一个新的工作表,其中包含用于工作目的的特定类型的计算器(有很多)。一张纸 - 一种类型的计算器/分析。
我想要完成的是,由于代码量不断增加 - 我想将所有内容都放在功能区上,这样我就可以通过它访问宏。然而,这项工作是建立在具体情况分析的基础上的,所以每个新项目都需要创建一个新的 Excel 工作簿,我可以在其中选择我想要的计算器并完成工作。
除此之外,它需要在网络中所有装有 Excel 的计算机上启动,以便我能够修改/添加宏代码,以便所有 PC 都可以同时保持最新状态。
简单总结一下:
那么,有没有什么解决方案,例如 - 我创建 2 个文件(一个带有功能区配置,另一个带有计算器)并将它们放入服务器文件夹中?每个用户在安装过程中访问它们一次(基本上是找到插件所在的文件夹),如果我需要修改某些内容 - 我会使用服务器文件夹中的这两个文件进行修改,仅此而已。
如果即时更新所有用户不是真实的或相当困难(对于非程序员而言),则可以进行手动更新,但至少必须能够访问每个新工作簿中的功能区。
预先感谢您的帮助。
虽然某些 Office 功能区控件属性可以直接设置(例如标签),但大多数使用回调来设置属性。例如按钮的图像:
<button id="btnRecalculate" getImage="GetRibbonControlImage" label="Recalculate Now" onAction="OnButtonAction" size="normal" />
Run Code Online (Sandbox Code Playgroud)
文档对这些回调的语法非常清楚,但没有说明调用它们的时间和频率。
我现在面临一个问题,当以编程方式更改值时,我想修改功能区上的其中一个属性(例如按钮上的工具提示)。我为超级提示定义了一个回调,如下所示:
<button id="btnSetServerURL" getSupertip="GetSuperTip" label="Set Server URL" />
Run Code Online (Sandbox Code Playgroud)
以及隐藏的代码:
public string GetSuperTip(IRibbonControl control)
{
switch( control.Id )
{
case "btnSetServerURL":
return "Click to set the server URL. (Currently: " + API.URL + ")";
default:
return "";
}
}
Run Code Online (Sandbox Code Playgroud)
当该 URL 更改时,下次用户将鼠标悬停在该按钮上时,我希望调用 GetSuperTip 回调并显示消息以显示正确的当前 URL,但现在该值只是第一次设置,再也不会设置。
有什么办法可以得到我寻求的行为吗?这是一个 Excel 插件,据我所知,WPF 样式绑定不是一个选项。
我正在编写Excel加载项以读取文本文件,提取值并将它们写入Excel文件。我需要分割一条由一个或多个空格分隔的线,并将其以数组的形式存储,从中提取所需的值。
我正在尝试实现这样的事情:
arrStr = Split(line, "/^\s*/")
Run Code Online (Sandbox Code Playgroud)
但是编辑器在编译时抛出错误。
我该怎么办?
我有一本包含 .xlam 的工作簿,当我查看 VBA 时,我看到了 .xlaml 的结构
VBAProject(Helper.xlam)
Microsoft Excel 对象
Masterinfo(MasterInfo)
Sheet1 (Reg)
ThisWorkbook
表单
Form1
模块
Module1
类模块
cm1
如何显示工作表MasterInfo和sheet1以查看内容?