上传word文档并读取word调用com组件遇到的问题

来源:互联网 发布:数据比例图 编辑:程序博客网 时间:2024/04/28 08:11

开始写上传文档并读取的的时候是调用com组件,中间遇到了很多坑,总结一下

//传文档所在路径 返回文档内容
public string Doc2Text(string docFileName)
{
//实例化COM
Microsoft.Office.Interop.Word.ApplicationClass wordApp = new Microsoft.Office.Interop.Word.ApplicationClass();
object fileobj = docFileName;
object nullobj = System.Reflection.Missing.Value;
//打开指定文件(不同版本的COM参数个数有差异,一般而言除第一个外都用nullobj就行了)
Microsoft.Office.Interop.Word.Document doc = wordApp.Documents.Open(ref fileobj, 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
);
//取得doc文件中的文本
string outText = doc.Content.Text;
//关闭文件
doc.Close(ref nullobj, ref nullobj, ref nullobj);
//关闭COM
wordApp.Quit(ref nullobj, ref nullobj, ref nullobj);
//返回
return outText;
}
当然 在读取的时候会有损坏的文件 和被加密的文件等问题 总之C#和office的兼容性不太好
试明白了记得给分 别忘了要引用word的dll
引用文件夹 右键添加引用 在组件里找Microsoft.Office.Interop.Word
当初的代码大概是这样,本地测试,发现能用,测试没有问题,就发布到服务器上了,后来老师说不可以用啊,然后我在服务器上调试了一下,发现没有读写权限,就给了它权限,在服务器上本地测试也成功了。过了一段老师说还是不行,这个时候我开始怀疑那个老师的智商,然后我在本地测试了一下,发现是好的,在服务器上测试了一下,发现也没问题,后台我本机访问服务器,发现也没问题。这个时候就更怀疑老师智商了。由此偶然间,我用其他人的电脑访问的时候发现果然不行。后来经过本机多次的调试发现,连接本机连接着服务器的时候可以用,但是断开服务器再用的时候,发现就不行了。(有点神奇)再后来经过反复推敲,感觉应该是:我本机访问,服务器本地访问,本机连着服务器的时候用本机访问,都有最大的com组件读权限(都能连接了,肯定有最大的权限),但是当我断开服务器去访问的时候,就没有这个权限了,所以访问不了。然后我就给这个网站配com组件的权限,但是好麻烦, 经过多次实验,最终失败了,然后用了别人的一个框架,一下就成功了。
///
/// 发布公告
///
///
public ActionResult AnnouncePost()
{
if (Session[“Id”] != null)
{
AnnounceModel am = new AnnounceModel();
return View(am);
}
else
{
return RedirectToAction(“Login”);
}
}

    [HttpPost]    [ValidateAntiForgeryToken]    public ActionResult AnnouncePost(HttpPostedFileBase file)    {        string filePath = Path.Combine(HttpContext.Server.MapPath("../Uploads"), Path.GetFileName(file.FileName));        file.SaveAs(filePath);        Aspose.Words.Document doc = new Aspose.Words.Document(filePath);        var content = doc.GetText();        content = content.Remove(0, 79);        AnnounceModel uploadfile = new AnnounceModel();        uploadfile.Message = content;        uploadfile.Title = Request.Form["message"];        db.AnnounceTb.Add(uploadfile);        db.SaveChanges();        return View();    }
0 0