Tag: office interop

将.net控件附加到没有VSTO(但Excel-DNA)的工作表

我正在尝试做一些我不太确定的事情。 我想使用一个.net第三方库,提供良好的Winform图表控件,以replaceExcel工作表中的一些(非常复杂和丑陋的)VBA生成的图表。 我正在使用Excel-DNA(这是很棒的顺便说一句),我设法做了各种各样的事情,比如以同步和asynchronous方式显示Winform窗体(感谢https://github.com/Ron-Ldn / DotNetRefEdit ) 到目前为止,当我激活一个特定的工作表时,我设法让我的非模态窗体显示出来,并且通过设置它的parent和topMost属性,它具有预期的行为。 但放置它是一个真正的痛苦(不同的屏幕尺寸),我想知道是否有办法正确做到这一点 所以这里的问题是:我可以以某种方式附加一个.Net窗体或一个自定义控件到一个工作表,甚至可以把它定位到一个特定的单元格? 它必须是非模态的,只有当我们在特定的表单上时才会显示。 我知道VSTO可以将控件添加到工作表,但我不想使用VSTO。 我也知道,我可以创build自己的ActiveX控件,并将其注册,然后将其放置在Excel中,就像我使用另一个button控件一样,但是根据我所读的内容,这似乎很危险 感谢您的所有想法或build议

Excel COM互操作,如果我编辑单元格,进程不会结束

我正在尝试通过COM互操作来处理Excel。 它工作正常,但Excel过程仍然挂在DoStuff方法完成后(虽然它在我的程序完成时消失)。 如果我删除填充单元格的代码,我没有这个问题。 using System; using System.Reflection; using System.Runtime.InteropServices; using Excel = Microsoft.Office.Interop.Excel; namespace ConsoleApplication13 { class Program { static void DoStuff() { string workbookPath = @"C:\….xlsx"; var excelApp = new Excel.Application(); excelApp.Visible = true; var workbooks = excelApp.Workbooks; var workbook = workbooks.Open(workbookPath, 0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, 0, true, […]

错误E_ACCESSDENIED在C#中Microsoft.Office.Interop.Excel()

我创build了一个重复更新相同的Excel文件的Windows服务 。 在运行Windows服务时,我收到以下错误 : 错误消息检索具有CLSID {00024500-0000-0000-C000-000000000046}的组件的COM类工厂失败,原因如下:80070005访问被拒绝。 (从HRESULTexception:0x80070005(E_ACCESSDENIED))。 下面这行代码引发了这个错误: ExcelApp = new Microsoft.Office.Interop.Excel.Application(); 有没有解决这个问题? 我遵循以下SO链接中提到的步骤,但没有帮助我克服这些错误。 我试着从其他几个问题的解决scheme,没有一个为我工作。

有没有可能使用Excel JavaScript API编程调用excel add方法?

我有一个Web应用程序,我需要使用jQuery打开一个Excel,并需要调用Excel中添加一个COM可见的方法。 Excel加载项是使用Microsoft.Office.Interop.Excel创build的; 调用方法: [ComVisible(true)] [ClassInterface(ClassInterfaceType.None)] public class AddinUtilities: IAddinUtilities { public void PassGuidToAddIn(string guid) { //MessageBox.Show(guid); List<Filters> filters = CommonDAL.GetFilters(new Guid(guid)); if (filters != null && filters.Count > 0) { Helpers helper = new Helpers(); helper.SetSlicers(filters); } } } 我需要实现相同的跨浏览器解决scheme。

通过Interop运行Excelmacros:如何将函数调用作为parameter passing?

我试图调用一个Excelmacros,作为它的第一个参数,本身调用一个函数。 我如何通过C#Excel互操作来做到这一点? 比方说,我在Excel中有这个子例程 Sub ValidateSheet(version As Integer, displayNoErrorsBox As Boolean) 我可以很容易地在Excel中调用这样的内容: Call Validation.ValidateSheet(Data.GetVersion, False) Data.GetVersion当然返回一个整数。 我如何通过互操作来调用? 传入的每个参数都是一个对象 – 我不确定是否可以将函数调用作为string传递。 这当然不起作用: m_Application.Run("Validation.ValidateSheet", "Data.GetVersion", "False"); 这可能吗? 我可以find关于这个主题的所有教程和post只是将string传递给macros。

C#Interop.Excel'#N / A'单元格值转换为-2146826246

我有一个C#应用程序,利用Interop.Excel(v15)打开一些客户数据的工作簿,parsing他们,并输出一些信息。 我遇到的问题是,某些工作簿单元格的值为#N / A; 在Excel中讲的是CVErr,指示存在某种types的错误。 在我们的客户数据的背景下,他们使用#N / A表示不适用 – 没有基本的公式问题,它只是他们使用的价值。 当我使用下面的函数来遍历工作表行时,每次遇到#N / A时,我都会得到一个-2146826246的Int值: private void traverseRows(Excel._Worksheet worksheet) { //Get the used Range Excel.Range usedRange = worksheet.UsedRange; //Last Row/Column int lastUsedRow = usedRange.Row + usedRange.Rows.Count – 1; int lastUsedColumn = usedRange.Column + usedRange.Rows.Columns.Count; foreach (Excel.Range row in usedRange.Rows) { List<String> rowData = rangeToList(row); } } List<string> […]

如何在使用Range.Copy()时强制包含Excel公式

我想我们Control.DoDragDrop()拖动工作表并将其放在另一个工作表中。 这是一个应用程序,有一堆小XLSX doclet,你可以拖/放在一个文件中。 这全部在Excel COM API AddIn(即不是VSTO)中完成。 我正在做的是在doclet中读取并将其作为附加工作表复制到目标工作簿中。 然后,我将该工作表的UsedRange复制到剪贴板。 然后调用Clipboard.GetDataObject()将对象传递给DoDragDrop()。 我检查了debugging器中的UsedRange对象,并将单元格设置为公式。 如果我注释掉DoDragDrop的调用(因为返回它已经清除了剪贴板),那么剪贴板可以做一个包含公式的粘贴。 这一切都很好, 除了公式被删除,而是计算的值。 我怎样才能把这个公式带到一起? 使用DoDragDrop(它使用复制/粘贴工作)?

ReportINI.xls消息时创build新的Excel.Workbook与Microsoft.Office.Interop.Excel在C#

我在c#中的Microsoft.Office.Interop.Excel有问题。 当我创build一个新的Excel.Workbook时: Excel.Application xlApp = new Excel.Application(); Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"D:\…\…"); 出现excel的信息: 无法findReportINI表单。 请确保ReportINI.xls位于-office程序的-xlstart子目录中。 我已经试图禁用excel消息或禁用Excel表内的macros,但我找不到解决scheme… PS。 我使用Visual Studio 2010和Office 2007.当然,我是一般的C#,Visual Studio和Microsoft环境的新手。 有人知道我该如何解决这个问题? 谢谢!

如何从C#读取XLSB文件 – Microsoft.Office.Interop.Excel.Workbook

在使用Interop打开XLSB文件时出现错误,请帮我解决问题。 我需要确定使用Interop。 错误信息 : “Excel无法打开文件”Results_Preprod.xlsb“,因为文件格式或文件扩展名无效,请确认文件没有被损坏,文件扩展名与文件格式相匹配。 代码: Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); //Issue Line : Microsoft.Office.Interop.Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(excelFilePath, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); 给我一个样品是可能的

Excel – 列宽不匹配多个加起来

我正在使用C#Excel Interop,并试图使合并单元格的高度适合其内容。 因为某些原因,合并单元格上的自动调整无法完成,所以我使用下面的方法来完成它 private void AutoFitAndMerge(Range toMerge, Range contentCell) { // Get Width of entire Merged Cell double width = 0.0; foreach (Range col in toMerge.Columns) { width += col.ColumnWidth; } // mimic merged cell with regular cell var cellWidth = contentCell.ColumnWidth; contentCell.ColumnWidth = width; contentCell.WrapText = true; // autofit the regular cell and copy […]