VB.NET创建多工作表Excel时SaveAs保存代码报错咨询
问题根因
报错是两个问题叠加导致的:
- 重构代码把单工作表变量
oSheet拆分为oSheet1、oSheet2后,原保存逻辑里的oSheet变量没有对应定义,直接触发未定义对象错误 - 本质上初始方法调用逻辑就有误:
SaveAs是工作簿(Workbook,即你代码中定义的oBook对象)的方法,作用是保存整个Excel文件;工作表(Worksheet)是工作簿内的子元素,不具备保存整个多工作表文件的能力,就算oSheet变量存在,调用工作表的SaveAs也只会把单个工作表导出为独立新文件,不符合需求。
修复方法
直接把保存行的oSheet替换为已经实例化的工作簿对象oBook即可,不需要关联任何单个工作表对象。另外原代码的保存对话框筛选器存在拼写错误,把Execl修正为Excel避免显示异常。
修正后的完整保存逻辑代码:
Dim SaveFileDialog1 As New SaveFileDialog() SaveFileDialog1.Filter = "Excel files (*.xlsx)|*.xlsx" SaveFileDialog1.FilterIndex = 2 SaveFileDialog1.RestoreDirectory = True If SaveFileDialog1.ShowDialog() = DialogResult.OK Then ' 用工作簿对象调用SaveAs保存整个多工作表文件,第二个参数指定xlsx格式避免兼容提示 oBook.SaveAs(SaveFileDialog1.FileName, Excel.XlFileFormat.xlOpenXMLWorkbook) MsgBox("Excel File Created Successfully!") Else Return End If oBook.Close() oExcel.Quit() ' 建议追加COM对象释放逻辑,避免操作后Excel进程驻留后台 System.Runtime.InteropServices.Marshal.ReleaseComObject(oSheet1) System.Runtime.InteropServices.Marshal.ReleaseComObject(oSheet2) System.Runtime.InteropServices.Marshal.ReleaseComObject(oBook) System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel) oSheet1 = Nothing oSheet2 = Nothing oBook = Nothing oExcel = Nothing GC.Collect() GC.WaitForPendingFinalizers()
参考报错截图
内容的提问来源于stack exchange,提问作者Jiaxinxin25
相关产品推荐
相关产品推荐

