2015-07-20 137 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 

現在,它的工作原理