我需要在C#中完成一个应用程序。
现在我想获得一个控制Excel文件来获取数据的函数。
我使用了getActiveObject("Excel.Application"),但这不会返回任何内容。我不能在VS2008中使用Excel.Application,而是使用Microsoft.Office.Interop.Excel.Application。
那么有没有其他方法可以做到这一点呢?
Microsoft.Office.Interop.Excel.Application e = (Microsoft.Office.Interop.Excel.Application)Marshal.GetActiveObject("Excel.Application");发布于 2010-01-20 07:15:15
经过大约半天的尝试,我终于想出了如何让它工作,这样你就可以使用一个打开的excel了。我的用户一直在抱怨打开了太多的Excel实例。
以下是我为使其正常工作所做的一小段工作:
_Application excelApp;
try
{
excelApp = (_Application)Marshal.GetActiveObject("Excel.Application");
}
catch(Exception)
{
// this is important. If Excel is not running, GetActiveObject will throw
// an exception
excelApp = null;
}
if( excelApp == null )
{
excelApp = new ApplicationClass();
}我已经追寻了一段时间,终于有时间静下心来弄清楚了。
发布于 2018-08-07 18:13:50
我还一直在开发Excel插件,在命名空间中使用
using Excel=Microsoft.Interop.Office.Excel;不使用Microsoft.Interop.Office.Excel,而是使用上面的代码,更多的理解请看我的代码:
using System.IO;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Serialization;
using Excel = Microsoft.Office.Interop.Excel;
using Microsoft.Office.Interop.Excel;
using static MMCAPP2010.Profile;
using System.Runtime.InteropServices;
namespace MMCAPP2010
{
public class ExcelTemplateLoad
{
public void DeserializeObject(string filename)
{
Excel.Application instance;
Workbook wb = null;
try
{
//getting the current running instance of an excel application
instance = (Excel.Application)Marshal.GetActiveObject("Excel.Application");
}
catch
{
instance = new Excel.Application();
}
//opening the template
wb = instance.Workbooks.Open(@"C:\Users\U1152927\Downloads\sample.xltx");发布于 2009-08-27 14:46:16
为了能够将Excel对象模型引用为"Excel",您可以通过名称空间(或文档)顶部的using语句创建一个别名,如下所示:
using Excel = Microsoft.Office.Interop.Excel;此后,您可以引用Excel.Application而不是冗长的Microsoft.Office.Interop.Excel.Application。
至于为什么你对Marshal.GetActiveObject的调用失败了,我不能肯定。我有几个想法:
(1)是否确定已存在Excel的运行实例?如果没有,则创建一个新的Excel应用程序:
Excel.Application xlApp = new Excel.Application();(2)如果确实存在已经运行的Excel应用程序,并且Excel应用程序从未失去焦点,则该Excel实例可能尚未添加到运行对象表(ROT)中。有关这方面的更多信息,请参阅:Visual C# .NET Error Attaching to Running Instance of Office Application。我认为在这种情况下,Marshal.GetActiveObject方法应该抛出一个异常--而不是悄悄地返回null --但这似乎仍然是潜在的相关问题。
我希望这能帮到你。
麦克
https://stackoverflow.com/questions/1340176
复制相似问题