Tag: vb.net

.NET和CreateObject,它的内存COM对象使用?

我有一个VB.NET应用程序使用CreateObject来使用Excel并将大量数据转储到其中。 我们正在摆脱内存exception,我们的应用程序在这一点上通常打1GB的内存。 不过,我不能把所有的数字加起来。 这就是数据传递给Excel的方式: worksheet_object.Range("A1").Resize(rows, cols).Value = an_array 该应用程序是在屏幕上的数据(数据网格)400MB左右,当它崩溃时,已经使用了额外的600MB,尽pipeExcel的CSV只有200MB,CSV只有68MB。 我意识到在内存数组可能会有所增加,但600MB如何得到吞噬将数据传递给Excel,除非Excel以某种方式使用我的应用程序内存? 我试图找出,如果Excel通过CreateObject运行在自己的内存空间或使用我的应用程序内存空间,绘制一个完整的空白。 ProcessExplorer将它们显示为单独的进程,所以我不知道该怎么想。 我们发现运行的应用程序为64位,而不是32解决了这个问题,但并不是所有的客户将有64位的办公室。 所以我的问题是:这一行怎么可以使用600MB,有没有更好的方法将数据传递给Excel。

如何修复由于NativeWindow在Excel VSTO项目中的ThreadAbortException?

在一个针对Office 2007和2010的VSTO项目中,我在ThisAddIn_Shutdown完成后得到一个ThreadAbortException。 我相信这是由我的NativeWindow实现引起的,我在关机中清理它。 我正在使用NativeWindow,以便我的VSTO插件可以有HotKeys,我可以检测哪些键被按下。 这里有一个类似的问题,但我没有使用它的forms,所以我不能使用这个解决scheme。 在这个线程中,问题得到了更好的解释。 您必须在closures之前在主Excel窗口中释放您的子类。 原因是加载程序调用closures响应主Excel窗口closures。 因此,如果您在Excel的主窗口closures之前还没有调用ReleaseHandle,WM_CLOSE将首先被调度到NativeWindow的托pipeWndProc。 这将托pipe代码放在加载器closures代码下面的堆栈中。 所以加载器调用closures并卸载AppDomain,但是堆栈继续放松,并遇到托pipe代码。 由于AppDomain已被卸载,因此抛出了AppDomainUnloadedException,但由于没有可用的处理程序,因此Excel崩溃。 但是我再次不能使用这个解决scheme,因为我没有使用这个解决scheme。 所以据我可以告诉解决办法是在Excelclosures之前清理NativeWindow的东西。 我怎样才能做到这一点? 我发现/想到的唯一的事情就是解决这个Word问题。 这是发送WM_CLOSE消息。 我可以取消一个应用程序退出清理我的本地窗口,并亲自closuresExcel。 但是我不确定Excel(2007/2010)是否知道什么时候closures,这足以取消。

在Excel 2010中使用注册免费COM

我一直在努力使用免费注册COM来从Excel 2010进行.NET调用。本质上,我希望能够在Excelmacros中调用一些.NET API函数。 我在.NET中创build了一个包装器API,并将这个包装器作为一个COM可调用库展示出来。 代码如下: Imports System Imports System.Collections.Generic Imports System.Runtime.InteropServices Imports NXOpen Imports NXOpen.UF Imports NXOpen.Assemblies Namespace ExcelNXInterface <Guid("bbe0089d-a732-4743-922b-180b30006fa4"), _ InterfaceType(ComInterfaceType.InterfaceIsIDispatch)> _ Public Interface _ExcelNXInterface <DispId(1)> Sub HighlightCompTag(ByRef tag As Long) <DispId(2)> Sub Echo(ByVal output As String) End Interface <ComVisible(True)> <Guid("1376DE24-CC2D-46cb-8BF0-887A9CAF3014"), _ ClassInterface(ClassInterfaceType.None), _ ProgId("ExcelNXInterface.ExcelNXInterface")> Public Class ExcelNXInterface Implements _ExcelNXInterface Public _ExcelNXInterface Dim theSession […]

检测到上下文切换死锁

我正在尝试使用像Excel数据库一样的Excel文件。 我已经编写了这个代码来打开我将用来工作的Excel文档 Private Sub Importa_XLS(ByVal fileData As String, ByVal dbVuoto As String, ByVal dbDest As String) Dim bw As BackgroundWorker = New BackgroundWorker bw.WorkerSupportsCancellation = True bw.WorkerReportsProgress = True If My.Computer.FileSystem.FileExists(dbDest) Then My.Computer.FileSystem.DeleteFile(dbDest) My.Computer.FileSystem.CopyFile(dbVuoto, dbDest) Dim capitoli As New cCapitoli Dim paragrafi As New cParagrafi Dim voci As New cVoci Dim fileStream As FileStream = […]

