C# 4.0 无法打开word文档并在未锁定的情况下引用它
您好,我知道如何从word文件中打开并获取纯文本,只需一些代码。然而,我有一个坏的影响,从这发生。doc这个词被锁定了,我不知道如何解除锁定它。我最终想要的是打开一个位于UNC路径中的文件并读取其中的一部分,不管其他人是否打开了它,解析其中的行,关闭它,不保存任何内容或锁定文件。我能得到的最接近的结果是我可以打开一个文件,解析它,它会锁定,但当我打开并关闭它(运行代码的同一台机器)时,它会神奇地解锁它 我对COM几乎一无所知,所以我找了一段时间,找到了一些关于Marshall对象的信息,并补充说。我已尝试打开和关闭引用“ReadOnly:True”、“ReadOnly:False”。我觉得我缺少了一些简单的东西,所以我想在这里问一下。任何建议都可以,我在.NET4.0中编写代码,这样你就不必为打开文档而传入那些烦人的obj=null,obj=nullC# 4.0 无法打开word文档并在未锁定的情况下引用它,c#-4.0,com,C# 4.0,Com,您好,我知道如何从word文件中打开并获取纯文本,只需一些代码。然而,我有一个坏的影响,从这发生。doc这个词被锁定了,我不知道如何解除锁定它。我最终想要的是打开一个位于UNC路径中的文件并读取其中的一部分,不管其他人是否打开了它,解析其中的行,关闭它,不保存任何内容或锁定文件。我能得到的最接近的结果是我可以打开一个文件,解析它,它会锁定,但当我打开并关闭它(运行代码的同一台机器)时,它会神奇地解锁它 我对COM几乎一无所知,所以我找了一段时间,找到了一些关于Marshall对象的信息,并补充说
public static string ReadWordDoc(string loc)
{
Word.Application wordApp = new Word.Application();
Word.Document Doc = wordApp.Documents.Open(loc, ReadOnly: true);
sb = "";
foreach (Word.Paragraph objParagraph in Doc.Paragraphs)
{
try
{
sb += objParagraph.Range.Text + "\n";
}
catch (Exception ex)
{
throw ex;
}
}
return sb;
Doc.Close(SaveChanges: false);
Marshal.ReleaseComObject(Doc);
wordApp.Quit(SaveChanges: false);
}
我想是因为某种原因锁被锁上了。我用“不保存更改”退出Word应用程序,并运行垃圾收集器。这可能有点过分,但它基本上确保了我的目标文件上没有留下锁
Word._Application wordApp = new Word.Application();
Word._Document Doc = wordApp.Documents.Open(loc, ReadOnly: true);
try
{
sb = "";
foreach (Word.Paragraph objParagraph in Doc.Paragraphs)
{
try
{
sb += objParagraph.Range.Text + "\n";
}
catch (Exception ex)
{
throw ex;
}
}
}
catch (COMException) { }
finally
{
//FileInfo finfo = new FileInfo(loc);
//finfo.IsReadOnly = false;
if (Doc != null)
{
Doc.Close();
Doc = null;
}
if (wordApp != null)
{
wordApp.Quit(Word.WdSaveOptions.wdDoNotSaveChanges);
wordApp = null;
}
}
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
return sb;