目录
代码实现平台:
vs2015+4.0 运行库
Log函数为自编函数,代码未给出,请谅解。
''' <summary>
'''office97 8.0
'''office2000 9.0
'''officeXP (2002) 10.0
'''office2003 11.0
'''office2007 12.0
'''office2010 14.0
'''根据系统安装的Excel(Excel或者wps)创建Excel对象
''' 一定要先et 然后在ket 最后才是excel
''' 在系统中,office excel 比wps 表格具有优先级或者是注册表里面某项决定的
''' </summary>
''' <param name="xlApp"></param>
''' <param name="ISAM">索引顺序访问方法</param>
''' <param name="filter">文件后缀</param>
''' <returns></returns>
Private Function CreateExcelObject(ByRef xlApp As Object, ByRef ISAM As String, ByRef filter As String) As Boolean
Dim xlappVersion As Double = 0.0
Dim funcResult As Boolean = False
Try
xlApp = CreateObject("ET.Application")
Catch ex As Exception
Debug.Print($"错误代码:{Err.Number}{Environment.NewLine}错误描述:{Err.Description}")
Debug.Print($"问题描述:{Environment.NewLine}{ex.Message}{Environment.NewLine}具体信息:{Environment.NewLine}{ex.StackTrace}")
Log($"问题描述:{Environment.NewLine}{ex.Message}{Environment.NewLine}具体信息:{Environment.NewLine}{ex.StackTrace}")
End Try
If xlApp Is Nothing Then
Try
xlApp = CreateObject("KET.Application")
Catch ex As Exception
Debug.Print($"错误代码:{Err.Number}{Environment.NewLine}错误描述:{Err.Description}")
Debug.Print($"问题描述:{Environment.NewLine}{ex.Message}{Environment.NewLine}具体信息:{Environment.NewLine}{ex.StackTrace}")
Log($"问题描述:{Environment.NewLine}{ex.Message}{Environment.NewLine}具体信息:{Environment.NewLine}{ex.StackTrace}")
End Try
End If
If xlApp Is Nothing Then
Try
xlApp = CreateObject("Excel.Application")
Catch ex As Exception
Debug.Print($"错误代码:{Err.Number}{Environment.NewLine}错误描述:{Err.Description}")
Debug.Print($"问题描述:{Environment.NewLine}{ex.Message}{Environment.NewLine}具体信息:{Environment.NewLine}{ex.StackTrace}")
Log($"问题描述:{Environment.NewLine}{ex.Message}{Environment.NewLine}具体信息:{Environment.NewLine}{ex.StackTrace}")
End Try
End If
If xlApp Is Nothing Then
Debug.Print($"来源:{New StackTrace().GetFrame(0).GetMethod.Name} 获取Excel或者WPS对象失败")
Return funcResult
End If
xlApp.Visible = False
xlappVersion = Convert.ToDouble(xlApp.version)
Select Case xlappVersion
Case <= 11.0#
filter = ".xls"
ISAM = "Excel 8.0"
funcResult = True
Case > 11.0#
filter = ".xlsx"
ISAM = "Excel 12.0 Xml"
funcResult = True
Case Else
Debug.Print($"来源:{New StackTrace().GetFrame(0).GetMethod.Name} 获取Excel或者WPS对象失败")
End Select
Debug.Print($"来源:{New StackTrace().GetFrame(0).GetMethod.Name} 获取Excel或者WPS对象成功")
Return funcResult
End Function
调用
Dim xlApp As Object = Nothing
Dim excelFilter As String = ""
Dim excelISAM As String = ""
'后期绑定Excel对象 不需要知道系统安装的是哪个版本的Excel
'不需要引用Excel
If CreateExcelObject(xlApp, excelISAM, excelFilter) = False Then
MessageBox.Show("本机未安装Excel或者WPS,导出失败!", "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
Exit Sub
End If
异常处理
另外,有时候操作excel会提示 “类 Workbook 的 SaveAs 方法无效”错误。
这个错误通常是电脑同时安装了低版本office excel(如2003)和高版本wps(如最新版2016)导致的。
如果你用保存的代码是
If xlApp.Version > 11# Then
xlBook.SaveAs xlsFileName, 51
ElseIf xlApp.Version <= 11# Then
xlBook.SaveAs xlsFileName, 56
End If
请改成,系统会自动帮你保存文件为当前所用 Excel 版本的格式
If xlApp.Version > 11# Then
xlsFileName = xlsFileName & ".xlsx"
ElseIf xlApp.Version <= 11# Then
xlsFileName = xlsFileName & ".xls"
End If
xlBook.SaveAs(xlsFileName)
参考
Worksheet.SaveAs 方法 详细用法请看
https://msdn.microsoft.com/zh-cn/library/ff195820(v=office.15).aspx