如何在VB.net应用程序中获取最新版本的MS Excel?

我在我的VB.net应用程序中使用Excel Interop。 我正在使用Microsoft Office 11.0 Object Library和Microsoft.Office.Interop.Excel进行Excel自动化。 这两个DLL都是用于Office 2003的。我的问题是,如何让我的项目引用最新版本的MS Office(比如说Office 2010)

当列名是一个数字时,使用VB.NET中的ADO查询Excel

我正在使用VB.NET通过SQL查询使用ADO的Excel电子表格。 一般的方法是这样的: SELECT [firstname], [secondname] FROM [Sheet1$] 这是完美的 然而,其中一个标题被称为3,所以我想这样做: SELECT [firstname], [secondname], [3] FROM [Sheet1$] 但是,这是行不通的。 我知道我可以使用*来获取所有的列,但后来我想使用(使用dataReader): dr("3")这将无法正常工作 有任何想法吗?

使用在Excel VBA中包含DataContract的wcf服务

你读的标题和呻吟。 没关系。 我也是。 但是,我们做我们所要求的,对吧? 我需要build立一个服务,可以从Excel(2003,但我假设任何版本的Excel应该支持这个function)通过一个绰号访问。 目前我所要做的就是将电子表格发布数据发送到从远程计算机上的Windows服务运行的WCF服务。 因为这些数据需要比VBA更复杂的东西来检索,所以我决定build立一个数据合同。 这里是我的代码(目前这只是一个概念validation,但它与完成时需要看的密切相关)。 这里是WCF相关的东西: Imports System.ServiceModel Imports System.Runtime.Serialization <ServiceContract()> Public Interface IWCF <OperationContract()> Sub PutData(ByVal what As String) <OperationContract()> Function GetWhats() As TheWhats() End Interface <DataContract()> Public Class TheWhats <DataMember()> Public Property Timestamp As DateTime <DataMember()> Public Property TheWhat As String End Class Public Class WCF Implements IWCF Shared Whats […]

VB.NET和Excel表格格式

我在VB.NET中编写了一个小程序,用于将数据从DataGrid导出到Excel,并且完美地工作。 我的经理现在希望我以一种可见的格式显示数据。 我应该如何去做。 我logging了一个macros,但无法在vb.net中应用。 有没有什么好的教程涵盖了这个?

vb.net获取有效的Excel工作簿的完整path和文件名

我有几天前的代码工作,但忘记保存工作副本。 我花了4个星期才find这个答案,不想再花那么多时间,所以… 除了objWorkBook行,它会返回错误信息:“variablesobjWorkBook”在被赋值之前被使用,这里的所有东西都可以工作,在运行时会产生一个空引用exception。 有什么build议么? Dim objExcel As Excel.Application = System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application") Dim objWorkBook As Excel.Workbook Dim totalWorkBooks As Integer = objExcel.Workbooks.Count MsgBox(totalWorkBooks & " is Number of Open Workbooks") Dim ActiveBookIndex As Integer = objExcel.ActiveWindow.Index MsgBox(ActiveBookIndex & " is Active Window Index") Dim FullName As String = objWorkBook.FullName MsgBox(FullName & " is FullName") Dim OnlyName As […]

vb.net水晶报表excel的颜色

我正在使用现有的VB.Net应用程序,该应用程序在预定的时间运行CRXI报告。 它工作得很好,报告被导出到Excel,CSV或PDF,这取决于报告输出格式应该是什么时间表。 这是设置导出选项的相关代码部分: ' Set report options CRRep.DiscardSavedData() CRRep.EnableParameterPrompting = False ' Set export parameters CRRep.ExportOptions.DestinationType = CRAXDRT.CRExportDestinationType.crEDTDiskFile Select Case UCase(ReportJob.OutputFormat) Case "XLS" CRRep.ExportOptions.FormatType = CRAXDRT.CRExportFormatType.crEFTExcel80Tabular CRRep.ExportOptions.ExcelUseConstantColumnWidth = True CRRep.ExportOptions.ExcelConstantColumnWidth = 2000 FileExtension = ".xls" Case "CSV" CRRep.ExportOptions.FormatType = CRAXDRT.CRExportFormatType.crEFTCommaSeparatedValues CRRep.ExportOptions.ExcelChopPageHeader = True FileExtension = ".csv" Case Else CRRep.ExportOptions.FormatType = CRAXDRT.CRExportFormatType.crEFTPortableDocFormat FileExtension = ".pdf" 我的问题很简单。 […]