您好我知道如何打开并从word文件中获取纯文本以获取一些代码。但是我发生了这种不良影响。单词doc被锁定,我不知道如何分配任何锁定它的东西。我最终想要打开一个将在UNC路径中读取其中一部分的文件,无论其他人是否打开它,从中解析行,关闭它,不保存任何内容或锁定文件。我能得到的最接近的是我可以打开一个文件,解析它,它会锁定,但是当我打开它并关闭它时(运行代码的同一台机器)它会神奇地解锁它。
我对COM几乎一无所知,所以我找了一会儿,找到了关于马歇尔物体的东西,并补充说。我试图打开和关闭引用'ReadOnly:True','ReadOnly:False'。我觉得我有一些简单的东西,所以我想我会问这里。任何建议都是免费的,我在.NET 4.0中进行编码,所以你没有传递所有烦人的obj = null,obj = null来打开Doc。
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);
}
答案 0 :(得分:0)
我出于某种原因想出了锁定。我确保使用“不保存更改”退出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;