Tag: 互操作

如何从Excel公式的参数在c#中build立一个string列表

我的问题听起来很奇怪,但这就是我所处的情景。 我需要parsing一个Excel公式(从Office.Interop.Excel获取它)并从公式中获取参数(参数的#可以变化)有多种情况需要考虑。 例如: 1. myformula("param1", "param2") 2. myformula("param1", A2) 3. myformula("param1", , "param3") 4. myformula(A1, , "param3") 5. myformula("param1, has commas in it", "param2") 有没有更好的方法来parsing这一点,而不是有多个分支(特别是考虑当string数组混合,即一些参数有引号和其他参数是参考参数)? 使用string split(',')似乎没有太大的帮助,因为我可以在参数本身有逗号。 我也试过了 string[] paramArray = new string[]{(parameters)} where parameters = "\"param1\", \"param2\""; 但似乎也没有工作(如果我有一个空的参数,这将不会工作,但这是另一种情况)。 我的结果应该是某种数组(或列表或任何其他集合),将包含所有的参数,如果一个参数没有引号,那么我需要评估它。 任何帮助,将不胜感激。

如何在C#应用程序中获取Excel控件的值

我知道如何访问C#中的Excel单元格值。 但是如何获得一个控制的价值呢? (checkbox,单选button等等) 我search了一下,发现没有任何关系,有没有办法做到这一点? 我正在使用EPPlus,但该库不支持控件:/ 提前致谢!

如何将自定义文档属性添加到从SL4的Excel

我想从OOB Silverlight应用程序中将自定义属性添加到Excel文档中。 当我尝试添加值时,我得到以下exception: 无法将该调用的参数转换为添加。 dynamic属性= document.CustomDocumentProperties; properties.Add( “A”,真实的,如图4所示, “B”); //无法将调用的参数转换为Add。 我不知道这是错误的观点,因为在例外情况下我看不到有关exception的更多细节。 我认为这个问题是从MsoDocProperties。 这个属性我没有在SL API for Office中find,因为这个我用了4的值。 有人可以帮我,还是给我一个提示? 添加方法说明: http : //msdn.microsoft.com/en-us/library/microsoft.office.core.documentproperties.add.aspx

Excel C#Interop

我有一个程序,在Excel中使用dynamic创build的报告,并打印出来的PDF。 我遇到了一些运行了4-5小时的报告。 Excel内存使用开始超过系统限制,我不能确定一种方式清除一些内存而不杀死应用程序进程。 有没有人有任何煽动? 我不能杀死并重新启动Excel进程,因为我的对象,在C#中的Excel对象,需要坚持一些信息。 谢谢。

C#COMexception:0x80010108(RPC_E_DISCONNECTED))

出于某种原因,我已经开始在我的代码中得到下面的例外,它已经超过6个月完美的工作。 根本没有任何代码改变,但是这里是主要的例外: System.Runtime.InteropServices.COMException (0x80010108): The object invoked has disconnected from its clients. (Exception from HRESULT: 0x80010108 (RPC_E_DISCONNECTED)) at Microsoft.Office.Interop.Excel.WorkbookClass.Save() at ditCreditEMGTestAutomationDifferenceEngine.Comparers.ExcelComparer.performProcessClean() in 和它似乎是参考的代码: private void performProcessClean() { xlWorkBook1.Save(); xlWorkBook2.Save(); xlWorkBook1 = null; xlWorkBook2 = null; xlApp.Quit(); } 我已经尝试了两个单独的机器上,他们一直工作正常,但看到同样的错误的DLL。 有任何想法吗?

我怎样才能跳过一个范围内的空白列?

我正在使用C#和Interop.Excel.Range返回一个工作表使用的列的范围,并将使用的列和行写入到datagrid视图。 一些列正在返回空白/ null。 Microsoft.Office.Interop.Excel.Range excelRange = wWorksheet.UsedRange; TabPage wTabPage = new TabPage(wWorksheet.Name.ToString()); DataGridView wDGV = new DataGridView(); wDGV.Dock = DockStyle.Fill; wTabPage.Controls.Add(wDGV); Sheets_TabControl.TabPages.Add(wTabPage); DataTable dt = new DataTable(); DataRow wNewRow = null; for (int i = 0; i < excelRange.Columns.Count; i++) { dt.Columns.Add(new DataColumn(i.ToString(), typeof(string))); } string wValue = string.Empty; Microsoft.Office.Interop.Excel.Range wRange = null; for (int […]

从另一个线程访问Excel对象模型

我正在写一个VB.NET库,这将有助于生成Excel报告。 我是.NET / VS2010新手,很抱歉,如果我想做错的事情。 我需要的一个function是启动一个线程来执行一些工作(从Access数据源刷新工作簿)的例程,而主线程检查是否有任何对话框因为刷新失败而在Excel窗口中popup。 我遇到的问题是新线程无法引用Excel.Application对象。 它不会产生错误,只会冻结。 这里是我的情况的演示: Imports System.Threading Imports System.Diagnostics Imports System.Runtime.InteropServices Imports Microsoft.Office.Interop Public Class xlTest Public xlApp As Excel.Application Sub DoBackgroundStuff() MsgBox ("DoBackgroundStuff() says: " & xlApp.Version) End Sub Sub New() xlApp = New Excel.Application MsgBox ("New() says: " & xlApp.Version) Dim t As New System.Threading.Thread(AddressOf DoBackgroundStuff) t.Start() Do While t.IsAlive […]

配合互操作事件增加Excel VBAmacros执行时间

我有一个接线事件的事件会导致一个vbamacros在执行时间加倍,即使事件没有被触发。 从C#interop我调用一个Excel工作簿中的macros来计算保险单的专业评级信息。 这本工作手册还要求另外一本工作手册来计算一些标准评分数字。 我还打开工作簿上的事件,以便如果用户打开一个单独的(不相关的)电子表格,它将在单独的应用程序实例中打开。 这一切工作正常。 用户在VDI环境中运行。 他们抱怨,因为这个过程需要30秒,他们希望更快。 在物理机器上,通常只需要3-10秒,具体取决于策略。 在testing中,我注意到,如果我没有连接工作簿公开事件,那么这个过程快两倍(或更多)。 一旦我添加了事件macros,需要两倍的时间才能完成。 即使事件中的代码没有被触发,也会发生这种情况。 我已经添加了断点和日志来检查这一点。 事件没有被input(除非我打开另一个电子表格当然)。 我们也有一个Excel的自定义VSTO加载项。 我卸载了这个,但它没有任何区别。 我已经testing过将互操作工作簿开放代码移入加载项,并设法获得快速的执行时间,但高级开发人员宁愿我不把代码放在那里。 所以我的问题是,为什么configuration互操作工作簿打开事件会导致执行时间的增加,并且有没有一种方法可以防止将代码移入加载项? 我正在使用Excel 2010。 相关代码如下: var args = new object[] {"RateProcess", "StandardRating.xls"}; _spreadsheet = new Application(); Workbooks workbooks = _spreadsheet.Workbooks; _commonWorkbook = workbooks.Open("StandardRating.xls", 0, false, 5, "", "", true, XLPlatform.xlWindows, "\t", true, false, 0, false, false, XLCorruptLoad.xlNormalLoad); _specialisedWorkbook = workbook.Open("SpecialisedRating.xls", […]

Excel使用密码保护工作簿,但允许只读

在C#中使用互操作类我能够保护一个工作簿读取和写入密码。 但是我希望用户能够以只读方式打开工作表。 这可能没有使用Workbook.SaveAs方法? 使用密码保护工作簿(图片1)我正在使用Workbook.Password属性。

实时插入到Excel单元格中

我想插入文件行到Excel表,但它不关心格式,如果我从剪贴板手动粘贴它的作品。 input.txt中 aaaaaaa 1234567 12345678 bbbbbbb 1234567 12345678 ccccccc 1234567 12345678 ddddddd 1234567 12345678 string[] exp = File.ReadAllLines("input.log"); for (int i = 0; i < exp.Length; i++) { //tbDebug.Text += "\r\n" + exp[i]; xlWorkSheet.Cells[i, 1] = exp[i]; } 我如何插入单元格保持格式 ABC aaaaaa 1234567 12345678