Tag: .net

为什么要杀死Excel进程是一件坏事?

我已经看到了很多关于如何确保Excel实际上退出的文章和问题,而且这个过程并没有维持下去。 以下是描述问题的知识库文章以及Microsoft推荐的解决scheme。 主要有: 'close files 'Quit Excel xlApp.quit() 'Release and collect garbage System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlApp) GC.Collect() GC.WaitForPendingFinalizers() 许多人不build议杀死这个过程; 请参阅如何正确清理Excel互操作对象和了解.net中的垃圾收集 另一方面,很多人不推荐使用GC.Collect。 看看使用GC.Collect()有什么错误? 在我的经验中,杀死这个过程是确保Excel不见了的最快最容易的方法。 我的代码只杀死它启动的确切过程,没有其他的。 我确保closures所有打开的工作簿,退出应用程序并释放xlApp对象。 最后,我检查过程是否还活着,如果是的话就杀了它。 <System.Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True)> _ Private Shared Function GetWindowThreadProcessId(ByVal hWnd As IntPtr, _ ByRef lpdwProcessId As Integer) As Integer End Function Sub testKill() 'start the application Dim xlApp As Object = CreateObject("Excel.Application") 'do some […]

导出GridView到Excel,而不会丢失Excel中的网格线

我有一个GridView,我想要导出到Excel。 当我使用我在网上find的示例代码时,它将内容导出到Excel中,但由于某种原因,它也清除了我的导出表之外的所有网格线。 对于普通的excel用户来说,这很容易解决,但是我需要这个解决scheme为每个人工作。 那么有没有办法将一个GridView中的数据导出到一个Excel工作簿中,以便它看起来像只是input到Excel中? 我已经粘贴了我在下面使用的代码,假设一个叫做toPrint的GridView存在并且有准确的数据。 Response.Clear(); Response.AddHeader("content-disposition", "attachment; filename=" + name + "_Registration_Forms.xls"); Response.Charset = ""; Response.ContentType = "application/vnd.ms-excel"; Page.EnableViewState = false; System.IO.StringWriter stringWrite = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite); toPrint.RenderControl(htmlWrite); Response.Write(stringWrite.ToString()); Response.End(); 编辑:find一个部分的解决scheme。 如果以逗号分隔的列表forms导出,并将标题设置为CSV文件,则可以正常打开,并显示所有网格线(即使是导出的数据以外的网格线)。 唯一的问题就是在输出之前,必须从我的值中去掉每个逗号和换行符。

从Excel VBA调用未注册的.NET DLL

我需要编写一个可以直接从Excel的VBA模块中调用的.NET DLL,这样dll和.xls就可以简单地部署在同一个目录中,而无需任何COM注册。 dll的目的是运行在C中实现的algorithm 我应该如何继续? 这可能吗?

Excel Interop打开Excel的macros,禁用macros

在加载excel文件之前,C#中有没有办法在excel中closuresmacros? 我正在使用Excel Interop加载Excel文件。 我能看到的只是VB.NET的解决scheme。 感谢Nishant

如何自动刷新Excel公式?

我遇到了使用ExcelPackage的大问题,因为有时公式不会更新(即使我删除了这个值)。 我试过使用ExcelInterop xlsx保存为xls,认为这可以解决问题,但它没有。 我发现解决它的方法是按CTRL + ALT + F9。 用户不会喜欢每次都这样做,所以我想以编程的方式来完成。 你知道任何有效的方法来确保所有xlsx公式被更新吗?

如何使用VB.net在Excel中删除范围内的单元格?

目标达成:去除范围内的任何边界。 我有 : Dim range As Excel.Range = sheet.Range("A2:K100") For Each cell In range // Some cells in the Range has borders // How to remove borders from cells in the range Next cell 请帮忙.. ! 我是Vb.net的新手!

Excel从两个不同的AppDomain调用.NET自动化服务器?

