C# RPC服务器不可用。(来自HRESULT的异常:0x800706BA)-Excel

C# RPC服务器不可用。(来自HRESULT的异常:0x800706BA)-Excel,c#,asp.net,excel,interopservices,C#,Asp.net,Excel,Interopservices,我尝试使用asp.net c#将数据写入excel模板文件。但我有以下例外 异常类型:“System.Runtime.InteropServices.COMException” 消息:“RPC服务器不可用。(HRESULT异常:0x800706BA)” 有时它适用于少量行。我找不到问题所在 try { int rowNumber = 5; DataSet ds = ClsSystem.getReviewResponse(); Excel.Application myExcel

我尝试使用asp.net c#将数据写入excel模板文件。但我有以下例外

异常类型:“System.Runtime.InteropServices.COMException” 消息:“RPC服务器不可用。(HRESULT异常:0x800706BA)”

有时它适用于少量行。我找不到问题所在

try
{

int rowNumber = 5;  

DataSet ds = ClsSystem.getReviewResponse();     

Excel.Application myExcelApplication = null;
Excel.Workbook myExcelWorkbook = null ;
Excel.Worksheet myExcelWorkSheet = null;

//copy template
System.IO.File.Copy(excelFilePath, NewExcelFilePath);

myExcelApplication = new Excel.Application(); 
myExcelApplication.DisplayAlerts = false; 

myExcelWorkbook = (Excel.Workbook(myExcelApplication.Workbooks._Open(NewExcelFilePath, System.Reflection.Missing.Value,
            System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value,
            System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value,
            System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value,
            System.Reflection.Missing.Value, System.Reflection.Missing.Value)); // open the existing excel file

myExcelWorkSheet = (Excel.Worksheet)myExcelWorkbook.Worksheets[1]; 
myExcelWorkSheet.Name = "Test sheet";

for (int n = 0; n < ds.Tables.Count; n++)
    {
        for (int i = 0; i < ds.Tables[n].Rows.Count; i++)
        {

            myExcelWorkSheet.Cells[rowNumber, "A"] = ds.Tables[n].Rows[i]["HeaderID"].ToString();
            myExcelWorkSheet.Cells[rowNumber, "B"] = ds.Tables[n].Rows[i]["ResponseID"].ToString();
            myExcelWorkSheet.Cells[rowNumber, "C"] = ds.Tables[n].Rows[i]["Region"].ToString();
            myExcelWorkSheet.Cells[rowNumber, "D"] = ds.Tables[n].Rows[i]["Sector"].ToString();
            myExcelWorkSheet.Cells[rowNumber, "E"] = ds.Tables[n].Rows[i]["Facility"].ToString();
            myExcelWorkSheet.Cells[rowNumber, "F"] = ds.Tables[n].Rows[i]["Program"].ToString();
            myExcelWorkSheet.Cells[rowNumber, "G"] = ds.Tables[n].Rows[i]["AuditDate"].ToString();
            myExcelWorkSheet.Cells[rowNumber, "H"] = ds.Tables[n].Rows[i]["Auditor1"].ToString();

            rowNumber++;
        }
        rowNumber++;
    }

    try
        {
            myExcelWorkbook.SaveAs(NewExcelFilePath, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value,
             System.Reflection.Missing.Value, System.Reflection.Missing.Value, Excel.XlSaveAsAccessMode.xlExclusive,
             System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value,
                System.Reflection.Missing.Value, System.Reflection.Missing.Value); // Save data in excel


            myExcelWorkbook.Close(true, NewExcelFilePath, System.Reflection.Missing.Value); // close the worksheet
            myExcelApplication.Quit();


        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            if (myExcelWorkSheet != null) Marshal.ReleaseComObject(myExcelWorkSheet);

            if (myExcelWorkbook != null) Marshal.ReleaseComObject(myExcelWorkbook);

            if (myExcelApplication != null) Marshal.ReleaseComObject(myExcelApplication);
        }
  }
  catch (Exception ex)
    {
        if (myExcelApplication != null)
        {
            myExcelApplication.Quit(); // close the excel application
        }

        throw ex;
    }
试试看
{
整数行数=5;
数据集ds=ClsSystem.getReviewResponse();
Excel.Application myExcelApplication=null;
Excel.Workbook myExcelWorkbook=null;
Excel.Worksheet myExcelWorkSheet=null;
//复制模板
System.IO.File.Copy(excelFilePath、NewExcelFilePath);
myExcelApplication=新建Excel.Application();
myExcelApplication.DisplayAlerts=false;
myExcelWorkbook=(Excel.工作簿(myExcelApplication.Workbooks.\u打开)(NewExcelFilePath,System.Reflection.Missing.Value,
System.Reflection.Missing.Value,System.Reflection.Missing.Value,System.Reflection.Missing.Value,
System.Reflection.Missing.Value,System.Reflection.Missing.Value,System.Reflection.Missing.Value,
System.Reflection.Missing.Value,System.Reflection.Missing.Value,System.Reflection.Missing.Value,
System.Reflection.Missing.Value,System.Reflection.Missing.Value));//打开现有的excel文件
myExcelWorkSheet=(Excel.Worksheet)myExcelWorkbook.Worksheets[1];
myExcelWorkSheet.Name=“测试表”;
对于(int n=0;n

我想一次写500多行。

我不想让你的开发道路完全颠簸,但我发现互操作库非常不可靠。我在ClosedXML方面取得了更大的成功。我每天写数万行,从来没有遇到过与ClosedXML相关的问题。

你应该总是
ReleaseComObject
您的COM对象按正确的顺序(将
最终
块移动到外部
尝试捕获
块)。顺便说一句,
捕获(异常ex){throw ex;}
是无用的。我无法解决最终移动到外部的问题。这不是一个解决方案。这是一个建议。如果首先在
尝试捕获
块中抛出异常(例如:在一个
for
循环中)-您的COM对象未被释放。此外,如果在第二个
块中抛出异常,请尝试catch
块-您调用
myExcelApplication.Quit()
已经发布的COM对象。因此,任何异常都会破坏你的应用程序。哦,明白了。谢谢我很高兴听到你对ClosedXML没有任何问题,我同意COM互操作是一个地狱,但这究竟对这个问题有何帮助?(这应该是一个评论,而不是答案)答案是建议退出interop并转到ClosedXML。建议不是答案,对吗?建议应该是评论。此外,由于这个答案仍然不被接受,我认为ClosedXML在这里不是一个选项。让我进一步解释:例如,在一段时间后,有人会有同样的问题。然后有人会谷歌“COMException HRESULT:0x800706BA site:stackoverflow.com”并找到了这个问题和一个答案。如果有人不能切换到ClosedXML怎么办?这个答案对他来说仍然可以接受吗?这就是为什么告诉我们,“不要那样做”不是答案。