• 主页
  • VBS
  • .NET技术
  • VBA
  • VB网络编程
  • VB多媒体
  • VB数据库
  • VB控件
  • VB COM/DCOM
  • VB基础类
  • VB API
sg_linfeng 04月12日
各位大神们,麻烦帮我看看自开发Windows服务不能导出Excel文档的的问题
各位大神们,我想做一个Windows服务,可以定时导出Excel文档,但现在遇到了不能保存的瓶颈。
在我自己的笔记本电脑上加载服务、导出Excel文档一点问题都没有,我的笔记本电脑的系统是Windows7 Pro,用的是VS2008(用vb语言)写的代码,安装MS Office 2013中文版,但把这个服务的文件放到别的的机子,有Windows 7 Pro、Windows Server 2008 R2、Windows Server 2012 R2,都报错
我把Dcom里的Excel Application都按照我笔记本里的设置一模一样的进行了设置,也在网上找了一些解决的方法,但现在代码执行到保存工作表时报错。
---------------------------------------------------------------------------------------------------------------------------------
无法启动服务。System.Runtime.InteropServices.COMException (0x800A03EC): 异常来自 HRESULT:0x800A03EC
在 Microsoft.Office.Interop.Excel._Worksheet.SaveAs(String Filename, Object FileFormat, Object Password, Object WriteResPassword, Object ReadOnlyRecommended, Object CreateBackup, Object AddToMru, Object TextCodepage, Object TextVisualLayout, Object Local)
在 ServiceTest.ServiceTest.ExcelTest() 位置 E:\软件\ServiceTest\ServiceTest\ServiceTest.vb:行号 50
在 ServiceTest.ServiceTest.OnStart(String[] args) 位置 E:\软件\ServiceTest\ServiceTest\ServiceTest.vb:行号 66
在 System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)

---------------------------------------------------------------------------------------------------------------------------------
这样我先上代码,麻烦各位大神们帮我看一下,代码是否有问题,
Option Explicit On

Imports Microsoft.Office.Interop

Public Class ServiceTest

Private Sub ExcelTest()
Dim xlApp As Excel.Application
Dim xlWorkBook As Excel.Workbook
Dim xlWorkSheet As Excel.Worksheet

xlApp = New Microsoft.Office.Interop.Excel.Application
xlApp.DisplayAlerts = False
xlApp.SheetsInNewWorkbook = 1
xlApp = CreateObject("Excel.Application") '备注1:如果不加入这句和下句代码会
xlApp.DefaultSaveFormat = Excel.XlFileFormat.xlExcel8 '备注1:在xlWorkBook = xlApp.Workbooks.Add报错
xlWorkBook = xlApp.Workbooks.Add '备注1:稍后我把报错信息附在后面。
xlWorkSheet = xlWorkBook.Sheets.Item(1)

With xlWorkSheet
.Activate()
.Name = "进厂物料总帐"

.Cells.Select()
.Cells.NumberFormatLocal = "@"
.Cells.VerticalAlignment = Excel.Constants.xlCenter
.Cells.HorizontalAlignment = Excel.Constants.xlCenter
.Cells.WrapText = True
.Cells.Font.Size = 11
.Cells.Font.Name = "宋体"

.PageSetup.Orientation = Excel.XlPageOrientation.xlLandscape
.PageSetup.LeftMargin = xlApp.InchesToPoints(0.31496062992126)
.PageSetup.RightMargin = xlApp.InchesToPoints(0.31496062992126)
.PageSetup.CenterHorizontally = True
.PageSetup.Zoom = 96
.PageSetup.PrintTitleRows = "$1:$5"

.Range("A2:N2").Merge()
.Range("A2").RowHeight = 26.25
.Range("A2").Font.Size = 16
.Range("A2").Font.Bold = True
.Cells(2, 1) = "进厂物料总帐"

.Range("A3:C3").Merge()
.Range("A3").RowHeight = 12.75
.Range("A3").HorizontalAlignment = Excel.Constants.xlLeft
.Cells(3, 1) = "年度:" & Year(DateTime.Now).ToString.Trim & "年"

