Excelワークブックを循環させ、そのワークブック内の各シートの上に値をコピーして貼り付けようとしています。しかし、次のシートに移動するときに ws.select(true) という行でメモリの問題が発生しています。
発生したエラー:
HRESULT からの例外: 0x800A03EC: この時点でブックを閉じようとすると、Excel がスローします: メモリ不足 (エラー 7)
追加情報:
ファイル サイズ 3 MB、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;
}
}