我有一个从项目文件夹收集文件进行处理的过程。
用户从 Outlook 将电子邮件保存到此项目文件夹。(Win10 上的 Office Outlook365)在 Outlook 中,您可以抓取一组电子邮件并将其发送到文件资源管理器窗口以“另存为”。如果文件夹中已存在任何文件,Windows 会提供以下选项:
- “复制并替换”
- “不可抄袭”。
我想复制、保留两者,并使用 (1) 或 (2) 扩展名重命名文件名。filename.msg filename(1).msg
有人对如何实现这一点有什么建议吗?并且让非技术用户更容易使用?
我认为可能有一个注册表设置允许默认重命名复制的文件或类似的东西。
针对此问题建议的其他解决方案是保存到临时文件夹,然后从临时文件夹复制到项目文件夹,然后您可以选择覆盖/重命名,但这是一种冗长且可能造成灾难性的方法,依赖于您每次单击多个复选框以免覆盖您保存的文件。
答案1
根据我的经验,Outlook 中可能没有可以直接设置的选项。作为解决方法,建议使用任何 vba 脚本。根据我的测试,这个脚本可以将收到的时间和主题保存在本地:
Option Explicit
Public Sub SaveMessageAsMsg()
Dim oMail As Outlook.MailItem
Dim objItem As Object
Dim sPath As String
Dim dtDate As Date
Dim sName As String
Dim enviro As String
enviro = CStr(Environ("USERPROFILE"))
For Each objItem In ActiveExplorer.Selection
If objItem.MessageClass = "IPM.Note" Then
Set oMail = objItem
sName = oMail.Subject
ReplaceCharsForFileName sName, "-"
dtDate = oMail.ReceivedTime
sName = Format(dtDate, "yyyymmdd", vbUseSystemDayOfWeek, _
vbUseSystem) & Format(dtDate, "-hhnnss", _
vbUseSystemDayOfWeek, vbUseSystem) & "-" & sName & ".msg"
sPath = enviro & "\Documents\"
Debug.Print sPath & sName
oMail.SaveAs sPath & sName, olMSG
End If
Next
End Sub
Private Sub ReplaceCharsForFileName(sName As String, _
sChr As String _
)
sName = Replace(sName, "'", sChr)
sName = Replace(sName, "*", sChr)
sName = Replace(sName, "/", sChr)
sName = Replace(sName, "\", sChr)
sName = Replace(sName, ":", sChr)
sName = Replace(sName, "?", sChr)
sName = Replace(sName, Chr(34), sChr)
sName = Replace(sName, "<", sChr)
sName = Replace(sName, ">", sChr)
sName = Replace(sName, "|", sChr)
End Sub
参考自此篇文章:将选定的电子邮件消息保存为 .msg 文件