我有一个Excel插件(用C#编写),它是一个静态variables,位于单例数据caching的核心: static DataCache _instance; 这是通过三种不同的代码path访问的: VSTO ribbon-bar上的事件处理程序将初始化实例,并将其读取以在辅助对话框中显示 RTD服务器(声明为[ComVisible]并实现IRtdServer接口的类)使用RTD公式的数据 一组自动化调用(在声明为[ComVisible]的另一个类中实现)也可以对数据进行操作。 这些是通过在Excel工作表上的button被点击时调用的VBA代码调用的。 编辑(#3): 根据这些代码path被首先调用的顺序,我发现我的代码在两个独立的AppDomain中运行。 来自function区事件处理程序的所有访问都发生在名为“MyPlugIn.vsto”的AppDomain中。 如果这是对我的COM对象的第一次访问,那么所有的后续调用(包括RTD调用)都发生在同一个AppDomain中。 但是,如果第一次访问是通过RTD接口进行的,则该调用和所有后续的RTD调用都发生在名为“DefaultDomain”的AppDomain中。 (使用embedded式RTD公式加载保存的文档时会发生这种情况。)通过工具栏初始化和操作DataCache的后续调用仍然出现在“MyPlugIn.vsto”AppDomain中。 这意味着RTD公式总是像DataCache未初始化一样运行(因为在一个AppDomain中设置的静态variables在其他AppDomain中保持未初始化)。 看来,VSTO初始化时,Excel或VSTO正在创build一个AppDomain。 在此初始化之前通过COM互操作创build的对象位于默认AppDomain中,而之后创build的对象位于VSTO AppDomain中。 我如何确保使用相同的DataCache实例,而不pipe在哪个AppDomain中创build了我的RTD服务器对象?

如何将.NET标准格式string转换为Excel格式string

我有一个应用程序,允许用户创build数字数据的自定义视图,并指定用于显示数据的格式string。 通常用户使用.NET标准格式string,如N2,P1。 我现在有要求生成Excel导出,并希望根据用户的喜好来格式化导出的数据。 有没有什么“内置”将标准的.NET格式string转换为可以在Excel中使用的自定义格式string。 例如“N2”=>“#,## 0.00”; “P1”=>“#,## 0.0%”,还是我必须推出自己的?

Microsoft ACE驱动程序在我的程序的其余部分中更改了浮点精度

在使用Microsoft ACE驱动程序打开Excel电子表格之后,我遇到了某些计算结果更改的问题。 下面的代码重现了这个问题。 前两个DoCalculation调用产生相同的结果。 然后我调用OpenSpreadSheet函数,它使用ACE驱动程序打开和closuresExcel 2003电子表格。 您不希望OpenSpreadSheet对最后一次调用OpenSpreadSheet有任何影响,但事实certificate结果实际上发生了变化。 这是程序生成的输出: 1,59142713593566 1,59142713593566 1,59142713593495 请注意最近3位小数的差异。 这似乎没有什么太大的差别,但是在我们的生产代码中,计算是复杂的,所得到的差异是相当大的。 如果我使用JET驱动程序而不是ACE驱动程序,则没有区别。 如果我将types从double改为decimal,错误就会消失。 但是在我们的生产代码中这不是一个选项。 我在Windows 7 64位上运行,程序集是为.NET 4.5 x86编译的。 我们正在运行32位Office,因此使用64位ACE驱动程序不是一个选项。 有谁知道为什么会发生这种情况,我该如何解决? 以下代码重现了我的问题: static void Main(string[] args) { DoCalculation(); DoCalculation(); OpenSpreadSheet(); DoCalculation(); } static void DoCalculation() { // Multiply two randomly chosen number 10.000 times. var d1 = 1.0003123132; var d3 = 0.999734234; double […]

如何插入图片到Excel单元格?

我的任务是把图片从URL到Excel工作表中的某个单元格。 我在C#中使用NetOffice来执行此操作。 我的主要问题是,我无法find一个方法来完全插入到单元格的图片。 当我使用Sheet.Shapes.AddPicture(),我必须计算坐标在哪里把我的照片。 当然,我没有问题(我创build了一种解决方法),但是,我想问我的方法来解决这个问题是正确的,或者如果有其他方法,我可以插入图像的单元格。 这是我的解决方法: var floatLeft = FloatLeftPixelsCalculation(rowNumber); var floatTop = FloatTopPixelsCalculation(rowNumber); Worksheet.Shapes.AddPicture(urlCellValue, MsoTriState.msoFalse, MsoTriState.msoTrue, floatLeft, floatTop, PictureWidth, PictureHeight); public float FloatTopPixelsCalculation(int rowNumber) { float floatTop = 0; for (var rNumber = 1; rNumber < rowNumber; rNumber++) { var cellHeight = Convert.ToSingle(Worksheet.Cells[rNumber, ColumnIndex].RowHeight); floatTop = floatTop + cellHeight; } return floatTop; } public […]