首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >COMException明细

COMException明细
EN

Stack Overflow用户
提问于 2009-06-10 17:10:41
回答 1查看 1.2K关注 0票数 2

有没有人知道一个网站(即使不是微软的),有关于COMExceptions/HRESULTS的详细信息。

在使用Copy()函数尝试保存Excel工作簿时,收到以下错误:

代码语言:javascript
复制
ERROR - Unable to SaveWorkbook()
System.Runtime.InteropServices.COMException (0x800A03EC): Document not saved.

附注:对于10K+文件,我是在一个严格的循环中这样做的,但是读取这些文件工作得很好,但是保存它们并不有趣。

另外,如果有人在使用Copy()函数时遇到Excel内存耗尽的问题,请让我知道。

谢谢!

另外,如果任何人需要进一步的澄清,请让我知道

编辑1

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

以下是我的应用程序的一些摘录:

代码语言:javascript
复制
///.... 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();
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-06-10 17:21:31

如果分解HRESULT值,则工具代码为FACILITY_CONTROL,错误代码为1004。从一些在线搜索中可以看出,此代码似乎是为各种不同的错误生成的,其中一些错误似乎与以编程方式复制工作表有关(例如,请参阅this KB article)。

发布更多关于你正在做什么的细节,或者search online for this HRESULT,看看别人可能遇到了什么问题,看起来与你正在做的事情相似,这可能会有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/976951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档