从Excel公式中解析和提取细胞参考?
我希望从Excel公式中解析和提取细胞参考.假设我有以下公式P5: =SUM(P1:P4)+Q3 我正在寻找用于产生答案的公式所涉及的单元的位置的输出其他形式的表示也可以接受). 我的问题是,是否有这样的解析器可以实现这一目标,如果没有,我应该采用哪种技术.也许我列出的公式非常简单,我理想情况下,我希望涵盖所有潜在的公式,甚至是那些在其他床单和工作簿中都有参考的公式.我希望并且真的希望有一个基于VSTO C#的解决方案,但是我在VSTO库中找到一个甚至相关功能的时间非常困难. 解决方案 对于简单公式: Sub PrettyPoorParser() Dim r As Range, rr As Range With Range("D4") Set r = .DirectPrecedents msg = r.Count For Each rr In r msg = msg &
16 2024-04-26
编程技术问答社区
异常HRESULT:0x800A03EC当插入一个Excel公式时
这是我得到的例外: system.runtime.interopservices.comexception(0x800A03EC):例外 从Hresult:0x800A03EC 在system.runtimetype.forwardcalltoinvokemember(字符串成员名称, bindingflags标志,对象目标,int32 [] awrappertypes,Messagedata& MSGDATA) 在Microsoft.office.interop.excel.range.set_formula(对象) 值) 我的代码看起来像这样: Range rng = activeWorksheet.get_Range("A1"); rng.Formula = "=SUM(A4*C4;A5*C5;A6*C6;A7*C7)/SUM(A4:A7)"; 每当我运行此代码时,我都会得到前面提到的异常.但是,当我运行此代码时: Range rng = act
10 2024-04-26
编程技术问答社区
在向Microsoft.VisualBasic添加引用后无法获得InputBox
我在这里做了什么 http://www.pcreview.co.英国/论坛/线程1899493.php 但是在Intellisense中,我只获取Microsoft.visualbasic.vbcodeprovider ??? 步骤1:添加refernce microsoft.visualbasic 步骤2: private void button1_Click(object sender, EventArgs e) { string result = Microsoft.VisualBasic.Interaction.InputBox("kkk","text", "", 10, 20); MessageBox.Show(result); } 解决方案 步骤1:检查您是否真的添加了引用; - ) Microsoft.VisualBasic.VBCodeProvider位于System.dll中,每个项目都引用.在我看来,您似乎根本没有引用Micro
14 2024-04-26
编程技术问答社区
注册COM互操作性
我在C#中创建以下类库: [InterfaceType(ComInterfaceType.InterfaceIsDual)] //[Guid()] public interface _None1 { int retval { get; } } [ClassInterface(ClassInterfaceType.None)] //[Guid()] [ProgId("Lotr.Test")] public class None : _None1 { public int retval { get { return 1; } } } 然后,我使用" com Interop"和"使组装com-com-com-visible"选项对其进行编译. 当我尝试使用机器上的Excel 2007 VBA访问它时,工作正常.但是,如果我将.dll和.t
16 2024-04-26
编程技术问答社区
C#:复制受保护的工作表到另一个excel文件
我试图将一个受保护的工作表复制到另一个excel文件,但我会遇到错误,例如 "无效索引. c#代码: try { string startPath = System.IO.Path.GetDirectoryName( System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName); string filePath = System.IO.Path.Combine(startPath, strPath); wBook = xCel.Workbooks.Open(filePath); wSheet = (Excel.Worksheet)wBook.Worksheets.get_Item(1); wSheet.Copy(Type.Missing, Type.Missing); wSheet = (Excel.Worksheet)xlApp.Wo
6 2024-04-26
编程技术问答社区
从Excel vba中调用c# .net库方法并传递工作簿对象
情况.. 对于我的项目,我需要对某些Excel文档的内容执行一些复杂的操作.因此,我认为在C#中而不是在VBA宏中编程逻辑会更方便.由于我不仅需要一个文档中需要这种逻辑,而且我需要在不同文档中的不同片段,所以我想从vba宏中调用c#方法. so .. 我是这个答案,它确实解决了问题.但是,似乎我需要将ThisWorkbook对象从VBA传递到.NET方法中,因此Excel.exe在关闭应用程序后仍在后台活跃(Task Manager>详细信息).下次我打开Excel时,它立即崩溃,然后将其正确关闭. 这是我唯一的问题,我非常沮丧,无法解决.有什么想法吗? 我考虑的.. 工作(不完美)解决方案是制作文档级别VSTO加载项.但是,我对需要进行小型更改并重新编译每个不同文档的整个项目并不感到非常兴奋.如果我可以集中C#逻辑并从不同的文档中需要它,那就更好了. 使应用程序级别VSTO加载项也不需要,因为我为公司工作的所有用户都需要安装VSTO加载项,然后才能
12 2024-04-26
编程技术问答社区
Vba类型-语句转换为C#
这可能很容易完成,但是我在VBA中有以下语句: Type testType integerArray(5 To 100) As Double End Type 如何在C#? 中完成相同的操作 @edit 14:16 08-07-2015 我认为这与提到的问题不同.这是一个问题,如何将内部数组的类型语句转换.提到的问题仅是关于其启动索引的数组. 解决方案 实际上C#不基于任何其他启动索引,然后零支持那种数组. 但是您可以做. double[] myArray = new double[96]; 替代性您可以创建带有索引的字典作为键和实际值: var myDict = new Dictionary();
8 2024-04-26
编程技术问答社区
从VBA调用REST API - "与服务器的连接异常终止"
我正在尝试从Excel VBA恢复API. 我已经在C#中有一个工作版本: //Request Auth Token var client = new RestClient("https://api.xxx.com/exp/oauth2/v1/access_token_cors"); var request = new RestRequest(Method.POST); request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); request.AddParameter("application/x-www-form-urlencoded", "response_type=token&grant_type=client_credentials&client_id=1234&client_secret=1234&scope=", ParameterType.RequestBody); IRestRes
10 2024-04-25
编程技术问答社区
在Windows服务器上注册一个用C#编写的Dll--(安装C#类库)
我为我正在从事的VBA项目编写了一个保存和打开的对话框 - Heres链接 vba:默认情况下,让Excel filedialogopen指向"我的计算机" (感谢您的帮助@Mehow). 现在,此添加(实际上称为类库)可以与我在计算机上开发的VBA项目可以正常工作.但是现在,要在服务器上使用此add(类库),我无法成功获得添加注册,以便VBA项目可以看到它. 我在Windows 8机器上写了对话框添加到C#中,并使用VS 2013 Express for Desktop,我们现在正在尝试在Windows Server 2008机器上对其进行测试,其中VBA项目将在一天结束时运行. 我尝试使用服务器上的Regsvr32命令,并在VS 2013中寻找部署选项,但似乎都没有工作!我还尝试搜索解决方案,但到目前为止没有运气. 如果有人有任何想法可以做到这一点,将不胜感激.抱歉,如果我不使用正确的术语. . .添加ins等,但我希望你明白我的意思. 非常感谢
8 2024-04-25
编程技术问答社区
在C#或VBA中以编程方式将Jpeg图片插入Visio绘图中
有什么方法可以使用C#或VBA将JPEG图像插入Visio? 插入后,是否有一种方法可以将其格式化为属性,例如宽度,高度,位置放在图纸上? 解决方案 当图像导入Visio时,它们被包裹成标准形状(带有Vistype ForeignObject的类型属性). 从那里您只是在与ShapeSheet中的单元格进行交谈. (有关shapesheet http:http:http:http:http:http:http:http:http:http:http:http:http://visualsignals.typepad.co.uk/vislog/2007/10/just-for-starte.html ) 因此,您可以从Visio上使用宏观记录器来进行此类操作.将图像拖到页面上将产生类似的输出: Sub Macro1() 'Enable diagram services Dim DiagramServices As Integer Diag
8 2024-04-25
编程技术问答社区
使用C#自动编辑word文档
我有一个带有自己的模板的finalreport.docx,我实际上是手动编辑的:标题,一些段落和某些表的内容是从其他MATLAB文档中获取的,例如File1.m,file2. M,等 最后,我需要更新FinalReport索引. 我想自动执行此操作,也许使用C#或VBA.有什么建议吗? 解决方案 您可以使用Microsoft.office.interop.word namespace编辑Word文档. Google可以找到有关该主题的教程(这是一个).它重新安装了MS Word,如果您首先在同一台计算机上完成手动步骤,我认为这不是问题.它使用com接口来控制单词. 对于此类简单事物而言,它比打开的XML SDK更容易,但是开放的XML SDK可以更好地用于高级操作(例如,在服务器上创建报告). SDK不需要您安装MS Word. vba也可以用来做到这一点,这对初学者来说会更好,因为您可以使用宏观记录器使您开始启动,然后手动编辑它生成的vba,以添加您无法与您无法使用
6 2024-04-25
编程技术问答社区
如何从VSTO应用程序插件中调用Excel VBA函数
使用自动化加载项,com Interop等,看到了许多从VBA调用VSTO函数的示例. 我有一个Excel应用程序VSTO ADDIN,仅设计仅与一个Excel Workbook一起使用.本Excel工作簿是自2003年Office以来的旧工作簿,并包含许多VBA代码. 我该如何称呼这些VBA函数并从VSTO称为subs? 解决方案 您可以使用Application.Run方法调用它.例如 ThisApplication.Run("MyVbaMacroName", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
14 2024-04-25
编程技术问答社区
通过代码从excel启动vba编辑器
在 vsto-excel 项目中,我在特定模块中有一个宏. 代码在C#中,我想启动VBA编辑器,显示给定的宏. 我知道Interop概念,但我坚持启动VBA编辑器并显示特定的宏. 解决方案 您可以使用Application.Goto "MarcoName"在您指定的子/宏上打开VBE. 其他解决方案 键盘快捷键ALT + F11在打开的Excel表上,默认情况下打开VBA编辑器. 使用Excel Interop打开Excel并使Excel窗口可见.然后,您可以从应用程序将键盘快捷键传递到Excel窗口. 如果您在Winform应用程序上使用了此功能,则可以使用 sendkeys 方法将键盘快捷键传递到Excel窗口. 否则使用 sendmessage 方法通过键盘快捷键.这里是sendmessage用法上的so帖子, c#将键盘命令发送到另一个窗口/过程.
12 2024-04-25
编程技术问答社区
使用Open XML从模板xlsm文件复制vba代码到另一个xlsm文件
我使用此代码将模板XLSM文件的VBAPART添加到另一个代码中. 当我打开VB部分时,将为每张纸以及" ThisWorkBook"添加重复条目. 下面是"开发人员"选项卡中的屏幕截图 及以下是我使用的代码: using (SpreadsheetDocument myDoc = SpreadsheetDocument.Open(convertDocumentFile, true)) { VbaProjectPart extendedPart = FindPart(myDoc); if (extendedPart != null) myDoc.DeletePart(extendedPart); if (vbaPart != null) myDoc.WorkbookPart.AddPart(vbaPart); } private static VbaProjectPart FindPart(
12 2024-04-25
编程技术问答社区
通过PIA实现Excel的自动化使VBA变的很麻烦
我绝对不知道如何开始诊断这一点,只是想知道是否有人有任何建议.我正在通过调用C#应用程序的一些宏来生成Excel电子表格,并在生成过程中以某种方式断开.我有一个vba类,其中包含所有记录/错误处理逻辑,我使用单身式式登录器实例化,此处显示: Private mcAppFramework As csys_ApplicationFramework Public Function AppFramework() As csys_ApplicationFramework If mcAppFramework Is Nothing Then Set mcAppFramework = New csys_ApplicationFramework Call mcAppFramework.bInitialise End If Set AppFramework = mcAppFramework End Function 上面的代码在生成电子表格之前正常工作,但是之后失败
12 2024-04-25
编程技术问答社区
用VB来区分来自C#互操作或Excel程序的xlsx事件
我有一个我想要触发的事件,当用户关闭一个.xlsx文件时.我还有一个C#程序,可以定期检查同一文件中的内容.我遇到的问题是,当我的C#程序(使用InterOp)关闭.xlsx文件时,它会触发我的VB代码.有没有一种方法可以隔离访问Excel文件,以便我知道它已在Excel程序中进行了编辑? 我只想在用户在Excel中编辑文件时触发我的VB代码. 谢谢 解决方案 我决定简单地让我的C#程序在开始时创建一个临时文件,然后在最后删除它.如果VB看到临时文件,则表示C#必须在编辑Excel文件,否则我们可以假设它是用户. 其他解决方案 希望您得到一个更好的答案,但我相信如果您没有更好的情况,这个答案会提供解决方案. 在底部是一个宏,它返回活动过程的数组.通常,当我从宏中调用了长期运行的程序时,我通常会使用它,并且我想知道它何时完成.我通过每隔几秒钟调用例程来确定这一点,直到程序从数组中消失. 该例程上方是Workbook_beforeclose事件宏.这会
16 2024-04-25
编程技术问答社区
用c#关闭一个由vba宏打开的模式
我正在创建一个C#程序,该程序在Excel表中执行VBA宏. vba宏完成执行后,它显示了一个模态窗口,该窗口不允许继续执行我的程序. 有什么办法可以关闭模​​态窗口?还是可能? 我尝试过: appExcel.DisplayAlerts = false; appExcel.EnableEvents = false; 但它不起作用. 注意:我无法访问VBA宏代码. 最好的问候! 解决方案 这是从我的答案中修改的"轻量级"解决方案在这里 与纯VBA的类似问题.它使用两个Win32 API函数:FindWindow和SendMessage. [DllImport("user32.dll")] static extern int FindWindow(string lpClassName, string lpWindowName); [DllImport("user32.dll")] static extern int SendMessage
10 2024-04-25
编程技术问答社区
在Excel表格中使用外部c#控制台程序运行VBA宏
我试图调用一个在Excel文件中的宏. 以下是我得到的代码,但是在下方运行时,会引发异常,并带有下面的消息. 代码: // Define your Excel Objects Excel.Application xlApp = new Excel.Application(); Excel.Workbook xlWorkBook = null; try { //Start Excel and open the workbook. xlWorkBook = xlApp.Workbooks.Open(@"C:\MyFolder\Junk\macro\xxxxxReport.xlsm"); //Run the macros by supplying the necessary arguments xlApp.Run("LookupHLink"); //xlWorkBook.Save(); //Clean-up: Close the
20 2024-04-24
编程技术问答社区
将C#变量绑定到Excel单元格中
我正在使用C#中的COM Interop将数据显示到Excel电子表格中.假设我在C#中具有"学生详细信息"的数据结构,并且在Excel中适当显示. 现在,当编辑Excel中的相应单元格时,是否可以更改C#中特定变量的值? 例如,一旦在Excel表中更改了Student X的标记,就必须更改与C#标记相对应的变量. 如果需要,也可以使用VBA代码!我不知道这样的事情是否可能,但是如果我在这里找到答案会很棒. 解决方案 这是如何使用事件处理程序进行操作的一个示例: Excel.DocEvents_ChangeEventHandler eventChange_CellData; int someStudentsScore = 99; private void Load_Workbook() { Excel.Application xlApp = new Excel.Application(); Excel.Workbook xlBook =
10 2024-04-24
编程技术问答社区