【发布时间】:2012-12-04 06:34:52
【问题描述】:
我正在尝试循环浏览 Excel 工作簿并将粘贴值复制到顶部 该工作簿中的每个工作表。但是我在网上遇到了一个内存问题: ws.select(true),当转到下一张表时。
遇到的错误:
来自 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;
}
}
【问题讨论】:
-
你可以试试office 2003和2010吗?以及来自另一台电脑?
标签: c# excel excel-interop