在VB.NET中使用Microsoft.Office.Interop.Excel保存/另存为.xls和 .xlt文件时无法完成,尽管信任中心中的文件阻止设置未勾选

编程语言 2026-07-09

我有一个用VB.NET开发的Windows窗体应用。我要打开一个Excel文件,通过添加新的工作表和数据来进行处理,然后使用 Microsoft.Office.Interop.Excel 将其保存。

除了 .xls.xlt 以外,其他Excel文件扩展名都按预期工作。对于这两个扩展名,应用程序会抛出如下错误:

错误: Exception from HRESULT: 0x800A03EC

该问题仅在MS Office 365版本中发生。在Excel 2024中按预期工作。

错误发生在以下代码行:

wb.SaveAs(pstrDestFileName, Excel.XlFileFormat.xlExcel8)

代码

VB.NET

Sub Main()

    Dim xlApp As New Microsoft.Office.Interop.Excel.Application

    Dim wb As Microsoft.Office.Interop.Excel.Workbook

    Try

        xlApp = CreateObject("Excel.Application")

        xlApp.Interactive = False

        xlApp.DisplayAlerts = False

        xlApp.EnableEvents = False

        Dim pstrSrcFileName = "C:\Files\Book1.xls"

        Dim pstrDestFileName = "C:\Files\einfotree Copy of Book1.xls"

        wb = xlApp.Workbooks.Open(pstrSrcFileName, False, False, , "", "", , , , , , , False)

        wb.SaveAs(pstrDestFileName, Excel.XlFileFormat.xlExcel8)

        wb.Close(False)

        xlApp.Quit()

    Catch ex As Exception

       '

    End Try

End Sub

注:是否在Microsoft Office的版本或安全设置中有变更,现限制使用Interop保存 .xls.xlt 文件?

回复前请务必查看该链接及所有评论,因为这是我在Microsoft Q&A上发布的同一问题。完整阅读讨论将有助于理解确切的问题并以正确的方向进行排查,从而避免多次来回的往返。

https://learn.microsoft.com/en-us/answers/questions/5883264/unable-to-save-saveas-xls-and-xlt-files-using-micr?page=1&orderby=Helpful&comment=answer-12761256&translated=false#newest-answer-comment

谢谢,

Akbar Husain。

解决方案

在Office 365里,有一个信任中心设置,你可以在其中定义信任哪些文件类型。我最近才注意到这一点(因为我需要打开一个非常旧的Excel 4工作簿),但我不能确定它是什么时候引入的,默认设置是否最近有变动。

你可以通过以下路径进入这些设置:

  • 文件 -> 选项
  • 信任中心 -> 信任中心设置
  • 文件阻止设置

Excel 信任中心的文件阻止设置

xls-files可以包含宏(你从外部看不出它们是否包含宏)。勾选“打开”或“保存”时,Excel会阻止你打开或保存这些文件,因此在我的情况下,允许打开xls文件。


更新 还没仔细查看链接的MS端页面,对此表示抱歉。因此我的回答基本上是在重复那点。

为了缩小问题范围:你有没有尝试用VBA直接完成同样的操作?

Sub testSaveAs()

    Const pstrSrcFileName = "C:\Files\Book1.xls"
    Const pstrDestFileName = "C:\Files\einfotree Copy of Book1.xls"

    Dim Wb As Workbook
    Set Wb = Workbooks.Open(pstrSrcFileName)
    Wb.SaveAs pstrDestFileName, xlExcel8
    Wb.Close False

End Sub

如果这不起作用,问题在Excel端。如果它能工作但你的VB.NET代码不行,那就可能与Office自动化有关。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章