Tag: 互操作

Excel Interop“FindAll”方法

这可能是一个重复的问题,但真的不知道如何去标题。 有没有人能够findExcel Interop库中的方法,从“查找和replace”对话框公开“查找所有”function? 有Find,FindNext和FindPrevious,但没有FindAll,这很奇怪。 到目前为止,这就是我做这件事的方式,我的第一个尝试,可以这么说… //FindRange() is an extension method which wraps Worksheet.Cells.Find() Range start = sheet.FindRange(searchText, XlLookAt.xlPart, XlSearchOrder.xlByColumns, XlSearchDirection.xlNext); HashSet<int> matches = new HashSet<int>(); Range next = start; while (true) { next = sheet.Cells.FindNext(next.get_Offset(1, 0)); if (!matches.Add(next.Row)) break; } 有什么想法吗?

找出是否有在Excel中隐藏的列

我需要知道是否有在Excel表中隐藏的列。 我用使用以下工作正常,然后突然停止working.now它总是返回false。 bool.Parse(worksheet.PageSetup.Application.Columns.Hidden.ToString()) TIA excel 2007 .net 3.5

什么(如果有的话)是使用.NET与MS Excel交互的(免费)替代scheme?

背景:我正在努力决定是否要通过Interop使用C#自动化Excel。 我当然不是一个VBA的人,出于很多原因,我宁愿不走这条路。 我不太了解其他的select,我真的不想买任何东西。 性能是非常重要的。 我试图find使用Interop的自动化Excel的参考,它似乎相当稀疏​​。 一些更好的东西是过时的 ,其他参考资料并不包括很多材料。 许多人认为现有的许多材料花时间关注MS Office版本的差异。 我也想知道,转移到.NET 4的改进是否是重要的。 编辑:我试图完成的关键是完全自动化相当复杂和复杂的格式,以及一些相当繁重的分析(线性回归)。 我需要分析/计算一次图表数据,图表格式非常重要,因为我所从事的工商pipe理硕士是这么说的。 我想所有这一切都可以通过VBA,但我不知道,因为我不是一个VBA的家伙。 认为应用程序隐藏的macrostypes的东西,所以它作为后台进程运行。 性能是至关重要的(我质疑COM的适当性的原因之一)。 由于性能方面的考虑,VBA甚至可能脱离桌面。 现在,问题。 我可以简单地问一下这个问题的最好方法是: 你有没有在Excel中用Interop做的事情的一个清单,你希望能够做到 ? 你的开发经验如何? 如果真的没有什么你不能用Interop做的(见下面的评论),这是最适合我打算做什么,考虑到COM和学习使用它的最好方法是什么 Excel对象模型可能是一个相当吓人的工作。 那里真的有很好的参考吗? 如果还有更好的办法可以告诉我关于这个的吗? 提到了Excel DNA,但是我不能看到它比允许创build用户定义的C#函数更有帮助,这些C#函数可以到达后端服务器应用程序或数据库。

使用多个线程处理大型Excel文件

我正在使用C#VSTO和Interop lib来开发Excel加载项。 用于在将这些值粘贴到具有格式的其他工作簿之前validation每个单元格的值。 我的实际查询是处理,(以尽可能最快的方式)与一些标准单元格。 我已经使用WorkSheet.Cells.SpecialCells()获取我感兴趣的Excel.Range对象,并使用线程来同时处理Excel.Range(由SpecialCells()返回)。 以下是一些观察/问题: 看来Excel.Range不能根据偏移和长度分割(即我不能从现有的范围基于一些偏移量和计数得到新的范围对象) 如果我们在线程中共享范围对象并试图以不同批次处理单元格,我们得到以下exception:“消息filter指示应用程序正忙(从HRESULTexception:0x8001010A(RPC_E_SERVERCALL_RETRYLATER))”这也留下批次细胞未处理。 任何解决上述问题的input或指针都会有所帮助。 另外,任何有关处理大型Excel文件的build议都可以在几秒内完成(这是目前最大的瓶颈)

在Microsoft HPC上通过Com-interop C#API打开一个excel文件

