Tag: .net

在我的析构函数中释放Excel对象

我正在使用Microsoft.Interropt.Excel DLL写一个Excel类。 我完成了所有的function,但我在我的析构函数中有一个错误。 我想保存所有更改到我的文件,我想释放所有来源。 我想把它们全部放在我的析构函数中。 但是在我的析构函数中,Excel.ApplicationClass,Workbook和Worksheet对象被一个Exception填充,这个“Exception对象具有已经从其底层RCW中分离出来的COM对象不能被使用”的消息。 所以我不能保存任何东西,什么都不closures,因为我们不能访问工作簿或工作表对象。 我无法访问析构函数中的类私有成员?

Gridview到Excel

我有一个与AutoGenerateDeleteButton 而我出口这个gridview简单的代码.. Response.Clear(); Response.AddHeader("content-disposition", "attachment;filename=Avukat.xls"); Response.Charset = ""; Response.ContentType = "application/vnd.xls"; System.IO.StringWriter stringWrite = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite); GridView1.RenderControl(htmlWrite); Response.Write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />"); Response.Write(stringWrite.ToString()); Response.End(); 这没有问题。 但在Excel中有一个删除列:)) 我如何删除Excel中的删除列?

使用C#.NET查询Excel电子表格而不使用Jet OLE DB

有没有办法查询Excel 2010电子表格,而不使用Jet或导出为CSV和查询CSV文件。 我无法使用Jet的原因是因为应用程序需要在Windows Server 2008 R2上作为Web服务运行,而不支持32位 – 因此Jet将无法工作。 这是给定的,因为WOW 64没有安装在目标服务器上。 这个线程build议使用32位代理机器,但这也不是一个选项。 更多信息:服务器正在运行Sharepoint 2010。 谢谢, JD

Excel的XML电子表格 – 是否有可能embedded图像?

我试图从一个Web应用程序导出数据到Excel中,但是有一个要求在电子表格的顶部包含公司的标志。 我创buildExcel的常规方法是在Excel中创build一个电子表格,并将其保存为Xml电子表格(Excel 2003)。 这允许我在代码中build立xml。 但是,当试图将Excel工作表保存为xml工作表时,我会收到警告,图像将丢失。 那么,是否可以从我的应用程序中embedded图像? 我试过base64,但没有奏效。 <Data ss:Type="Base64">base64string here…</Data>无效 Html也不解释。 这可能吗? Excel 2003 +是目标。

注册在客户端计算机上注册的针对Excel编写的COM服务器的问题(无法设置mscoree.dll的完整path)

在这个前面的问题< 如何获得在VB.NET中编写的Excel的COM服务器安装和注册在自动化服务器列表中? >有一个示例,说明如何使用VS 2008创buildregistry项的完整path。除了我设置的完整path(使用VS中的registry编辑器),mscoree.dll无法正常工作(这意味着它什么都不做)。 完整的registrypath是: HKEY_CLASSES_ROOT \ CLSID \ {my_GUID} \ InprocServer32的\(默认) 我设定的值是: [SystemFolder] MSCorEE.dll中 我可以把任何东西(包括硬编码的完整path),但设置似乎并不重要,registry总是包含mscoree.dll没有任何path。 我已经尝试通过VS添加另一个值到registrypath,并正常工作,包括由[SystemFolder]指定的完整path。 我需要完整path的原因是(如前面的问题所述),如果没有path,Excel会在自动化服务器被选中时产生一个错误,因为它找不到mscoree.dll(有趣的是,即使我收到一个错误, )。 我正在通过安装项目安装,否则工作正常。 我在VISTA * 64系统上安装,但是在其他操作系统上却得到了相同的错误。 有谁知道我在做什么错?

防止代码被加载到另一个AppDomain

