在windows 7 下Excel 2007 VBA中的命令SendKeys有时会无效?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在windows 7 下Excel 2007 VBA中的命令SendKeys有时会无效?相关的知识,希望对你有一定的参考价值。
今天确认了一下,在windows 7 下Excel 2007 VBA中的命令SendKeys有时会无效,但这是为什么呢?我能手动模拟按键,用VBA执行时却执行不到,而且不会报错,有人知道这是为什么么?听说vista下,用Sendkeys有时也会无效,但我没确认过。
excel中的VBA的sendkeys应该只能在excel中使用,不能用在其他软件上的 参考技术A 我来学习一下,呵呵如何在未安装 office 的情况下从 winform vb.net 2008 导出到 excel?
【中文标题】如何在未安装 office 的情况下从 winform vb.net 2008 导出到 excel?【英文标题】:How to export to excel from a winform vb.net 2008 without office installed? 【发布时间】:2010-11-26 23:28:13 【问题描述】:我正在使用 Visual Basic (Visual Studio 2008) 构建一个 Windows 窗体应用程序。
这个想法是查询一个 MySQL 数据库并将结果导出到一个 excel 文档。
我设法使用这段代码做到了这一点(我将只显示导出到 excel 部分):
Imports Excel = Microsoft.Office.Interop.Excel
Imports System.IO
Imports System.Data
Imports MySql.Data.MySqlClient
Imports System.Configuration
Imports System.Runtime.InteropServices
Private Sub btn_getReport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_getReport.Click
Dim wb As Excel.Workbook
Dim ex As New Excel.Application
wb = ex.Workbooks.Add(System.Reflection.Missing.Value)
Dim sheet As Excel.Worksheet = CType(wb.Worksheets.Add, Excel.Worksheet)
sheet.Name = "algo"
Dim i As Integer = 1
Try
While reader.Read
sheet.Cells(i, 1) = CStr(reader.Item(0))
sheet.Cells(i, 2) = CStr(reader.Item(1))
sheet.Cells(i, 3) = CStr(reader.Item(2))
i += 1
End While
Catch MyEx As MySqlException
RaiseEvent MySqlError(Err, MyEx, "read")
Catch exc As Exception
RaiseEvent MySqlError(Err, exc, "read")
End Try
Dim dialog As New SaveFileDialog
Dim result As DialogResult = dialog.ShowDialog
Try
wb.SaveAs(dialog.FileName)
Catch exerr As Exception
End Try
'Show the spreadsheet.
'ex.Visible = True
'wb.Activate()
End Sub
它在我的笔记本电脑(安装了 office 2003)上运行良好,但是当我创建安装包并将其安装在我要使用它的服务器上(没有安装 office)时,我得到了这个错误:
"正在检索 COM 类工厂 具有 CLSID 的组件 00024500-0000-0000-C000-000000000046 由于以下错误而失败: 80040154。”
对于我所阅读的内容,这是在计算机上不存在时尝试使用 excel 时出现的问题,我可以理解,真正让我感到困惑的是,我使用了将信息导出到 excel 的应用程序,甚至在计算机上运行没有安装办公室,他们怎么能这样做?
为了记录,我需要 excel 文件,而不是 CSV。
非常感谢。
【问题讨论】:
查看这个问题以获得一些想法:***.com/questions/1369361/…> 【参考方案1】:您已经完全正确地诊断了问题。这就是好消息。坏消息是,如果机器上未安装 Excel DLL,您将无法使用 Excel 互操作。
您的选择:
-
在计算机上安装 Excel
这将运行。
拉取 DLL(库)并部署
他们与您的应用程序。在
这样做,你可能违反了
与 Microsoft 的许可协议。
这样做需要您自担风险。
以 Office 2007 使用的 Open XML 格式手动创建 Excel 电子表格。
要执行选项三,请查看本文中 Excel 2007 的格式:http://msdn.microsoft.com/en-us/library/aa338205.aspx
简而言之,您会将数据读入数据集。然后将其导出为 XML 文件。将该文件连同任何支持信息一起填充到一个 zip 文件中,并将扩展名更改为 .xlsx。它比这要复杂一些,但并不多。
【讨论】:
感谢您的帮助。关于三个选项:1-由于许可问题,我无法在服务器上安装 Excel,2-同上,3-我必须使用 Excel 2003,第一个解决方案似乎更简单,至少对于我现在需要完成的事情.非常感谢您详细而清晰的回答。 酷!很高兴你能得到一些帮助。 :-)【参考方案2】:如果您真的想避免导出到逗号或制表符分隔文件的简单方法,excel 可以完美处理...
...然后通过生成 xml/使用 xsl 导出为 Excel-XML 格式 (spreadsheetml)。您可以找到example here。应该在 Excel 2002+ 上工作。
【讨论】:
感谢您的帮助,但我发现上述解决方案更易于实施。非常感谢!【参考方案3】:SpreadsheetGear for .NET 可以导出 Excel 文件,适用于包括 WinForms 在内的任何 .NET 解决方案,并且不需要安装 Excel。
您可以查看实时示例here 并下载免费试用版here。
免责声明:我拥有 SpreadsheetGear LLC
【讨论】:
以上是关于在windows 7 下Excel 2007 VBA中的命令SendKeys有时会无效?的主要内容,如果未能解决你的问题,请参考以下文章
windows7如何在右键新建菜单里添加excel2007怎么添加呀
如何在未安装 office 的情况下从 winform vb.net 2008 导出到 excel?
C#:Excel 2007 插件,如何挂钩 Windows 激活和停用事件
VB6的MSCOMCTL.OCX控件(Microsoft Windows Common Controls 6.0)不能用了,怎样解决?
win7下C#读取Excel2007,总是报错: 检索 COM 类工厂中 CLSID 为 00024500-0000-0000-C000-000000000046