Tag: vb.net

两台不同计算机上的不同Interop参考不起作用

当我在计算机上添加对Microsoft.Office.Interop.Excel的引用时,Visual Studio将其添加到项目文件中: <COMReference Include="Excel"> <Guid>{00020813-0000-0000-C000-000000000046}</Guid> <VersionMajor>1</VersionMajor> <VersionMinor>5</VersionMinor> <Lcid>0</Lcid> <WrapperTool>primary</WrapperTool> <Isolated>False</Isolated> </COMReference> 团队中还有另外一名开发人员遇到错误,需要将一个DLL文件添加到名为Interop.Excel.dll的项目中,该项目将在项目文件中用以下代码replace上面的代码: <Reference Include="Interop.Excel, Version=1.5.0.0, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> <HintPath>My Project\Interop.Excel.dll</HintPath> </Reference> 这在我的电脑上工作。 你能解释一下这两种方法之间的区别,哪一个最好,以及如何让其他电脑上的第一个工作?

将值传递给VB.NET中的input框

我试图自动化一些有一些macros的Excel表上的数据人口。 现在excel被保护,我不能得到密钥。 现在我能够运行macros,但是当我尝试传递参数时,我得到的参数不匹配。 如果我只是用这个名字运行macros,我会得到一个inputinputbox ,它将一个额外的参数作为input,并自动生成一些列的值。 截至目前,我必须手动input这个值到input框中。 有没有什么办法可以使这个过程自动化,也就是捕获vb.net脚本中的macros引发的input框,并从那里input值? 即我想要运行macros,当我得到popup要求我input一些值,使用vb.net代码input该popup的值。 这是我到现在为止 Public Class Form1 Dim excelApp As New Excel.Application Dim excelWorkbook As Excel.Workbook Dim excelWorkSheet As Excel.Worksheet Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click excelWorkbook = excelApp.Workbooks.Open("D:/excelSheets/plan_management_data_templates_network.xls") excelApp.Visible = True excelWorkSheet = excelWorkbook.Sheets("Networks") With excelWorkSheet .Range("B7").Value = "AR" End With excelApp.Run("createNetworks") // […]

Excel 2016触发撤消保存错误?

Excel 2016似乎在保存时触发以编程方式添加撤销级别,这在早期版本的Excel(2013,2010和2007)中不会发生。 要重现这种明显的错误,请打开一个新的工作簿并将其保存为启用macros的工作簿(.xlsm文件)。 将以下代码粘贴到ThisWorkbook模块中: Option Explicit Public WithEvents App As Application Private Sub Workbook_Open() Set App = Application End Sub Private Sub App_SheetChange(ByVal Sh As Object, ByVal Target As Range) Application.OnUndo "foo", "modTest.Undo" End Sub 然后,插入一个名为modTest的新模块并粘贴以下代码: Public Sub Undo() MsgBox "This is the Excel 2016 bug." End Sub 最后,保存工作簿并重新打开它。 在任何单元格中input任何值以触发Application.SheetChange事件。 保存工作簿(出于某种原因,您可能需要这样做两次),并且将显示modTest的消息。 任何人都可以解释这里可能会发生什么,和/或如何解决这个问题? 如果这确实是一个错误,那么向Microsoft报告的最好方法是什么? 这个代码是VBA,但是由于这个问题会影响用VB.NET和C#编写的VSTO插件,所以我包含了这些标签。

调用退出后,应用程序不会退出