我们有一个通常工作正常的excel插件,我们没有设置使用AppDomains任何东西。 然而,其他一些插件似乎强制我们的代码第二次加载,我们最终让我们的代码在两个不同的AppDomains上运行(当我们要执行一个动作时,我们将它放在AppDomain 1上的队列中,然后,ExcelsonTime函数在AppDomain 2上运行出队方法,队列为空)。 所以,我的问题是:是否有一个简单的方法来解决这个问题,也许阻止我们的程序被加载两次或其他AppDomains ? 有没有人有任何其他的想法如何解决这个问题? 更新: 我们设法做的是在我们被调用的时候把我们的整个程序加载到其他的插件的AppDomain中,现在我们在相同的地方(曾经是“到其他域的网关”的地方,比如上面提到的动作队列函数): 当出现这种情况时,SynchronizationContext.Current似乎重置为null,例如对于function区上的每个单击处理函数的调用,SynchronizationContext.Current被设置为null。 我甚至尝试过debugging.Net代码,而且碰巧的是,框架会记住一个旧的同步上下文,当把所有的事情都弄回原来的样子时,旧的同步上下文就是空的。 任何人都可以在这个问题上给予任何帮助,我真的开始失去它?

从DataGridView到Excel 2002中隐藏的exception复制/粘贴

早上好, 运行Visual Studio 2008(C#3.5)。 DataGridView手动加载(不是数据绑定)。 复制/粘贴到记事本/写字板工作正常,但是当我尝试复制/粘贴到Excel我得到这个奇怪的例外: Invalid FORMATETC structure (Exception from HRESULT: 0x80040064 (DV_E_FORMATETC)) 这是上星期五的工作。 我完全难倒了。 我很确定这在过去有效。 我试过重新启动,重新添加DataGridView控件。 任何帮助非常感谢。 问候,阿兰。

如何判断何时在VBA窗口中

我正在C#.net工作,基本上我希望我的插件能够告诉用户是否保存,保存来自Excel本身,或者如果保存来自“Visual Basic for Application”窗口。 有没有办法来判断用户当前是否在“Microsoft Visual Basic for Application”中? 编辑:我不知道这是一个完整的教授解决scheme,但我发现.Application.ActiveWindow.ActiveSheet == null似乎工作。

到目前为止,使用COM对象的正确方法是什么?

这是一个非常普遍的问题,我决定提出这个问题,因为这个问题可能与今天有不同的答案。 希望这些答案将有助于理解什么是使用COM对象的正确方法。 就个人而言,在对这个问题有不同的看法后,我感到非常困惑。 过去5年来,我曾经使用COM对象,规则对我来说非常清楚: 在代码行中使用单个句点。 使用多个句点在场景后面创build不能被明确释放的临时对象。 不要使用foreach,而是使用for循环,并在每次迭代中释放每个项目 不要调用FInalReleaseComObject,而是使用ReleaseComObject。 不要使用GC释放COM对象。 GC意图主要用于debugging使用情况。 以与创build相反的顺序释放对象。 读完这些最后一行后,你们中的一些人可能会感到沮丧,这就是我如何正确地创build/释放Com Object所知道的,我希望得到的答案能够使它更加清晰和无可争议。 以下是我在这个主题上find的一些链接。 其中一些人告诉说需要调用ReleaseComObject,而其中一些则不是。 如何正确释放Excel COM对象 (2013年11月) 在.NET中释放COM对象的正确方法 (2011年8月) Marshal.ReleaseComObject认为危险 (2010年3月) ReleaseCOMObject (2004年4月) “…在VSTO场景中,你通常不需要使用ReleaseCOMObject …” MSDN – Marshal.ReleaseComObject方法 (当前的.NET Framework版本): “…您应该使用此方法释放包含引用的基础COM对象…” 更新: 这个问题被标记为太宽泛。 按照要求,我会尽量简化并提出更简单的问题。 使用COM对象时是否需要ReleaseComObject或调用GC是正确的方法? VSTO方法是否改变了我们用COM对象的方式? 我写的上面哪个规则是必需的,哪个是错的? 还有别的吗?

以编程方式将Excel 2003文件转换为2007+

我正在寻找一种方法来实质上采取旧文件扩展名为.xls的Excel文件的文件夹,并将其转换为.xlsm。 我意识到你可以自己进入Excel工作表并手动执行,但无论如何,它有代码吗? 具体使用任何types的库?