.SaveAs("C:\1.xlsx") '备注2:如果程序正常执行至这句代码后也会报错,
'也尝试过在其后面对应的加入参数都是报一样的错错误
'我也试过把这段代码放到Windows窗体里执行是没有任何的错误的,直接就导出数据,
'也不需要在SaveAs后面加入参数,只需要给个保存的路径和文件名就可以了
'.SaveAs(Filename:="c:\ST\1.xls", FileFormat:=Excel.XlFileFormat.xlOpenXMLWorkbook, CreateBackup:=False)
End With

'xlWorkBook.SaveAs("C:\1.xlsx", Excel.XlFileFormat.xlWorkbookNormal, Type.Missing, Type.Missing, False, False, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing)

xlWorkBook = Nothing
xlApp.Application.Workbooks.Close()
xlApp.SheetsInNewWorkbook = 3
xlApp.Quit()
xlApp = Nothing
End Sub

Protected Overrides Sub OnStart(ByVal args() As String)
ExcelTest()
End Sub
End Class


【备注1】报错信息(未加xlApp = CreateObject("Excel.Application") 和xlApp.DefaultSaveFormat = Excel.XlFileFormat.xlExcel8这两句代码就在 xlWorkBook = xlApp.Workbooks.Add 处报错):
---------------------------------------------------------------------------------------------------------------------------------
无法启动服务。System.Runtime.InteropServices.COMException (0x800A03EC): 内存或磁盘空间不足,Microsoft Excel 无法再次打开或保存任何文档。

• 要想获得更多的可用内存,请关闭不再使用的工作簿或程序。

• 要想释放磁盘空间,请删除相应磁盘上不需要的文件。
在 Microsoft.Office.Interop.Excel.Workbooks.Add(Object Template)
在 ServiceTest.ServiceTest.ExcelTest() 位置 F:\Work Documents\ServiceTest\ServiceTest\ServiceTest.vb:行号 16
在 ServiceTest.ServiceTest.OnStart(String[] args) 位置 F:\Work Documents\ServiceTest\ServiceTest\ServiceTest.vb:行号 62
在 System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)

---------------------------------------------------------------------------------------------------------------------------------

【备注2】报错信息(如果已加xlApp = CreateObject("Excel.Application") 和xlApp.DefaultSaveFormat = Excel.XlFileFormat.xlExcel8这两句代码后,在xlWorkSheet.SaveAs("C:\1.xlsx") 处报错 )
---------------------------------------------------------------------------------------------------------------------------------
无法启动服务。System.Runtime.InteropServices.COMException (0x800A03EC): 异常来自 HRESULT:0x800A03EC
在 Microsoft.Office.Interop.Excel._Worksheet.SaveAs(String Filename, Object FileFormat, Object Password, Object WriteResPassword, Object ReadOnlyRecommended, Object CreateBackup, Object AddToMru, Object TextCodepage, Object TextVisualLayout, Object Local)
在 ServiceTest.ServiceTest.ExcelTest() 位置 E:\软件\ServiceTest\ServiceTest\ServiceTest.vb:行号 50
在 ServiceTest.ServiceTest.OnStart(String[] args) 位置 E:\软件\ServiceTest\ServiceTest\ServiceTest.vb:行号 66
在 System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)

---------------------------------------------------------------------------------------------------------------------------------

在我笔记本电脑上直接启动服务一切正常实现Excel文档的导出,但放到别的机子上就不可以,我也尝试过在这些机子上安装VS的环境,都不行,都是一启动服务就报错,该设置的地方(DCOM里的Excel Application、文件夹的权限、服务的登陆身份试过用本地登陆和此帐户(指定帐户和本地服务)登陆都不行。

请各位大神们,帮我看看这是哪个环节出现问题,谢谢!

...全文
225 点赞 收藏 4
写回复
4 条回复

还没有回复,快来抢沙发~

发动态
发帖子
VB
创建于2007-09-28

1.1w+

社区成员

11.0w+

社区内容

VB技术相关讨论
社区公告
暂无公告