我有一大段代码,我正在用它来读取MS Office Word文档。
static void ReadMSOfficeWordFile(string file) {
try {
Microsoft.Office.Interop.Word.Application msWordApp = new Microsoft.Office.Interop.Word.Application();
object nullobj = System.Reflection.Missing.Value;
object ofalse = false;
object ofile = file;
Microsoft.Office.Interop.Word.Document doc = msWordApp.Documents.Open(
ref ofile, ref nullobj, ref nullobj,
ref nullobj, ref nullobj, ref nullobj,
ref nullobj, ref nullobj, ref nullobj,
ref nullobj, ref nullobj, ref nullobj,
ref nullobj, ref nullobj, ref nullobj,
ref nullobj);
string result = doc.Content.Text.Trim();
doc.Close(ref ofalse, ref nullobj, ref nullobj);
msWordApp.Quit();
CheckLineMatch(file, result);
}
catch {
RaiseError("Unable to parse file because of MS Office error.", file);
}
}我对此有三个问题。
首先,它依赖于安装在每个可能运行它的系统上的MS Office。有些人更喜欢Libre Office,但这仍然需要针对MS Office Word文档运行。
其次,我不知道这是否适用于MS Office2003和MS Office2007文档……
第三,它很慢。它慢得令人痛苦。
所以!我想一定有比这更好的方式来运行它。我猜一定有人知道比新手更好的方式。我只是在尝试阅读文档中的文本,没有其他内容。
发布于 2012-03-13 02:17:05
为了响应您的"Word应用程序挂起打开“,您需要告诉它关闭。
msWordApp.Quit()请参阅http://msdn.microsoft.com/en-us/library/bb215475(v=office.12).aspx
关于“依赖于正在安装的MS Offise”,您使用的是互操作。因此,根据定义,它需要安装。您可以查看其中一个商业化的库。
http://www.aspose.com/categories/.net-components/aspose.words-for-.net/default.aspx http://www.gemboxsoftware.com/document/pricelist
发布于 2012-05-11 15:38:27
NPOI是一个开源项目,我们可以在没有任何办公可靠性的情况下完成很多事情。
例如,读取word文档中的所有文本可以实现如下所示的。
public string ReadAllTextFromWordDocFile(string fileName)
{
using (StreamReader streamReader = new StreamReader(fileName))
{
var document = new HWPFDocument(streamReader.BaseStream);
var wordExtractor = new WordExtractor(document);
var docText = new StringBuilder();
foreach (string text in wordExtractor.ParagraphText)
{
docText.AppendLine(text.Trim());
}
streamReader.Close();
return docText.ToString();
}
}发布于 2012-03-13 02:19:06
Office Interop是一个选项(正如您已经发现的那样很慢),但请注意:在类似服务器的情况下(如ASP.NET或Windows Service或类似的),它是MS不支持的-请参阅!
通常使用一些库来实现您想要的功能:
库方法通常非常快,可用于多线程,在服务器场景中可用,并附带许多额外的可能性...
至于你的第二点:使用互操作,你需要调用Quit来关闭应用程序……尽管有时你也需要调用System.Runtime.InteropServices.Marshal.FinalReleaseComObject (这可能会有一些不受欢迎的副作用,参见http://blogs.msdn.com/b/yvesdolc/archive/2004/04/17/115379.aspx)
https://stackoverflow.com/questions/9672461
复制相似问题