繁体   English   中英

使用Microsoft.Office.Interop Word和Excel

[英]using Microsoft.Office.Interop Word and Excel

我正在使用Microsoft.Office.Interop,以使用C#扫描word和excel文件,我将文件作为用户的输入,将其保存在本地目录中,然后对其进行扫描。 它在我的本地发布上正常工作,但是当我在服务器上发布它时,它不扫描Word或Excel文件。 我的服务器上安装了MS-Office,与PC上的版本相同。 我还需要做什么? 我已经在bin目录中复制了所需的DLL。 这就是我阅读Word文件的方式

public static string word_to_text(string source)
{
  Word.Application newApp = new Word.Application();

  object Source = source;
  object Unknown = Type.Missing;

  object miss = System.Reflection.Missing.Value;
  object readOnly = true;
  Microsoft.Office.Interop.Word.Document docs = newApp.Documents.Open(ref Source, ref miss, ref readOnly, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss);
  string totaltext = "";
  for (int j = 0; j < docs.Paragraphs.Count; j++)
  {
    totaltext += " \r\n " + docs.Paragraphs[j + 1].Range.Text.ToString();
  }
  docs.Close();
  newApp.Quit();
  return totaltext;
}

我正在得到这个例外

由于以下错误,检索具有CLSID {000209FF-0000-0000-C000-000000000046}的组件的COM类工厂失败:80070005访问被拒绝。 (来自HRESULT的异常:0x80070005(E_ACCESSDENIED))。

我按照这篇文章修复了它,但是现在我遇到了excel和word文件的问题。 如果是Word文件,则无法从上述代码读取文件,docs对象似乎为空。 如果是Excel,则显示异常

Microsoft Office Excel cannot access the file 'myfile path'. There are several possible reasons: • The file name or path does not exist. • The file is being used by another program. • The workbook you are trying to save has the same name as a currently open workbook.

我读的解决方案给权的文件夹,并创建内部SYSTEM32桌面文件夹下面 ,不是为我工作:(这个问题的解决方案都只是出现在我的作品发表

您不应在服务器中使用Office自动化。 一次只能有一个线程可以访问Word,这相对于其他选项而言非常慢,并且Word并非用于服务器端执行。

使用OpenXML SDK更好:

http://www.microsoft.com/zh-cn/download/details.aspx?id=5124

或其他一些包装器:

http://docx.codeplex.com/

http://www.codeproject.com/Articles/87711/Manipulate-Docx-with-C-without-Microsoft-Word-inst

如果您认为您绝对必须在服务器上使用Office自动化(并且您不应该),那么至少将其放在单独的进程中,然后将请求放入另一个进程。 这样,您可以确保一次仅处理一个请求,可以安全地向另一个进程授予所需的权限,如果Word暂停,则可以终止它和第二个进程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM