有谁知道一个站点(甚至是非Microsoft)是否有COMExceptions / HRESULTS的详细信息。

当我尝试使用Copy()函数后保存Excel工作簿时,出现以下错误:

ERROR - Unable to SaveWorkbook()
System.Runtime.InteropServices.COMException (0x800A03EC): Document not saved.


附言我正在紧紧地处理10K +个文件,但是读取文件效果很好,但是事实证明保存起来并不好玩。

另外,如果有人在使用Copy()函数时遇到Excel出血内存的问题,请告诉我。

谢谢!

P.S.S如果有人需要进一步说明,请告诉我

编辑1

这是怎么回事。我被要求通过将活动工作表复制到新工作表(相同的工作簿)来更新一些XLS文件(实际上是10K +),并通过执行一些转换来更新原始工作表。当我保存工作簿时出现问题。

这是我的应用程序的摘录:

///.... UpdateSpreadsheet() Routine
Microsoft.Office.Interop.Excel.Workbook wb = null;

try
{
    wb = ef.GetWorkbook(fileName, false, true);
}
catch (Exception ex)
{
    logger.Error(ex.ToString());
}

Microsoft.Office.Interop.Excel.Worksheet ws = null;

try
{
    ws = wb.Sheets[Foo.WorksheetName] as Microsoft.Office.Interop.Excel.Worksheet;
}
catch (Exception ex)
{
    logger.Error(ex.ToString());
}

bool result = false;

if (ws != null)
    result = ef.CopyWorksheet(ws, Foo.WorksheetName);

if (result)
{
   //... update the sheet as appropriate
}

try
{
    ef.SaveWorkbook(wb, fileName);  //eventually this line crashes, it's random, but so far after the 500th file, and I get that COM Exception.
    //.. update Foo object to reflect copied worksheet
}
catch (Exception ex)
{
    //something happened, we can't save, so close and destroy the workbook
    logger.Error("Unable to SaveWorkbook()", ex);
}
finally
{
    ef.DestoryWorkbook(wb, fileName);
    ef.DestroyWorksheet(ws);
}

//// CopyWorksheet() Method
public bool CopyWorksheet(Worksheet ws, String sourceSheet)
{
    try
    {
        try
        {
            Worksheet sheet = GetWorksheet(sourceSheet + " (2)");

                    //I don't think the below is necessary, but I'm paranoid about memory leaks
            ExcelTools.OfficeUtil.ReleaseRCM(sheet);
            sheet = null;

            return false;
        }
        catch (Exception)
        {
            ws.Copy(Missing.Value, ws); //this line never errors out
        }

        return true;
    }
    catch (Exception)
    {
        return false;
    }
    finally
    {
        ws.Activate();
    }
}

/// SaveWorkbook()
public void SaveWorkbook(Workbook wb)
{
    if (wb != null)
    {
        wb.Save();
    }
}

最佳答案

如果您分解HRESULT值,则设施代码为FACILITY_CONTROL,错误代码为1004。通过一些在线搜索,似乎此代码是针对各种不同的错误生成的,其中一些似乎与复制工作表有关。以编程方式(例如参见this KB article)。

这可能有助于发布有关您正在做的事情或search online for this HRESULT的更多详细信息,并查看其他人可能遇到的与您正在做的事情相似的问题。

关于c# - COMException故障,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/976951/

10-12 12:48