C# Interop.Excel 0x800A03EC-内存不足错误代码7

C# Interop.Excel 0x800A03EC-内存不足错误代码7,c#,excel,excel-interop,C#,Excel,Excel Interop,我试图在excel工作簿中循环,并在顶部复制粘贴值 该工作簿中每个工作表的。但我在网上遇到了一个内存问题: 转到下一页时,ws.selecttrue 遇到的错误: 来自HRESULT:0x800A03EC的异常: 当我在此时结束工作簿时,excel会抛出: 内存不足错误7 其他信息: 文件大小3mb,20个选项卡和大量从olap数据库TM1读取的数据库公式。 微软办公软件2007 下面是我正在运行的代码。是否有一种更有效的运行方式可以防止内存不足错误,或者这是另一种情况 任何帮助都将不胜感激

我试图在excel工作簿中循环,并在顶部复制粘贴值 该工作簿中每个工作表的。但我在网上遇到了一个内存问题: 转到下一页时,ws.selecttrue

遇到的错误:

来自HRESULT:0x800A03EC的异常: 当我在此时结束工作簿时,excel会抛出: 内存不足错误7

其他信息:

文件大小3mb,20个选项卡和大量从olap数据库TM1读取的数据库公式。 微软办公软件2007

下面是我正在运行的代码。是否有一种更有效的运行方式可以防止内存不足错误,或者这是另一种情况

任何帮助都将不胜感激

    public bool wbCopyValueOnly(string workBook) 
    { 

    Workbook wb = excel.ActiveWorkbook;
    Worksheet ws;
    Range rng;

    int WS_Count = wb.Sheets.Count;
    for (int i = 0; i < WS_Count; i++)
    {
        try
        {
            ws = wb.Sheets[i + 1];
            ws.Activate();
            ws.Select(true);
            //ws.Select(Type.Missing);
            //ws.Cells.Select();
            ws.UsedRange.Select();

            //ws.Cells.Copy();
            ws.UsedRange.Copy(Type.Missing);
            ws.UsedRange.PasteSpecial(Excel.XlPasteType.xlPasteValues, Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone, false, false);
            // select of range to get around memory issue
            excel.Application.CutCopyMode = (Excel.XlCutCopyMode)0;
            //rng = ws.get_Range("A1");
            //rng.Select();
            NAR(ws);

        }
        catch (System.Runtime.InteropServices.COMException err)
        {

            cLogging.write(LogLevel.Error, err.Message);
            Debug.Print(err.Message);
            return false;
        }


    }
    NAR(wb);
    return true;

    }


    private void NAR(object o)
    {
        try
        {
            while (System.Runtime.InteropServices.Marshal.ReleaseComObject(o) > 0) ;
        }
        catch { }
        finally
        {
            o = null;
        }
    }
我认为这些代码是没有必要的


您可以录制Marco以了解如何修改代码。

我有一个程序可以将多达100个选项卡复制回第一个摘要页面,我发现使用.Copy会导致几个问题。特别是如果你的程序运行了一段时间;如果没有奇怪的结果,当前用户无法使用复制粘贴功能。我建议使用变量来存储所需内容,然后写入到预期范围。如果您需要更改范围的格式,录制宏是非常宝贵的。

您可以试用office 2003和2010吗?以及从另一台pc?值得在不同的环境中尝试,bonCodigo。问题是该解决方案需要部署在2007环境上。。。。如果我上面的代码有一点重复,那就是我尝试了许多不同的方法让它工作。。。。
ws.Activate();
ws.Select(true);
ws.UsedRange.Select();