在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有时会无效?的主要内容,如果未能解决你的问题,请参考以下文章

vb.net怎么访问excel表格

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