标签: office-interop

寻求Excel自定义函数工具提示

之前已经 这个问题,但每次接受的答案只是使用Application.MacroOptions(VBA6)(VBA7)提供功能描述的辞职,但这些信息实际上并不是工具提示,所以它不能解决我的问题.

目标

我们都希望能够通过任何方式(VBA,VSTO或COM加载项)定义自定义函数,并为用户提供函数及其参数的弹出/工具提示描述的好处,如对于每个内置Excel函数,无论是内联还是在公式栏中都会出现:

在此输入图像描述

在此输入图像描述

对这种需求的广泛接受的答案是,定制功能是不可能的,但我希望挑战这种信念.

问题

目前,我见过的最好的人是定义函数(通常使用上面的MacroOptions调用),这样当调出函数对话框(公式栏中的fx按钮)时,它们的函数和参数说明如下所示:

在此输入图像描述

如您所见,这是一个包含许多参数的复杂函数.如果用户不知道这个"函数参数"对话框以及如何启动它,而只是熟悉Excel的标准工具提示,他们只会看到公式名称而没有其他帮助:

在此输入图像描述

他们没有机会正确提供所需的参数.(没有阅读文档,当然,没有用户做过.)

现在,高级用户可能知道通过键入Ctrl+ Shift+ A,他们将被授予一个自动完成的函数参数列表,如下所示:

在此输入图像描述

但是,当然,我们遇到与上述相同的问题,即标准的Excel用户将只用于第一张图像的默认行为,并且可能永远不会学习该功能.

在这一点上应该清楚为什么这还不够,我们想要每个内置函数都有 - 内联工具提示告诉用户如何使用该函数.

挑逗

起初,我可能已经确信除了本机Excel应用程序功能之外,这是不可能的.加载项和VBA是可扩展性功能,此工具提示可能根本不可扩展.但是这个理论受到了Analysis Toolpak插件存在的挑战.当然,它是在微软内置的,但ANALYS32.xll是一个独立的XLL加载项,就像那些可以用VB,C,C++和C#生成的加载项一样.果然,当这个XLL加载到应用程序中时,它提供的功能具有与原生excel函数相同的工具提示:

在此输入图像描述

当然,如果此信息以某种方式编码在此XLL文件中并传递给Excel,有一种方法可以使用我们自己的加载项复制它吗?我现在正处于这样的地步,我将开始自我教授一些反编译,看看我是否可以对分析工具库中发生的任何事情进行逆向工程.

你可以如何帮助

我几乎可以肯定,我已经研究了有关这个问题的所有公开信息.如果有人知道我不知道的东西可能会对此有所帮助,请随意插入.我对逆向工程编译的dll/xll非常不熟悉,所以如果有人感觉像是弹出他们的本地副本的Analysis32.xll和弄清楚它的定制功能定义是怎么回事,我非常感激.否则,我会继续深入研究这个问题,直到我遇到所有死胡同并报告我找到的东西.

c# excel decompiling .net-4.0 office-interop

99
推荐指数
1
解决办法
2万
查看次数

在.NET中使用Microsoft.Office.Interop.Excel需要什么参考?

我有兴趣使用C#来操作/自动化Excel文件.

浏览网页后,我发现了VSTO,但似乎你不能在Visual Studio Express Edition中使用它,所以我不能使用它.

就在几分钟前,我注意到这个站点中的一个问题是在其代码中使用了这个命名空间:

的Microsoft.Office.Interop.Excel

所以我想知道是否所有我需要使用的是添加必要的参考,如果是这样添加的参考?

UPDATE

我安装了"主互操作程序集"作为建议的答案但由于某些原因它们仍然在".NET"下的"添加引用"对话框中丢失,但它们存在于GAC中.

所以我只是使用"浏览"添加引用并位于Microsoft.Office.Interop.Excel.dllGAC文件夹中.

但在本网站上寻找类似的问题有关添加GAC的参考资料,似乎不建议这样做.

.net c# office-interop visual-studio-express

96
推荐指数
4
解决办法
22万
查看次数

从Excel工作表读取日期时间值

当我试图从excel表读取datetime类型值时,它返回一个double值.例如,如果想要读取这样的值'2007-02-19 14:11:45.730',我得到一个double类型的值.另外我使用timespan转换这个double值,但是没有成功完成因为我现在只得到这个值,'2007-02-19 12:00:00 AM'
我想要与第一个完全相同的日期时间值.我的代码如下: -

TimeSpan datefromexcel = new TimeSpan(Convert.ToInt32((range.Cells[rCnt, cCnt] as Excel.Range).Value2), 0, 0, 0);

  DateTime inputdate = new DateTime(1900, 1, 1).Add(datefromexcel);

   arrrow2[cCnt - 1] = inputdate.ToString();
Run Code Online (Sandbox Code Playgroud)

请帮忙!!!谢谢.

c# excel office-interop

80
推荐指数
3
解决办法
12万
查看次数

无需办公即可从C#创建Excel文件

我正在编写一个生成excel报告的程序,目前正在使用Microsoft.Interop.Excel引用.我的开发计算机上有Excel,但最终用户可能安装了Office,也可能没安装Office.如果最终用户计算机上未安装Office,或者此互操作服务是否与实际应用程序分开,此工具是否会失败?

c# excel file-io office-interop

57
推荐指数
6
解决办法
14万
查看次数

如何消除歧义警告?

我有这个警告:

警告3方法'Microsoft.Office.Interop.Word._Application.Quit(ref object,ref object,ref object)'和非方法'Microsoft.Office.Interop.Word.ApplicationEvents4_Event.Quit'之间的歧义.使用方法组.

在我的线上

wordApplication.Quit();
Run Code Online (Sandbox Code Playgroud)

我试过替换它:

