我看了几个消息来源,但他们似乎在解决问题方面错过了标记。
错误: PFML_Auto_Fax.exe中发生System.Runtime.InteropServices.COMException' 附加信息:此文件是只读的。
代码:
public void Save()
{
oDoc.Saved = true;
oDoc.SaveAs2(Path.Combine(Environment.CurrentDirectory, "temp.doc"));// this is where
((_Document)oDoc).Close();
((_Application)oWord).Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(oDoc);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oWord);
oDoc = null;
oWord = null;
GC.Collect();
}
注意:它循环并保存一次,第二个循环将无法在上面指定的行保存!
正如您所看到的,我将文档和应用程序设置为null,然后强制进行垃圾收集,但程序仍然坚持打开它。
问题是我的问题循环一遍又一遍地创建和保存这个特定的文件。但如果它实际上在我想要的时候退出,我就不会有问题。
主要问题:处理退出并保留我新保存的文件,以便我可以在下一个循环中覆盖它并使用它。
类似的问题:
InteropServices.COMException (This file is read-only).
Disposing of Microsoft.Office.Interop.Word.Application
编辑: 这是有问题的循环
foreach (Principal p in principalList)
{
WordManager wManager = new WordManager(wordDocDir);
wManager.ReplaceText("XX", DateTime.Now.ToString("dd"));
wManager.ReplaceText("INSERTNAME1", String.Format("{0} {1} {2}", p.Salutation != null ? p.Salutation.Trim() : "Principal", p.FristName != null ? p.FristName : "", p.LastName !=null ? p.LastName : ""));
foreach (string key in toReplace.Keys)
{
string outkey;
toReplace.TryGetValue(key, out outkey);
wManager.ReplaceText(key, p.AdditionalText[Int32.Parse(outkey)]);
}
wManager.Save();
wManager = null;
GC.Collect();
fManager.SendFax(p);
}
答案 0 :(得分:0)
似乎DocX interlop更好。正常的办公室interlop无法结束。