2015-07-20 138 views
4

在此先感谢您提供的任何帮助。VB.Net保存word文档没有提示

我试图创建一个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的想法。我走这条路线的唯一原因是因为我认为它给了我编辑图表和格式化文档的最佳库。

谢谢你,史蒂夫

+0

是该文件的本地或网络路径上?您确定在保存之前没有使用它吗? – Saragis

+0

在excel中,您设置application.displayalerts = false并在saveas提示符中指定conflictResolution值。我会怀疑类似的字 – Greg

+0

@Saragis该文件是本地的。它没有被使用。新的文件名是一个随机的UUID,所以我确定它已经不存在了。 – stevepra

回答

0
myDoc.SaveAs(fileNameAndPath) 

在Word 2007

+0

谢谢,Greg。不幸的是,它在Word 2013中不适合我。 – stevepra

2

对我的作品,我发现这个问题。答案在于我在我正在做的部分中,我省略了对文档进行更改的地方。部分更改是更新文档中图表中的数据。我有这样的事情:

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 

现在,它的工作原理