VB.Net保存word文档不提示

Posted

技术标签:

【中文标题】VB.Net保存word文档不提示【英文标题】:VB.Net saving word document without prompt 【发布时间】:2015-07-20 22:15:24 【问题描述】:

提前感谢您能给我的任何帮助。

我正在尝试创建一个 VB 应用程序,该应用程序将打开现有的 Word 文档,进行一些更改并使用新文件名保存它。对文档进行更改很容易。保存文档似乎应该同样简单,但存在一个严重的问题。当我尝试保存文档时,将打开另存为对话框。这应该是自动化的,因此不起作用。我已经尝试了一大堆变体:

Sub Main()
    Dim oWord As Word.Application
    Dim oDoc As Word.Document
    Dim fileName As String
    Dim templateName As String
    Dim newFileName As String

    'Start Word and open the document template.
    oWord = CreateObject("Word.Application")
    oWord.Visible = False
    oWord.DisplayAlerts = Word.WdAlertLevel.wdAlertsNone

    templateName = "C:\tmp\template.dotx"
    fileName = "C:\tmp\document.docx"
    newFileName = "C:\tmp\new document.docx"

    oDoc = oWord.Documents.Add(templateName)
    'oDoc = oWord.Documents.Open(fileName)  I have tried both using a template and opening a docx file.

    <make changes>

    oDoc.SaveAs2(newFileName)

    oWord.Documents.Close(Word.WdSaveOptions.wdDoNotSaveChanges)
    oWord.Application.Quit()
    oWord = Nothing
End Sub

它总是停在这里:

oDoc.SaveAs2

并打开另存为对话框。我需要找到一种方法来抑制另存为对话框或编辑word文件的新方法。到目前为止,我发现的有关该问题的所有内容要么尚未解决/更新,要么与 Word 插件有关。我没有任何人们所说的导致问题的插件。为了安全起见,我禁用了所有单词插件。

如果有人解决了它或有不同的方法,我将不胜感激。我不拘泥于使用 VB 的想法。我走这条路的唯一原因是因为我认为它为我提供了用于编辑图表和格式化文档的最佳库。

谢谢,史蒂夫

【问题讨论】:

文档是本地的还是网络路径上的?在尝试保存之前确定它没有被使用吗? 在 excel 中设置 application.displayalerts = false 并在 saveas 提示中指定一个冲突解决方案值。我会怀疑 word 有类似的东西 @Saragis 该文件是本地的。它没有使用。新文件名是一个随机的 UUID,所以我确定它不存在。 @Greg 我正在设置 DisplayAlerts = False。我也尝试将其他属性设置为 false; SaveNormalPrompt = False 和 SavePropertiesPrompt = False。没有 conflictResolution 参数。我已经尝试为 SaveAs 和 SaveAs2 的所有可选参数输入值 【参考方案1】:

我发现了问题。答案在于我在我省略了对文档进行更改的部分中所做的事情。这些更改的一部分是更新文档中图表中的数据。我有类似的东西:

For Each oShape As Word.InlineShape In oDoc.InlineShapes
    If oShape.HasChart And oShape.Range.Bookmarks.Item(1).Name = "ChartName" Then
        Console.WriteLine("Updating ChartName")
        Dim oWorkbook As Excel.Workbook
        oWorkbook = oShape.Chart.ChartData.Workbook

        oWorkbook.Worksheets(1).Range("B2").FormulaR1C1 = "9"
        oWorkbook.Worksheets(1).Range("B3").FormulaR1C1 = "5"
        oWorkbook.Worksheets(1).Range("B4").FormulaR1C1 = "1"

        oWorkbook.Application.Quit()

    End If
Next

我改成:

For Each oShape As Word.InlineShape In oDoc.InlineShapes
    If oShape.HasChart And oShape.Range.Bookmarks.Item(1).Name = "ChartName" Then
        Console.WriteLine("Updating ChartName")
        Dim oWorkbook As Excel.Workbook
        oWorkbook = oShape.Chart.ChartData.Workbook

        oWorkbook.Worksheets(1).Range("B2").FormulaR1C1 = "9"
        oWorkbook.Worksheets(1).Range("B3").FormulaR1C1 = "5"
        oWorkbook.Worksheets(1).Range("B4").FormulaR1C1 = "1"

        oShape.Chart.Refresh()
        oWorkbook.Close(True)

    End If
Next

现在可以了

【讨论】:

【参考方案2】:
myDoc.SaveAs(fileNameAndPath)

在 Word 2007 中为我工作

【讨论】:

谢谢,格雷格。不幸的是,它不适用于 Word 2013。

以上是关于VB.Net保存word文档不提示的主要内容,如果未能解决你的问题,请参考以下文章

C#/VB.NET 删除Word文档中的水印

C#/VB.NET 如何在 Word 文档中添加页眉和页脚

C#/VB.NET 添加多行多列图片水印到Word文档

VB.NET Word 自动化:如何插入文件并保留格式

C#/VB.NET Word转Text

我的word打开的时候总是提示超链接不可用,怎么回事???