wordApplication.Quit(false); // don't save changes
Run Code Online (Sandbox Code Playgroud)

wordApplication.Quit(false, null, null); // no save, no format
Run Code Online (Sandbox Code Playgroud)

但它一直给我这个警告.这不是一个大问题,因为代码完美编译并按预期运行,但我想摆脱警告.我能做什么?

c# warnings visual-studio-2010 office-interop compiler-warnings

54
推荐指数
1
解决办法
2万
查看次数

通过asp.net访问Office Word对象模型导致"由于以下错误而失败:80070005访问被拒绝."

我开发了一个网站,允许用户上传office文档,然后使用office对象模型将文档转换为HTML文件,然后将其显示在iFrame中.

当然,我已经包含对Office.interop.word的引用,并且该站点在我的开发机器上运行良好.当我将其上传到我的生产服务器时,网站运行正常,直到我尝试上传文档.我最初得到一个类似的错误,说"COM对象没有注册".我意识到我的生产服务器上没有安装Word.所以我安装了word,现在当服务器尝试访问word对象模型时,我收到以下错误:

检索COM类工厂CLSID组件{000209FF-0000-0000-C000-000000000046}失败,原因是以下错误:80070005次访问被拒绝.(HRESULT异常:0x80070005(E_ACCESSDENIED))

我在注册表中搜索了相应的CLSID,并找到了相应的文件夹.我说完全控制IUSR_帐户,因为我最终加入完全控制"每个人"错误的持久性,并确保这些权限继承下来到该文件夹​​的其余部分.然后我添加了对IUSR_的完全控制,并最终再次将"every"添加到我的microsoft office文件夹中.

不知道授予哪些其他权限以及为了使"访问被拒绝"错误消失的地方. 我一定是在错误的地方给予他们,因为据我知道,我不能有任何比"所有人""完全控制"更宽容.

谁能摆脱任何光明?

c# vb.net asp.net office-interop

49
推荐指数
4
解决办法
7万
查看次数

我还可以在office 2013中使用Microsoft.Office.Interop程序集吗?

我不得不将一个较旧的项目(在.Net 2中)导入到Visual Studio 2013中,它使用了Microsoft Primary Interop Assemblies.

Visual Studio说我需要添加对项目的引用.现在我去做了一些阅读,显然微软只发布了2010年办公室的PIA?(我有Office 2013)

现在我想知道的是.

  1. 我可以让它与Office 2013一起使用并向后兼容吗?
  2. 如果是这样,这是一条走向未来的好途径?它会兼容吗?因为我认为你需要.Net 2(最迟)和Windows 8自带4.5而不是3(默认情况下),并且大多数新计算机都将拥有Office 2012或2013.

office-interop office-2013 visual-studio-2013

46
推荐指数
2
解决办法
7万
查看次数

如何在不使用Microsoft.Office.Interop.Excel库的情况下在C#中读取excel文件

我在C#中有一个.Net-Windows应用程序.我需要打开一个excel并处理它.如何在不使用Microsoft.Office.Interop.Excel库的情况下执行此操作?

.net c# excel office-interop

43
推荐指数
2
解决办法
16万
查看次数

如何使用C#冻结顶行并在Excel Automation中应用过滤器

我有自动化从C#创建Excel文档.我试图冻结我的工作表的顶行并应用过滤器.如果选择"视图">"冻结窗格">"冻结顶行",然后选择顶行"数据">"筛选",则与Excel 2010中的相同.我不知道如何应用过滤器,但以下是我尝试冻结顶行,它只是冻结整个工作表.有没有人能解决我的问题.数据过滤问题是我需要更多帮助的地方,所以如果有人有解决方案,请赐教.

非常感谢KBP

        workSheet.Activate();
        Excel.Range firstRow = (Excel.Range)workSheet.Rows[1];
        firstRow.Activate();
        firstRow.Select();
        firstRow.Application.ActiveWindow.FreezePanes = true;
Run Code Online (Sandbox Code Playgroud)

c# excel vba export-to-excel office-interop

42
推荐指数
3
解决办法
7万
查看次数

无法调试或运行Word AddIn,因为未安装所需的Microsoft Office版本

我需要处理现有的Word 2007 addIn项目,该项目是MSVS 2008解决方案的一部分.但是,当我尝试调试addIn时,我收到以下错误消息:"您无法调试或运行此项目,因为未安装所需的Microsoft Office应用程序版本".我安装了Office 2007.

我尝试在同一个解决方案中创建一个新的Word 2007 addIn项目,我没有问题调试它.据我所知,这两个项目之间引用的所有Office程序集都是相同的.

引用的Office程序集:

Microsoft.Office.Interop.Word(c:\ Program Files(x86)\ Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office12\Microsoft.Office.Interop.Word.dll)

Microsoft.Office.Tools.Common.v9.0(c:\ Program Files(x86)\ Reference Assemblies\Microsoft\VSTO\v9.0\Microsoft.Office.Tools.Common.v9.0.dll)

Microsoft.Office.Tools.v9.0(c:\ Program Files(x86)\ Reference Assemblies\Microsoft\VSTO\v9.0\Microsoft.Office.Tools.v9.0.dll)

Microsoft.Office.Tools.Word.v9.0(c:\ Program Files(x86)\ Reference Assemblies\Microsoft\VSTO\v9.0\Microsoft.Office.Tools.Word.v9.0.dll)

Office(c:\ Program Files(x86)\ Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office12\Office.dll)

stole c:\ Program Files(x86)\ Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office11\stdole.dll

我尝试重建,在Debug和Release配置下启动调试.什么都没有帮助.我还缺少什么可能导致调试旧项目的问题?

.net add-in ms-word ms-office office-interop

41
推荐指数
2
解决办法
2万
查看次数