机房系统——导出excel表

来源:互联网 发布:邮件服务器25端口不通 编辑:程序博客网 时间:2024/05/19 18:17

查询窗体弄出来了,看了网上的一些代码,也写完代码了,可就是不能运行,问题请看下图:

这里写图片描述

然后我再看看明明定义了啊,为什么还是不行,后来想起来了,可能是没有引用某些东西,然后我就上网查,结果还是不错的,查到了,说是让我引用Microsoft Excel 11.0 Object Library这玩意,当然11.0是版本号,这个我还是清楚的,我安装的office是2016的(也就是我得引用Microsoft Excel 16.0 Object Library),所以我就去找,可是心凉了,竟然没有这一条,我好歹也是安装office了的,怎么这么不给面子。

这里写图片描述

然后继续搜吧,最后总算是解决了,下面来看看步骤吧:

在引用的界面点击浏览,找到Windows office的安装路径(主要是Excel应用程序的安装路径,请参考我的路径:C:\Program Files\Microsoft Office\root\Office16),文件类型选择可执行文件”.exe;.dll”(一定要选这个,因为后边我们需要找”excel.exe”,它属于执行文件,不选指定没有),然后再找到”excel.exe”,打开就可以了。

这里写图片描述

最后你就会发现引用窗体中出现了Microsoft Excel 16.0 Object Library这玩意,神奇不。(总算解决了哈哈,开心)

这里写图片描述

下面是查询和导出excel的代码:

Private Sub cmdExportExcel_Click()    Dim xlsapp As Excel.Application                 '声明excel对象    Dim xlsbook As Excel.Workbook                   '声明工作簿对象    Dim xlssheet As Excel.Worksheet                 '声明工作表    Dim j As Long    Dim i As Long    Set xlsapp = CreateObject("excel.application")  '创建应用程序    Set xlsbook = xlsapp.Workbooks.Add              '创建新的空白工作簿    Set xlssheet = xlsbook.Worksheets(1)            '设置应用表    With xlsapp         .Rows(1).Font.Bold = True                  '设置字体格式    End With    '将MSFlexGrid1的内容导入到电子表格中    For i = 0 To MSFlexGrid1.Rows - 1               '通过循环来添加控件中的数据到Excel表中        For j = 0 To MSFlexGrid1.Cols - 1           '由于第一行是表头,所以添加数据从第二行开始。            xlssheet.Cells(i + 1, j + 1) = "'" & MSFlexGrid1.TextMatrix(i, j)   '因为Excel表从第一行第一列开始,而MSFlexGrid1从第0行第0列开始,所以需要加1        Next j    Next i    xlsapp.Visible = True                           '显示excel表格End SubPrivate Sub cmdInquiry_Click()    Dim txtSQL As String    Dim MsgText As String    Dim mrc As ADODB.Recordset    '判断卡号是否为空    If Trim(txtCardNo.Text) = "" Then        MsgBox "卡号不能为空", vbOKOnly + vbExclamation, "提示"        txtCardNo.SetFocus        Exit Sub    End If    '判断卡号是否为数字    If Not IsNumeric(Trim(txtCardNo.Text)) Then        MsgBox "卡号请输入数字!", vbOKOnly + vbExclamation, "提示"        txtCardNo.Text = ""        txtCardNo.SetFocus        Exit Sub    End If    txtSQL = "select * from line_info where cardno='" & txtCardNo.Text & "'"    Set mrc = ExecuteSQL(txtSQL, MsgText)    If mrc.EOF = True Then        MsgBox "没有此卡号,请重新输入!", vbOKOnly + vbExclamation, "提示"        mrc.Close        Exit Sub    End If    Do While Not mrc.EOF        If IsNull(mrc!offdate) = False Then            mrc!offdate = ""        End If    With MSFlexGrid1        .Rows = .Rows + 1        .CellAlignment = 8        .TextMatrix(1, 0) = mrc!cardNo        .TextMatrix(1, 1) = mrc!studentNo        .TextMatrix(1, 2) = mrc!ondate        .TextMatrix(1, 3) = mrc!OnTime        .TextMatrix(1, 4) = mrc!offdate        .TextMatrix(1, 5) = mrc!offtime        .TextMatrix(1, 6) = mrc!Cash        .TextMatrix(1, 7) = mrc!Status        End With        mrc.MoveNext    Loop        cmdExportExcel.Enabled = TrueEnd SubPrivate Sub Form_Load()    cmdExportExcel.Enabled = False    With MSFlexGrid1        .CellAlignment = 8        .TextMatrix(0, 0) = "卡号"        .TextMatrix(0, 1) = "姓名"        .TextMatrix(0, 2) = "上机日期"        .TextMatrix(0, 3) = "上机时间"        .TextMatrix(0, 4) = "下机日期"        .TextMatrix(0, 5) = "下机时间"        .TextMatrix(0, 6) = "消费金额"        .TextMatrix(0, 6) = "余额"        .TextMatrix(0, 7) = "备注"    End WithEnd SubPrivate Sub cmdExit_Click()    Unload MeEnd Sub

温馨提示:由于我们很多窗体都需要导出Excel表,所以我没有必要每个窗体都敲一遍这个代码,我们应该在模块中写一个导出Excel表的公共函数,然后需要的只需调用一下就好了,是不是省事多了。这个时候可能会有人说不用每个都敲,我们只要敲一个,剩下的只需复制就好了,如果这么想的可真就有点“傻”了,因为我们编写程序的时候,遇到能够复制粘贴的代码,就代表代码冗余了,所以任何事情任何东西都不能想的太简单,肯定会有简单的方法等着我们去发现!我在模块中弄得时候出现Bug了,如果哪位大佬会的话,记得指点我一下,留言或者通过“联系我”的栏目中的联系方式告诉我,万分感谢!