如何在不保存c#和自动化的情况下设置word文档的文件名

HCL*_*HCL 4 .net ms-word mailmerge office-interop

我通过自动化和mailmerge与c#(.net4)的办公室Interop创建word文档.合并效果很好,用户可以根据需要接收创建的文档.到目前为止一切都很好.客户端现在请求,如果他试图保存生成的文件(通过保存文件对话框),则文件的文件名已经预先填写.

我已经尝试了一些显而易见的事情,比如设置Document-instance的Name属性和其他属性,我也搜索了一个解决方案,但到目前为止,我无法设置word文件的文件名(不保存)它).

有人知道如何实现这一目标吗?我觉得客户会非常高兴,如果它能工作,我也花了很多时间在这上面(我必须承认,自动化是一件我没有太多经验的事情).

Fio*_*ala 5

如果设置文档的Title属性,则选择"另存为"时,即将使用的文档名称.您还可以设置默认保存位置.在VBA中

Set doc = ActiveDocument

sTitle = doc.BuiltInDocumentProperties("Title").Value
doc.BuiltInDocumentProperties("Title").Value = "A different title"
Run Code Online (Sandbox Code Playgroud)

但是,这仅适用于第二次(以及稍后)保存尝试.第一次尝试将始终使用模板中的标题(如果有)或文档第一行中的内容(如果没有).请参阅本答案的结尾以获得更好的解决方案.

但请注意,在"另存为"之前必须对文档进行一些更改才能使新标题生效.

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
Run Code Online (Sandbox Code Playgroud)

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

dynamic dialog = wordApp.Dialogs[WdWordDialog.wdDialogFileSummaryInfo]; 
dialog.Title = "MyTitle"; 
dialog.Execute();
Run Code Online (Sandbox Code Playgroud)

这将打开标准的"另存为"对话框,设置默认文件名(不是您对"标题"属性的期望,而是它的作用),然后打开对话框.

  • +1 这太棒了!您为我节省了大量搜索时间(可能我找不到解决方案)。非常感谢!这里c#中的代码,我搜索了一下,对我来说,不是很明显。也许你把它整合到你的答案中?动态对话框 = wordApp.Dialogs[WdWordDialog.wdDialogFileSummaryInfo]; dialog.Title = "MyTitle"; dialog.Execute(); (2认同)