Tag: 互操作

打开Excel应用程序客户端

我正在尝试使用COM互操作程序集将一些数据导出到ASP.NET Web应用程序的Excel工作簿。 由于服务器和客户端是同一台机器,所以在开发中可以正常工作。 但是,部署时,情况并非如此。 部署的版本不会引发exception,但也不会在本地机器上打开Excel(因为ASP.NET在服务器端执行,这是非常明显的)。 如何在客户机上创buildExcel应用程序?

即使VBA由Excel实例打开,也附加到现有的Excel实例

这是关于这个问题的select答案: 如何遍历Excel的实例c# 此代码非常适合于获取Excel的所有实例,除非这些实例中的一个已打开VBA编辑器。 当它试图findEXCEL7的类时代码会中断。 这是工作簿子窗口的类。 在debugging时,我确定在枚举子窗口时,EXCEL7子窗口不能被定位。 像VbaWindow类而不是显示。 我甚至试图得到这个窗口句柄的Excel.Window这个VBA窗口类,但它失败了。 我怎么能仍然得到的方法AccessibleObjectFromWindow引用Excel.Window,然后我可以用来引用应用程序。 这里是我修改的方法(我已经有Excel进程ID …所有其他声明被省略为了可读性): internal static Excel.Application GetExcelInstance(int procID) { EnumChildCallback cb; Process p = Process.GetProcessById(procID); if (p != null) { if ((int)p.MainWindowHandle > 0) { int childWindow = 0; cb = new EnumChildCallback(EnumChildProc); EnumChildWindows((int)p.MainWindowHandle, cb, ref childWindow); if (childWindow > 0) { const uint OBJID_NATIVEOM = 0xFFFFFFF0; […]

在interop.exel公式中使用r,c表示法

我想创build一个公式使用互操作来在列33中使用行和列而不是AG1:AG33来求和值。 这可以做到吗?

Excel范围应用新的NumberFormat

我有一个Microsoft.Office.Interop.Excel.Range我填写数据并设置一个新的NumberFormat,如下所示: wkbActive = (Excel.Workbook)Globals.ThisAddIn.Application.ActiveWorkbook; wksActive = (Excel.Worksheet)wkbActive.ActiveSheet; Excel.Range rngExample = wksActive.get_Range("A1"); rngExample.Value = "08.06.2015"; rngExample.NumberFormat = "ddd, d. M"; example.NumberFormat = "ddd, d. M"; 问题是新的NumberFormat不适用,直到我点击进入单元格。 有一个“更新”的方法或范围?

在列表中打印列表以优化,0.5-6列表后随机停止打印。 Comexpection 0x800AC472

首先,我已经有一些代码填充了一些string列表,然后将所有列表放在一个大列表中。 现在,当我想在Excel表单中打印这些列表时,它在第一个列表的一半之后停止,或者在打印五个半列表之后停止,并且它说:从HRESULTexception:0x800AC472。 excel文档中已经有30个选项卡,所以这不是问题。 随意重命名这个标题,我不知道如何调用这个问题。 这是我如何在Excel中打印我的列表: for (int i = 0; i < ListofLists.Count; i++) { for (int j = 1; j <= ListofLists[i].Count; j++) { excelDataHandler.excel_setValue("A" + j, ListofLists[i][j-1], "", (i+1)); //A = cell, data of list, color of cell, sheetnumber } } excel_setValue方法: public void excel_setValue(string cellname, string value, string color, int workSheet) { […]

如何确定Excel UDF来自哪个DLL?

有什么办法可以从Excel会话中确定一个UDF来自哪个DLL? 我有一堆默认加载的DLL,我想确定每个UDF在哪里定义。 如果UDF没有在DLL中定义,而是通过VBA定义的,有没有一种方法可以确定定义了哪个XLA或XLS? 非常感谢您花些时间阅读本文。 安东尼

Office 2003互操作问题,界面,方法没有find

这个问题让我发疯。 其实我有很多问题 第一: 为什么在Excel互操作中有一个_Worksheet和一个Worksheet接口。 除了方法的一些属性之外,它们看起来都一样。 这很混乱! 其次,我今天的工作是通过设置Option Strict On和Option Explicit On来使VB.NET文件更加严格 虽然它适用于大多数文件,但我遇到了一个问题。 这是一个小的代码块: Private _pivotTable As Excel.PivotTable With _pivotTable pvf = .AddDataField(pvc) End With PivotTable.AddDataField在MSDN页面上定义: http : //msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.pivottable.adddatafield(office.11​​).aspx 当我检查我的本地Interop的DLL W /reflection器方法是不存在的。 当我运行应用程序,并通过它,该方法正常工作。 当我尝试进入方法,我得到一个LateBoundexception。 WTF? 所以问题是:为什么接口定义不止一次(有时两次?)。 第二个问题。 AddDataField的麻烦

Interop:无法调用get_Range,也不能使用Range()返回的二维对象数组。

试图通过逐行引用来replace单元格(RowIndex,ColumnIndex).Value()调用的性能,我永远无法引用结果。 从Excel Interop开始- 效率和性能 ,其中包含使用get_range ,即提示 //get values object[,] objectArray = shtName.get_Range("A1:Z100").Value2; iFace = Convert.ToInt32(objectArray[1,1]); //set values object[,] objectArray = new object[3,1] {{"A"}{"B"}{"C"}}; rngName.Value2 = objectArray; 我想我不能使用get_Range因为这个方法对我来说是不可调用的,VB在运行时(不是可见的成员)说。 现在我想出了这样的东西: Dim Values As Object(,) Values = Sheet.Range(Sheet.Cells(RowIndex, 1), Sheet.Cells(2, 17)).Value2 For Index As Integer = 0 To 16 MsgBox(Values(0, Index)) Next 但是,引用具有两个维度索引的Values始终会返回“索引超出数组范围”exception。 使用debugging器检查数组显示一个很好的二维数组,它应该在第二维上有17个元素,所以Value (0,0)应该是一个有效的引用 – 但它不是: debugging器让我检查价值,我也可以深入Value(0,0)并看到正确的价值,但重新评估只是该元素,即检查“ […]

使用C#格式化Excel文件

Bellowfunction用于合成excel文件,但运行该function后应用程序Excel不是从Try …(不能杀死应用程序)closures请帮助我 private void FormateExcelFile() { try { int nI = 0;//For Loop string nFieldName = string.Empty; nUserName= WindowsIdentity.GetCurrent().Name; //Get Windows Login User string reportFilenPath = Application.StartupPath + "\\OutPutFiles\\" + "NewTempFile.xls"; string connString = "provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + reportFilenPath + "';Extended Properties=Excel 8.0;"; DataTable parts = new DataTable(); using (OleDbConnection conn = new OleDbConnection(connString)) { string […]

如何将数组从C#(VSTO)项目传递给VBAmacros

我有我的VSTO解决scheme的性能问题,我相信其原因主要是CellColor的方式逐个设置。 这取决于logging集中的数据,因此每次都是不同的。 (我不能从另一行/列使用copyFormats) 它类似于填充一个范围的值,只为那个有几个方法。 我想在C#中首先创build内存中的所有东西(一个XlColorIndex [,]数组),我通过一个类似于下面的VBA方法: Sub fillInterior(ByRef rg As Range, a As Variant) //a is a double array that represents the colors for the spreadsheet Dim r As Long, c As Long Dim tmpRg As Range r = 1 c = 1 For Each Row In a For Each colorIdx In Row Set tmpRg […]