【问题标题】:How to set the file name of a word document without saving it from c# and automation如何在不从 c# 和自动化中保存的情况下设置 word 文档的文件名
【发布时间】:2019-02-15 18:51:49
【问题描述】:

我使用 c# (.net4) 的 office Interop 通过自动化和邮件合并创建 Word 文档。合并效果很好,用户可以根据需要接收创建的文档。到目前为止一切都很好。 客户端现在请求,如果他尝试保存生成的文件(通过保存文件对话框),文档的文件名已经预填充。

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

有人知道如何实现这一目标吗?我觉得如果能成功客户会很高兴,而且我也已经在这方面花了很多时间(我不得不承认自动化这个词我没有太多经验)。

【问题讨论】:

  • File.Move(oldName, newName)?
  • @Oded:你是说 System.IO.File.Move 吗?如果是:该文件尚不存在,这是邮件合并的结果,未保存打开。还是我误解了你的提议?
  • 不,你理解正确。不确定该文件是否不存在。
  • 你看Document.SaveAs了吗?
  • @Oded: 将文件保存到一个临时位置并以此定义文件名?我会尝试,但是我担心保存操作不再显示保存文件对话框(在点击保存或按 ctrl-s 时),这不是所需的行为。预填充的文件名只应该是对用户的建议。或者您知道阻止这种行为的选项吗?如果是,这将是一个解决方案!

标签: .net ms-word office-interop mailmerge


【解决方案1】:

如果您设置文档的 Title 属性,当您选择 Save As 时,这就是将使用的文档名称。您还可以设置默认保存位置。在 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:=" " 大约是最小的变化。确保您位于文档的末尾。
  • 谢谢,但遗憾的是这并不适用更改(Word 2010)。但我会进一步尝试,也许我犯了一个错误,我是自动化方面的菜鸟。
  • 这很奇怪,起作用的不是更改,而是选择“另存为”两次。奇数。
  • 是的,我也观察到了这一点,但到目前为止,我还没有找到通过自动化应用更改的可能性。即使是对 Undo 然后 Redo 的调用也不适用!
  • +1 这太棒了!您为我节省了大量搜索时间(可能我找不到解决方案)。十分感谢!这里是c#的代码,我找了一阵子,对我来说,不是很明显。也许您将其整合到您的答案中?动态对话框 = wordApp.Dialogs[WdWordDialog.wdDialogFileSummaryInfo]; dialog.Title = "我的标题"; dialog.Execute();
【解决方案2】:

文档
http://msdn.microsoft.com/en-us/library/microsoft.office.tools.word.document.saveas%28v=vs.80%29.aspx
似乎是说您可以指定文件名还是我遗漏了什么?

【讨论】:

  • 是的,使用特定文件名保存不是问题。问题是,不能保存文件,但如果客户端按 ctrl-s,保存文件对话框应该已经预填了文件名。不过还是谢谢你的回答。
  • 如果您指的是下载文件的文件名,那么您应该查看响应头“content-disposition”。希望这次我能正确理解你。
猜你喜欢
  • 2012-11-17
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 2013-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多