gpt4 book ai didi

直接转换后 C# Interop.Word.Application/Document 歧义

转载 作者:行者123 更新时间:2023-11-30 23:30:36 25 4
gpt4 key购买 nike

我在这里看到了其他一些有解决方案的问题,但是即使直接转换和垃圾收集也不会消除歧义警告或停止我的程序尝试使用显然已经在使用的文档。

以下代码是完全 reshape 某些 Word 文档(更改标题、模板和 Logo 等)的应用程序的一部分。 MergeDocument 不会处理单词应用程序或文档(其他方法也需要访问的模板文件)。

WaitForIt 方法只是一个两秒的计时器延迟,希望它是关于访问模板文件的计时问题。大多数其他方法在 GrabLogoFromTemplate 中的 try/catch 尝试使用与 MergeDocument 相同的模板时被命中之前没有机会做任何事情 已经用过了。

不幸的是,我现在不知道如何解决这个问题,标题中提到的直接转换并没有纠正我认为是 Introp Word Application 和 Document Close 和相当的方法。同报道in this question , 和 here我尝试了后者提到的垃圾收集的解决方案,但它并没有解决我的问题。 Close() 和 Quit() 都是模棱两可的,就像第一个问题中的问题一样,但即使处置(认为我已经正确地做到了这一点)也不会释放模板供其他方法使用。

有没有人遇到过这个?

合并按钮:

private void Merge_btn_Click(object sender, EventArgs e)
{
Rebrand rb = new Rebrand();
progressBar1.Increment(+1);
rb.FolderCreation();
Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application();

progressBar1.Increment(+24);
string[] fileArray = Directory.GetFiles(currentFolder_tb.Text);

for (int i=0; i < fileArray.Length; i++)
{
string tmpTemplate = rb.GetTempTemplateLocationn(template_tb.Text,i);

string newDocumentPath = rb.MergeDocument(fileArray[i], newLocation_tb.Text, tmpTemplate, wordApp);
// ambiguous
foreach(Word.Document d in wordApp.Documents)
{
d.Close(ref missing, ref missing, ref missing);
}
rb.WaitForIt();
rb.GrabLogoFromTemplate(tmpTemplate);
rb.WaitForIt();
if (newDocumentPath != "false")
rb.ReplaceImageInHeader(newDocumentPath);
}

object missing = System.Reflection.Missing.Value;
((Microsoft.Office.Interop.Word.Application)wordApp).Quit(ref missing, ref missing, ref missing);
// the above has ambiguity warning
GC.Collect();// doesn't solve

if (progressBar1.Value == 99)
progressBar1.Increment(+1);
MessageBox.Show("File(s) ReBranded!");
progressBar1.Value = 0;
}

合并文档:

public string MergeDocument(string oldDoc, string newDoc, string tmplt, Microsoft.Office.Interop.Word.Application wordApp)
{
try
{
object missing = System.Reflection.Missing.Value;
//Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application();
Microsoft.Office.Interop.Word.Document aDoc = null;
object readOnly = false;
object isVisible = false;
wordApp.Visible = false;
object oldfile = oldDoc;
// keep the old document's filename
object newfile = newDoc + @"\" + Path.GetFileName(oldDoc);
object template = tmplt;
// add new template
aDoc = wordApp.Documents.Add(ref template, ref missing, ref missing, ref missing);
// open existing document you wish to merge
aDoc = wordApp.Documents.Open(ref oldfile, ref missing, ref readOnly, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref isVisible,
ref missing, ref missing, ref missing, ref missing);
aDoc.Activate();
aDoc.set_AttachedTemplate(template);
aDoc.UpdateStyles();
aDoc.SaveAs(ref newfile, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);

// close the document, ambiguity warning
((Microsoft.Office.Interop.Word.Document)aDoc).Close(ref missing, ref missing, ref missing);
return newfile.ToString();
}
catch
{
return "false";
}

}

最佳答案

我在批处理 PowerPoint 幻灯片时遇到了问题。唯一的解决办法是关闭退出然后运行GC两次!

  GC.Collect();
GC.WaitForPendingFinalizers();

GC.Collect();
GC.WaitForPendingFinalizers();

关于直接转换后 C# Interop.Word.Application/Document 歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34922845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com