作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用 VSTO 并通过创建 Visual Studio 2010 Office 工作簿项目在 Excel 中构建模拟工具。本工作簿中的一个工作表将包含大约 50 万条记录。理想情况下,我想读取所有在模拟中使用它们的记录,然后输出一些统计数据。到目前为止,当我尝试获取整个范围然后一次性将单元格取出时,我遇到了 OutOfMemory
异常。关于我如何阅读所有数据或这样做的建议,有人有其他想法吗?
这是我的代码:
Excel.Range 范围 = Globals.shData.Range["A2:AX500000"];
数组值 = (Array)range.Cells.Value;
最佳答案
如何批量获取,并在内存中组装一个内存占用量稍低的模型?
var firstRow = 2;
var lastRow = 500000;
var batchSize = 5000;
var batches = Enumerable
.Range(0, (int)Math.Ceiling( (lastRow-firstRow) / (double)batchSize ))
.Select(x =>
string.Format(
"A{0}:AX{1}",
x * batchSize + firstRow,
Math.Min((x+1) * batchSize + firstRow - 1, lastRow)))
.Select(range => ((Array)Globals.shData.Range[range]).Cells.Value);
foreach(var batch in batches)
{
foreach(var item in batch)
{
//reencode item into your own object collection.
}
}
关于c# - 从 VSTO 项目中的 Excel 工作簿中读取五十万条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10385354/
我是一名优秀的程序员,十分优秀!