Tag: netoffice

用ExcelDNA或NetOffice插入Excel行/列

我正在使用ExcelDNA来设置和获取单元格值。 我可以获取和设置单元格值 var ref = ExcelReference(2, 2); var val = ref.GetValue(); ref.SetValue(42); 有没有办法通过向右或向下移动条目插入整个行或列? 我想要的行为与用户右键单击列时的行为相同,并且所有条目都向右移动。 如有必要,解决scheme可以使用NetOffice。

在Windows上通过SharpDevelopdebuggingC#Excel插件

我拉我的头发,试图从我通过NetOffice 1.7.3创build的SharpDevelop 5.1debuggingExcel Addin。 这些是我迄今为止所做的步骤: 安装SharpDevelop 5.1 安装NetOffice 1.7.3 冉Developer Toolbox.exe并点击“创build新项目”,并点击下列: – 项目types Automation Addin 使用NetOffice工具:已checked 项目文件夹: <some dir> 环境 语言: C# 环境: VS 2010 (Express) .NET运行时: 4.0 (Client Profile) Office应用程序: 点击: Excel 汇编信息 名称: <my name> 说明: <my description> 加载行为 用户可用于: Current User 决定何时加载: 3 = Load at startup 用户界面。 检查所有4个选项 创build项目 在SharpDevelop中打开项目,selectproject – […]

Excel用户定义的函数locking调用电子表格

我正在使用NetOffice编辑Excel电子表格。 如果我从Excel用户定义的函数调用代码,它不会让我编辑调用电子表格。 Excel.Application excelApplication = Excel.Application.GetActiveInstance(); Excel.Worksheet workSheet = (Excel.Worksheet) excelApplication.ActiveSheet; Excel.Range cell = workSheet.Cells[2, 2]; object value = cell.Value; //works cell.Value = 3; //Throws Exception 有没有一个解决方法,将使我能做到这一点? 例外是 “System.Runtime.InteropServices.COMException(0x80004005):查看内部exception的详细信息—> System.Reflection.TargetInvocationException:调用的目标引发了exception—> System.Runtime。 InteropServices.COMException:exception从HRESULT:0x800A03EC —结束内部exception堆栈跟踪—在System.RuntimeType.InvokeDispMethod(String name,BindingFlags invokeAttr,Object target,Object [] args,Boolean [] byrefModifiers,Int32 culture, (String name,BindingFlags bindingFlags,Binder binder,Object target,Object [] providedArgs,ParameterModifier [] modifiers,CultureInfo culture,String [] namedParams)在System.Type.InvokeMember(String,String [] namedParameters) […]

在使用NetOffice互操作时,无法将Excel对象作为参数从VBA传递到.NET

