Interop.Excel 0x800A03EC – Código de error de memory insuficiente 7

Estoy intentando recorrer un libro de trabajo de Excel y copyr valores de pegado sobre la parte superior de cada hoja dentro de ese libro de trabajo. Pero me encuentro con un problema de memory en línea: ws.select (verdadero), cuando voy a la siguiente hoja.

Errores encontrados:

Excepción de HRESULT: 0x800A03EC: y cuando voy a cerrar el libro de trabajo en este punto, Excel lanza: Falta de memory (Error 7)

Información Adicional:

Tamaño de file 3mb, 20 tabs y muchas fórmulas de bases de datos que se leen desde la database olap TM1. Microsoft Office 2007

El código que estoy ejecutando está a continuación. ¿Hay una manera más eficiente de ejecutarlo que pueda evitar el error de falta de memory O es algo diferente?

¡Cualquier ayuda sería muy apreciada!

#

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; } } 

Tengo un progtwig que copy de hasta 100 tabs en la primera página de resumen y descubrí que usar .Copy () causaba varios problemas. Especialmente si su progtwig se ejecuta por un período de time; el usuario actual no puede usar la function de copyr y pegar sin resultados extraños. Recomiendo usar variables para almacenar lo que necesita y luego escribir en el range previsto. La grabación de macros es invaluable si necesita cambiar el formatting del range.

 ws.Activate(); ws.Select(true); ws.UsedRange.Select(); 

Creo que este código no es necesario.

Puede grabar un Marco para aprender cómo modificar su código.