Tag: excel interop

使用VSTO创建UDF而不使用VBA

与此问题类似(但在我的情况下不是VSTO SE),我只想确认在Visual Studio 2005和Excel 2003中使用纯VSTO创建UDF是不可能的 – 所以,绝对清楚,我的问题是: 是否可以使用Visual Studio 2005和VSTO解决方案创建Excel 2003 UDF而无需使用任何VBA或其他技巧? 我知道ManagedXLL,ExcelDNA,Excel4Net等,但暂时不想考虑这些。 谢谢

Microsoft.Office.Interop.Excel或EPPlus用于读取大量(或不是)Excel文件

我写了一个代码来从Excel文件中读取一列。 我在这上面使用Microsoft.Office.Interop.Excel,首先读取整个Range,然后在System.Array中写入,然后我用System.Array值做一些操作,最后我将它转换为List,因为我填充了ListBox元素。 这是代码(仅相关部分): private List bd = new List(); private static System.Array objRowAValues; private List bl = new List(); private static System.Array objRowBValues; private List cm = new List(); private static System.Array objRowCValues; private List pl = new List(); private List bdCleanList; private static Microsoft.Office.Interop.Excel.Application appExcel; Excel.Application xlApp; Excel.Workbook xlWorkBook; Excel.Worksheet xlWorkSheet; Excel.Range rngARowLast, rngBRowLast, […]

如何发布excel流程?

我正在使用Excel互操作,它似乎每次打电话时都会创建一个进程 new Microsoft.Office.Interop.Excel.Application() 即使我打电话,也永远不会结束这个过程 xlApp.Quit(); 如何让流程结束?

使用Excel互操作设置单元格值

好的,所以我试图用excel互操作库设置一个单元格的值。 我可以用以下内容完成: sheet.Cells[row, col] = value; 但是我设置的数量非常慢。 所以我正试着走这条路: Range excelRange = sheet.UsedRange; excelRange.Cells.set_Item(row, col, value); 代码执行,但没有数据放入单元格。 关于我缺少什么的任何建议? 谢谢!

获得excel应用程序进程ID

我正在用c#创建一个excel应用程序。 由于我将紧急维护excel文件,我想保持其处理程序打开。 我想保留excel进程ID,以便在系统崩溃时能够终止它。 如何在创建Excel时获取Excel Pid?

使用c#写入现有Excel文件

我试图打开(或创建一个新的xls)Excel文件并为其写一些值。 虽然,如果我只是创建一个新的xls文件,下面的程序工作得很好,我遇到了一些问题 **mWorkBook = oXL.Workbooks.Open (path, 0, false, 5, “”, “”, false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, “”, true, false, 0, true, false, false);** 这是错误:无法访问“LOG.xls”。 该文件可能已损坏,位于未响应的服务器上或只读。 它不是只读的,它没有被破坏(因为有时文件是在运行时创建的)。 那有什么问题呢? private static Microsoft.Office.Interop.Excel.Workbook mWorkBook; private static Microsoft.Office.Interop.Excel.Sheets mWorkSheets; private static Microsoft.Office.Interop.Excel.Worksheet mWSheet1; private static Microsoft.Office.Interop.Excel.Application oXL; private void btnSignIn_Click ( object sender, EventArgs e ) { string path = “D:\\LOG.xls”; if(!File.Exists(path)) […]

Moq和Interop类型:在VS2012中工作,在VS2010中失败?

我有一个.NET库项目,大约有500个unit testing。 所有这些测试在Visual Studio 2012中运行良好。但是,我的一些测试在Visual Studio 2010中失败。在这些失败的测试中,我使用Moq从Microsoft.Office.Interop.Excel模拟几个互操作类型。 尝试访问这些模拟的互操作类型时,测试立即失败: Error: Missing method ‘instance class Microsoft.Office.Interop.Excel.Range [ExcelAddIn.Core] Microsoft.Office.Interop.Excel.ListRow::get_Range()’ from class ‘Castle.Proxies.ListRowProxy’. 这个exception意味着我忘了在mock上设置适当的属性getter。 事实并非如此: _listRowMock.Setup(m => m.Range).Returns(_rangeMock.Object); 现在我可以想象Moq对于Interop类型可能效果不佳。 但我发现最令人费解的是,这些测试在Visual Studio 2012中运行良好,但在Visual Studio 2010中失败。 为什么我的Visual Studio会影响我的代码行为? 更新:2012年3月11日 好的,所以我明白了: 我有两个项目; Core和Core.UnitTest。 Core是实际的库,而Core.UnitTest是Core库的unit testing项目。 这两个项目都引用了Microsoft.Office.Interop.Excel并启用了嵌入互操作类型。 因为启用了EIT,所以这两个项目都包含自己的Microsoft.Office.Interop.Excel库“视图”。 该视图包括其各自项目中使用的所有类,方法和属性。 由于两个项目都使用Microsoft.Office.Interop.Excel的不同类,方法和属性,因此两个库的嵌入类型不同。 例如,Core中的ListRow具有Index和Range属性,而Core.UnitTest中的ListRow仅具有Range属性。 虽然两种类型都不同,并且不共享公共接口或超类,但它们是等效的 。 这意味着CLR会将它们视为相同,并允许您跨组装边界使用这些类型。 例如,Core.UnitTest中的ListRow实例在传递给Core库中的方法时可以正常工作。 共享的Range属性将起作用,而缺少的Index属性将在访问时抛出MissingMethodException。 上述行为甚至适用于模拟类型。 Mock [Excel.ListRow]的模拟对象在穿过assembly边界时可以正常工作。 不幸的是,前一点中描述的行为仅在我在Visual Studio 2012中构建程序集时才有效。 当我在Visual […]

从word文件中提取图像

我一直在尝试以下C#代码从doc文件中提取图像,但它不起作用: object missing = System.Reflection.Missing.Value; Microsoft.Office.Interop.Word.Application oWord = new Microsoft.Office.Interop.Word.Application(); Microsoft.Office.Interop.Word.Document oDoc = new Microsoft.Office.Interop.Word.Document(); oWord.Visible = false; object str1 = “C:\\doc.doc”; oDoc = oWord.Documents.Open(ref str1, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref […]

HRESULT:Worksheet.range上的0x800A03EC

我在Worksheet.range方法上获得了HRESULT:0x800A03EC。 行数超过70K。 Office 2007。 码: Microsoft.Office.Interop.Excel.Range neededRange = currentWS.Range[cell.Cells[1, 1], cell.Cells[nRowCount, nColumnCount]]; 这里我的行数超过65530。 打破这个function。 我观察到它只在行数超过65530时才会中断。

Interop进程后无法关闭Excel.exe

我遇到了Excel Interop的问题。 即使我重新发布实例,Excel.exe也不会关闭。 这是我的代码: using xl = Microsoft.Office.Interop.Excel; xl.Application excel = new xl.Application(); excel.Visible = true; excel.ScreenUpdating = false; if (wordFile.Contains(“.csv”) || wordFile.Contains(“.xls”)) { //typeExcel become a string of the document name string typeExcel = wordFile.ToString(); xl.Workbook workbook = excel.Workbooks.Open(typeExcel, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing); object […]