【问题标题】:Find and Replace works when running with visual studio but when running off of IIS i get null exception error查找和替换在使用 Visual Studio 运行时有效,但在运行 IIS 时出现空异常错误
【发布时间】:2025-11-26 17:10:01
【问题描述】:

下面是我的代码。如果我注释掉从object fNameadoc.Close 的块,则代码可以在 IIS 上运行,但如果它没有被注释掉,它会给我这个错误

NullReferenceException:对象引用未设置为对象的实例。] QuoteProject030117.Controllers.Quote1Controller.Create(Quote1 quote1) +1653

我认为 iis 在修改 doc 一词时遇到了问题,但我找不到修复它的方法。当我运行它时,所有代码都可以在 Visual Studio 上完美运行。如果有人能帮我一把,将不胜感激。谢谢!

public ActionResult Create([Bind(Include = "id,quotenumber,date,value,won,lost,client,projectdescription,contact")] Quote1 quote1)
    {
        if (ModelState.IsValid)
        {
            db.Quote1.Add(quote1);
            db.SaveChanges();

            string QNsql = @"SELECT quotenumber FROM Quote1 ORDER BY id DESC offset 0 rows fetch next 1 rows only;";
            string quoteNum = db.Database.SqlQuery<string>(QNsql).Single();
            string Dsql = @"SELECT date FROM Quote1 ORDER BY id DESC offset 0 rows fetch next 1 rows only;";
            string date = db.Database.SqlQuery<string>(Dsql).Single();
            string Clientsql = @"SELECT client FROM Quote1 ORDER BY id DESC offset 0 rows fetch next 1 rows only;";
            string client = db.Database.SqlQuery<string>(Clientsql).Single();
            string Contsql = @"SELECT contact FROM Quote1 ORDER BY id DESC offset 0 rows fetch next 1 rows only;";
            string contact = db.Database.SqlQuery<string>(Contsql).Single();
            string PDessql = @"SELECT projectdescription FROM Quote1 ORDER BY id DESC offset 0 rows fetch next 1 rows only;";
            string proDes = db.Database.SqlQuery<string>(PDessql).Single();

            System.IO.Directory.CreateDirectory(@"C:\Users\alanf\Documents\CopyTo\" + quoteNum);

            System.IO.Directory.CreateDirectory(System.IO.Path.Combine(@"C:\Users\alanf\Documents\CopyTo\" + quoteNum, "Information Recieved From Customer"));
            System.IO.Directory.CreateDirectory(System.IO.Path.Combine(@"C:\Users\alanf\Documents\CopyTo\" + quoteNum, "PO Recieved From Customer"));
            System.IO.Directory.CreateDirectory(System.IO.Path.Combine(@"C:\Users\alanf\Documents\CopyTo\" + quoteNum, "Project Costing Sheet"));
            System.IO.Directory.CreateDirectory(System.IO.Path.Combine(@"C:\Users\alanf\Documents\CopyTo\" + quoteNum, "Quotation Sent To Customer"));
            System.IO.Directory.CreateDirectory(System.IO.Path.Combine(@"C:\Users\alanf\Documents\CopyTo\" + quoteNum, "Quotations Recieved From Vendors"));

            string fileName = "Quote.docx";
            string sourcePath = @"C:\inetpub\wwwroot";
            string targetPath = @"C:\Users\alanf\Documents\CopyTo\" + quoteNum + @"\Quotation Sent To Customer";

            string sourceFile = System.IO.Path.Combine(sourcePath, fileName);
            string destFile = System.IO.Path.Combine(targetPath, fileName);

            System.IO.File.Copy(sourceFile, destFile, true);


            object fName = System.IO.Path.Combine(targetPath, fileName);
            Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application { Visible = false };
            Microsoft.Office.Interop.Word.Document aDoc = wordApp.Documents.Open(fName, ReadOnly: false, Visible: false);
            aDoc.Activate();
            FindAndReplace(wordApp, "<quote>", "" + quoteNum + "");

            FindAndReplace(wordApp, "<date>", "" + date + "");

            FindAndReplace(wordApp, "<client>", "" + client + "");

            FindAndReplace(wordApp, "<contact>", "" + contact + "");

            FindAndReplace(wordApp, "<projectdescription>", "" + proDes + "");
            aDoc.Close();

            Process.Start("explorer.exe", @"C:\Users\alanf\Documents\CopyTo\" + quoteNum);

            return RedirectToAction("Index");
        }

【问题讨论】:

  • db 在哪里实例化?
  • 它与通过连接字符串连接的 iss 应用程序在同一台机器上运行。使用 SQL Server 2014
  • 1653 是哪一行?
  • 我的创建控制器中只有 260 行代码,我从中得到了错误。

标签: c# asp.net visual-studio iis


【解决方案1】:

Microsoft 不支持来自 IIS 的 Office 互操作 - 请参阅 https://social.msdn.microsoft.com/Forums/en-US/1d3923a5-6720-4743-8fa0-c919ff90e4ef/i-cant-open-word-office-on-iis7?forum=worddevhttps://support.microsoft.com/en-us/help/257757/considerations-for-server-side-automation-of-office

很高兴知道@OmegaMan 也问过 1653 是哪一行。

对于您的场景,我建议您查看一个支持读写 Word 文档或进行邮件合并的 .NET 库。我以前用过Aspose,但也有其他的,比如GemBox(虽然我没用过)。

另外,请参阅此线程Reading doc and docx files using C# without having MS Office installed on server

【讨论】:

    最近更新 更多