嘿家伙,我有一个小问题,我似乎无法弄清楚。 我正在保存一个DataGridView(它的内容)到一个xls文件。 除了我的任务pipe理器,我还没有遇到任何问题,它仍然显示它正在运行。 我曾打电话给: xlApp.Application.Quit() 这被宣布为: Dim xlApp As New excel.Application 这似乎不起作用,但这是我放弃,当我让用户select将其导出到Word文档的相同方式。 林不知道我要去哪里错了… 这是我完整的代码 Imports Word = Microsoft.Office.Interop.Word Imports Excel = Microsoft.Office.Interop.Excel Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load For x As Integer = 1 To 3500 DataGridView1.Rows.Add(New Object() {"r" & x.ToString & "c1", "r" & x.ToString […]

使用Office Interop将单元格写入Excel的最快方法?

我正在写一个函数来使用VB .NET中的Office Interop将数据导出到Excel中。 我目前正在使用Excel工作表的Cells()方法直接编写单元格: worksheet.Cells(rowIndex, colIndex) = data(rowIndex)(colIndex) 这对于大量的数据来说需要很长时间。 有没有更快的方法来写入大量的数据到Excel一次? 做一些范围会更快?

如何使用Telerik导出到Excel(XLSX)时解释集合?

情景 我正在使用Telerik UI For Windows窗体 。 我有一个RadGridView ,我代表一个名为MarketInfo的自定义types: Public NotInheritable Class MarketInfo … Public ReadOnly Property Participants As ReadOnlyCollection(Of ParticipantInfo) Get Return Me.GetParticipants() End Get End Property … End Class 它只包含文本和布尔值属性,而Participants属性则返回另一个自定义types的集合: Private Function GetParticipants(ByVal market As XElement) As ReadOnlyCollection(Of ParticipantInfo) Dim participantInfoList As New List(Of ParticipantInfo) For Each participantNode As XElement In market…<participant> participantInfoList.Add(New ParticipantInfo(participantNode)) […]

使用Interop从Excel中获取最后一个非空列和行索引

我试图从使用Interop库的Excel文件中删除所有多余的空行和列。 我跟着这个问题最快的方法来删除空行和列从Excel文件使用互操作 ,我觉得很有帮助。 但我有Excel文件包含一小部分的数据,但很多空行和列(从最后一个非空行(或列)到工作表的结尾) 我试着循环遍历行和列,但循环需要几个小时。 我想获得最后一个非空的行和列索引,所以我可以删除一行中的整个空范围 XlWks.Range("…").EntireRow.Delete(xlShiftUp) 注意:我试图让包含数据的最后一行删除所有额外的空白(在这一行或列之后) 有什么build议么?

如何处理来自embedded式Excel.OleObjects或Excel.Shapes的事件

我正在处理旧的VBA程序的C#和VB.NET端口。 它有很多MSForms/OleObjectsembedded在它像CommandButton甚至图像。 我的第一个想法是将所有的button声明为Microsoft.Vbe.Interop.Forms.CommandButton但是导致COMexception, System._COM type不能转换为…Forms.CommandButton 。 如果我尝试一个更通用的解决scheme版本,我没有find任何项目,如果我尝试通过所有的VBComponet s我注意到,他们都是workbook中的workbook ,但没有控制: foreach (VBComponent xxx in Globals.ThisWorkbook.VBProject.VBComponents) { Interaction.MsgBox(xxx.Name); Interaction.MsgBox(xxx.ToString); } 因此,所有这些控件都不在.VBComponets ,但是我可以在这个工作簿中find它们作为OLEobjects thisworkbook.worksheets(n).OLEobjects (这与我是thisworkbook.worksheets(n).OLEobjects ,但我可能并不了解系统开始)。 如何处理来自这样的对象的点击操作? 我假设我需要使用Excel.OLEObjectEvents_Event接口,但我似乎无法弄清楚如何。 如果我尝试使用delegates进行自定义事件,我似乎无法将它们分配给OleObjects 。 如果我使用ActionClickEventHandler.CreateDelegate我可以得到各种各样的错误,使我认为这是一个死胡同。 来自MS的官方文档似乎并没有什么帮助,尽pipe它向我介绍了我正在研究的Verb的概念 。 到目前为止,只有“应用程序启动失败”才产生COM错误。 即使只是试图使用两个标准事件之一, .GotFocus ,我总是拉一个0x80040200错误。 例: Excel.OLEObject ButtonCatcher = Globals.ThisWorkbook.Worksheets(1).OLEObjects("CommandButton1"); ButtonCatcher.GotFocus += CommandButton1_Click; 抛出一个Exception from HRESULT: 0x80040200的COMException Exception from HRESULT: 0x80040200在第二行。 该button被启用,这是我从办公室dev站点查找代码后检查。 在包含控件的工作表的代码中尝试更通用的方法 : object CommandButtonStart […]

使用Interop从Excel文件中删除空行和列的最快速的方法

我有很多包含数据的Excel文件,它包含空行和空列。 如下图所示 我正在尝试使用互操作从Excel中删除空行和列。 我创build了一个简单的winform应用程序,并使用下面的代码,它工作正常。 Dim lstFiles As New List(Of String) lstFiles.AddRange(IO.Directory.GetFiles(m_strFolderPath, "*.xls", IO.SearchOption.AllDirectories)) Dim m_XlApp = New Excel.Application Dim m_xlWrkbs As Excel.Workbooks = m_XlApp.Workbooks Dim m_xlWrkb As Excel.Workbook For Each strFile As String In lstFiles m_xlWrkb = m_xlWrkbs.Open(strFile) Dim m_XlWrkSheet As Excel.Worksheet = m_xlWrkb.Worksheets(1) Dim intRow As Integer = 1 While intRow <= m_XlWrkSheet.UsedRange.Rows.Count If […]

读取使用FileUpload Control上传的Excel文件,而不将其保存在服务器上

需要能够读取使用ASP.NET中的FileUploadControl上传的Excel文件。 该解决scheme将托pipe在服务器上。 我不想将Excel文件存储在服务器上。 我想直接将excel内容转换成数据集或数据表并利用。 下面是我已经find的两个解决scheme,但不会为我工作。 LINQTOEXCEL – 当你在本地机器上有一个excel文件,并且你正在本地机器上运行你的代码时,这种方法是有效的。 在我的情况下,用户正尝试使用托pipe在服务器上的网页从本地机器上传Excel文件。 ExcelDataReader – 我目前正在使用这个,但这是第三方工具。 我不能把这个移动到我们的客户。 另外,如果行/列交叉点正在携带一个公式,那么该行/列交集的数据不会被读入数据集。 我在google和StackOverflow上发现的大多数build议都是在Excel和.NET解决scheme都在同一台机器上时运行的。 但是在我的工作中,当解决scheme托pipe在服务器上时,我需要它来工作,并且用户正尝试使用本地机器上的托pipe网页来上传excel。 如果您有任何其他build议,可否请让我知道?