如何在不保存Word文档的情况下,从C#和自动化设置文件名。

6
我使用c# (.net4)的office互操作功能自动化生成word文档并通过邮件合并。合并工作正常,用户能按照自己的需求收到所创建的文档。到目前为止,一切都很好。
现在客户要求,在尝试保存生成的文件(通过“另存为”对话框)时,文档的文件名已经填好。我已经尝试了一些明显的事情,如设置Document实例的Name属性和其他属性,并且我也通过谷歌搜索寻找可行的解决方案,但到目前为止,我还没有能够在不进行保存的情况下设置Word文件的文件名。
是否有人知道如何实现这一点?如果可以实现,客户应该会非常高兴,而我已经花费了很多时间(我必须承认,Word自动化是我没有太多经验的领域)。

@Oded:你是指System.IO.File.Move吗?如果是的话:文件还不存在,它是邮件合并的结果,并且未保存。或者是我误解了你的建议? - HCL
不,你理解得很正确。我只是不确定文件是否已经存在。 - Oded
你看过Document.SaveAs了吗? - Oded
@Oded:将文件保存到临时位置,并定义文件名?我会尝试,但我担心保存操作不再显示保存文件对话框(按下保存或按ctrl-s键),这并不是期望的行为。预填的文件名只应该是对用户的建议。或者你知道如何阻止这种行为的选项吗?如果有,这将是一个解决方案! - HCL
@Oded:SaveAs有我担心的负面影响。很遗憾,这似乎不是一个可行的解决方案。但还是谢谢! - HCL
显示剩余2条评论
2个回答

7

如果您设置文档的Title属性,在选择保存时,将使用该文档名称。您还可以设置默认保存位置。在VBA中:

Set doc = ActiveDocument

sTitle = doc.BuiltInDocumentProperties("Title").Value
doc.BuiltInDocumentProperties("Title").Value = "A different title"

然而,这只适用于第二次(及以后)保存尝试。如果没有,则第一次尝试将始终使用模板中的标题或文档第一行的内容。请参见本答案末尾以获取更好的解决方案。
请注意,在“另存为”之前,您必须对文档进行一些更改,以使新标题生效。
Sub SetSummaryInfo()
Dim dp As Object
Dim sTitle As String
    If Documents.Count > 0 Then
       Set dp = Dialogs(wdDialogFileSummaryInfo)
       ' Retrieve value of "Title" into a variable.
       sTitle = dp.Title
       ' Set "Title" to a new value.
       dp.Title = "My Title"
       ' Set the value without showing the dialog.
       dp.Execute
       ' Save the changes
       'ActiveDocument.Save
    End If
End Sub

如HCL在C#中所述,您可以使用以下代码设置默认文件名(仅限对话框):

dynamic dialog = wordApp.Dialogs[WdWordDialog.wdDialogFileSummaryInfo]; 
dialog.Title = "MyTitle"; 
dialog.Execute();

这将打开标准的“另存为”对话框,设置默认文件名(不是您从“标题”属性所期望的内容,但这就是它的作用),并打开对话框。


"Selection.TypeText Text:=" " "是最小的更改。确保您在文档末尾。" - Fionnuala
谢谢,但遗憾的是这不适用于更改(Word 2010)。但我会进一步尝试,也许我犯了错误,我在自动化方面还是个新手。 - HCL
是的,我也观察到了这一点,但是到目前为止,我还没有找到通过自动化应用更改的可能性。即使调用撤消然后重做也不能应用! - HCL
好的,我想我有了。上面的第二个选项可以直接使用,即使是空白文档也可以。 - Fionnuala
2
+1 这太棒了!你帮我省了很多时间去搜索(而且我可能找不到解决方案)。非常感谢你!这是 C# 代码,我花了一段时间才找到它,对我来说并不是很明显。也许你可以把它整合到你的答案中?动态对话框 = wordApp.Dialogs[WdWordDialog.wdDialogFileSummaryInfo]; 对话框.Title = "我的标题"; 对话框.Execute(); - HCL
显示剩余2条评论

0

是的,使用特定文件名保存不是问题。问题在于,文件不能被保存,但如果客户按下ctrl-s,则保存文件对话框应该已经填好了文件名。无论如何,还是感谢您的回答。 - HCL
如果你是指下载文件的文件名,那么你应该查看响应头"content-disposition"。我希望这次我理解你的意思了。 - Germann Arlington

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接