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文档不提示的主要内容,如果未能解决你的问题,请参考以下文章