当Microsoft的互操作程序集被引用时,像Worksheet,Workbook,Range等Excel对象可以从VBA传递给.net作为参数: .NET类: using Excel = Microsoft.Office.Interop.Excel; [ComVisible(true)] [ClassInterface(ClassInterfaceType.AutoDual)] public class MyExcelLib { public MyExcelLib() {} // default constructor public void InsertTable(Excel.Workbook wbook, string TableName, …) { … } } 在Visual Studio或Regasm实用程序中,可以使用Register for COM Interop选项(请参阅Newman的文章以获得更好的概述)。 VBA脚本(excelmacros)调用.net方法InsertTable() : Dim xLib As New MyExcelLib Call xLib.InsertTable(ThisWorkbook, "Price", ..) 这工作; Workbook对象可以作为参数从VBA传递给.NET。 但是相同的模式不适用于NetOffice程序集: using Excel = NetOffice.ExcelApi; using NetOffice.ExcelApi.GlobalHelperModules; using […]

ExcelDna / NetOffice / Excel:插入值的最有效方法?

我使用ExcelDna和NetOffice为Excel创build插件,并从各种来源获取数据并将其插入到工作表中。 我的问题是在工作表中插入数据非常慢。 将值块插入Excel的最有效方法是什么? ResultCell[,] result = _currentView.GetResult(values, cursor); int loopM = result.GetUpperBound(0); int loopN = result.GetUpperBound(1); for (int y = 0; y <= loopM; y++) { for (int x = 0; x <= loopN; x++) { int a = xlCurrentCell.Row + row; int b = xlCurrentCell.Column + x; Excel.Range xlCell = (Excel.Range)xlActiveSheet.Cells[a, b]; _SetValue(xlCell, result[y, […]

检查macros样式的Excel UDF中的数组公式

我正在使用Excel-DNA在Excel和NetOffice中创buildUDF以进行与版本无关的自动化调用。 在一个macrostypes的函数中,我可以使用以下命令从单元格中获取公式: ExcelReference cellRef; // of course in reality this is assigned var formula = (string)this.excelCall(XlCall.xlfGetFormula, cellRef); 此外,虽然,我想知道这是否是数组公式的一部分,如果是的话。 使用Excel自动化,我可以使用类似于: Range("A1").HasArray Range("A1").CurrentArray.Address 但是,Microsoft拒绝在UDF调用中使用自动化: https : //support.microsoft.com/en-us/kb/301443 那么,有没有办法通过C API来获取HasArray和CurrentArray属性,或者有没有人知道它是否可以(在UDF声明为macrostypes的上下文中)使用自动化?

NetOffice和VSTO可能共存吗?

我使用function区devise器在Excel中创build了一个加载项的项目,我正在计划做一些更改。 然而,使用excel.interop是非常棘手的。 所以,我想知道是否有可能共存Netoffice和VSTO? AFAIK,我所缺less的是获得当前应用程序的方式 在NetOffice中: var application= new Excel.Application(???, ????); 而在VSTO我使用: var application=Globals.ThisAddIn.Application;

如何使用NetOffice更改Excel行的行颜色?

我正在努力解决一个简单的问题,但我无法弄清楚。 我有一个Excel文档,我做了一些处理(使用NetOffice API)。 这工作正常,但我想更改处理后的行颜色,所以在范围内的每一行应处理后具有相同的颜色。 我得到一个COMException(HRESULT:0x800A03EC)与下面的代码: foreach (Excel.Range row in rg) { //do the processing… … row.Interior.Color = XlRgbColor.rgbAliceBlue; } 我也为这个HRESULTsearch,并试图解决这个问题,在Open() – 方法通过设置readOnly为false和可编辑和corruptLoad为true。 那没用。 我也尝试将交互属性设置为true,并以不同的格式(.xls,.xlsx)保存excel文件,但没有任何结果。 我发现excelfile / workbook是受保护的。 所以我试图像这样解除ActiveWorkbook的保护 app.ActiveWorkbook.Unprotect(); 但是,这也出错了,并抛出一个COMException,该工作簿对象的unprotect属性不能分配。 我希望有人能帮助我。 提前致谢, 科德尔

以编程方式获取lockingExcel工作簿的用户

我正在使用C#framework 4.5,netoffice 1.6和sharpdevelop 4.4.1来从Outlook中操作位于networking共享上的Excel工作簿。 在某些时候,我需要将工作簿对象(ewb)的文件访问权限更改为readwrite,如下所示: ewb.ChangeFileAccess(Excel.Enums.XlFileAccess.xlReadWrite, System.Reflection.Missing.Value, true); 在更改文件访问权限之前,我检查文件是否在服务器上被locking。 如果文件被locking,我会通知用户稍后重试该操作。 现在,我想包含在通知中lockingExcel文件的用户名。 我搜查了msdn,netoffice论坛,等等,并没有find解决scheme。 我知道,如果你打开excel文件readwrite,它会把用户名存储在xlsx文件中。 我如何通过c#访问特定的信息? 编辑:我结束了这样做: public string GetExcelFileOwner(string path, NetOffice.ExcelApi.Enums.XlFileFormat ffmt) { string tempmark = "~$"; if(ffmt==NetOffice.ExcelApi.Enums.XlFileFormat.xlExcel8) { tempmark = ""; } string uspath = Path.Combine(Path.GetDirectoryName(path), tempmark + Path.GetFileName(path)); if (!File.Exists(uspath)) return ""; var sharing = FileShare.ReadWrite | FileShare.Delete; using (var fs = new FileStream(uspath, […]