我正在Windows hpc上工作,我试图做一个运行在网格上的macros的macros的小程序。 我正在使用Com Interop API 它在我的电脑上工作正常,它运行不同的VBAmacros,但是当我在网格上使用它时,它不再工作。 Open方法无法正常工作。 workBook = excelApp.Workbooks.Open(path, Type.Missing,false, Type.Missing, Type.Missing, Type.Missing, true, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 这是从法语翻译的例外: 发现exception:types:System.Runtime.InteropServices.COMException消息:Microsoft Office Excel无法访问该文件 \服务器\path\ TEST.XLS。 有多种可能性: 该文件的名称或path不存在 该文件当前用于另一个程序 您尝试使用的工作簿具有已经打开的另一个工作簿的相同名称 来源:Microsoft Office Excel Stacktrace:在Microsoft.Office.Interop.Excel.Workbooks.Open(String Filename,Object UpdateLinks,Object ReadOnly,Object Format,Object Password,Object WriteResPassword,Object IgnoreReadOnlyRecommended,Object Origin,Object Delimiter,Object Editable,Object Notify,Object Converter ,Object AddToMru,Object Local,Object CorruptLoad)位于E:\ path \ […]

如何查找ExcelInterop中的第一个和最后一个单元格以及C#中的graphics范围

试图在Excel中绘制一个简单的csv文件: 1,2,3 4,5,6 7,8,9 我如何以编程方式确定graphics范围是A1:C3? 我努力了 var lastCell = worksheet.Cells.get_End(XlDirection.xlUp); 确定最后一列,但似乎并没有工作。 以下是我用来绘制文件的代码,我只需要确定范围。 using Microsoft.Office.InteropServices.Excel; Application application = new Application(); Workbook workbook = application.Workbooks.Open(fileName); var worksheet = workbook.Worksheets[1] as Microsoft.Office.Interop.Excel.Worksheet; // Add chart. var charts = worksheet.ChartObjects() as Microsoft.Office.Interop.Excel.ChartObjects; var chartObject = charts.Add(60, 10, 300, 300) as Microsoft.Office.Interop.Excel.ChartObject; var chart = chartObject.Chart; // Set chart range. […]

如何加快写入Excel工作表

我正在使用Interop对象写入Excel电子表格。 使用秒表,我发现以下的实施非常及时。 foreach循环中的进程通常需要大约50秒来编写大约2000行,每行有9列。 有什么办法可以加速吗? List<string[]> allEntries = fillStringArrayList(); // Set-up for running Excel xls = new Excel.Application(); workBooks = xls.Workbooks; workBook = workBooks.Open(workbookPath); var workSheet = workBook.Sheets["Sheet1"]; // Insert new entries foreach (string[] entry in allEntries) { // Get the final row in the sheet that is being used Excel.Range usedRange = workSheet.UsedRange; int rowCount […]

C#Excel Interop一次设置多个单元格值

我怎么能一次添加到同一行的5个单元格的值? 这是现在如何添加他们: ws.Cells[1, 1] = "1"; ws.Cells[1, 2] = "2"; ws.Cells[1, 3] = "3"; ws.Cells[1, 4] = "4"; ws.Cells[1, 5] = "5"; 预期结果:

从Excel单元格获取文本框的值

用户向我提供了一个Excel文档,其中包含几个单元格中的文本框。 我有通常的安装代码来加载Excel应用程序,获取工作表,然后开始迭代使用的范围。 当我尝试获取包含该文本框的单元格的值时,值为空。 foreach (Range row in usedRange.Rows) { object[,] valueArray = (object[,])row.get_Value(XlRangeValueDataType.xlRangeValueDefault); var value = valueArray[1,10]; // This is null for textbox cells } 是否有一个特殊的方法,我应该用来获取Excel工作表中显示的文本框的值? 编辑修复和解释 Stewbob对迭代形状的build议使我朝着正确的方向前进。 但使用下面的代码,我得到空例外: for (int i=1; i<shapes.Count;i++){ var item = shapes.Range[i].Item(1); string myString = item.TextFrame2.TextRange.Characters.Text.ToString(); } 看完Quickwatch中的对象后,我注意到了这个形状的一些奇怪的东西。 它是msoOLEControlObjecttypes的。 事实certificate,这个Excel文档的值是从一个网页剪切和粘贴到Excel中。 Excel不是创build文本框,而是OLE框。 OLE框确实有一个“Value”属性,所以我可以像这样访问文本框的值: var shapes = ws.Shapes; for (int i=1; i<shapes.Count;i++){ […]

使用Microsoft.Office.Interop.Excel.dll库; Excel需要在最终用户的机器上吗?

我一直在做这个话题的大量阅读,大多数人似乎都认为有必要使用Excel来使用COM Interop库。 但是,他们从来没有具体到哪里应该安装。 它是否需要安装在我正在开发的机器上,还是需要安装在我部署的每台机器上? 在此先感谢大卫 编辑:我应该提到,这是针对所有Windows机器的桌面开发/部署