【发布时间】:2014-01-02 13:43:04
【问题描述】:
我每天都在 ftp 上得到一个 excel。我需要每天解析它并写入一个 DB2 表。你可以理解;我的 excel 具有固定顺序的固定列,因此我可以逐行而不是逐个单元格地迭代以获得性能。目的是将每个 (object[])row 添加到数据表中,因此复杂度可能为 O(n)
我知道锯齿状数组可以像这样迭代,而不是我问的多维数组。但是,在我的情况下可能会有一些技巧。我有 1 种方法,我卡住了,需要你的帮助..
1- 我从 excel 中获得了整个范围(不能使用 sheed.UsedRange,工作表有点脏)
int usedRowCount = sheet.UsedRange.EntireRow.Count;
string usedRange = string.Format("A1:DG{0}", usedRowCount);
object[,] rangeData = (System.Object[,])sheet.get_Range(usedRange).Cells.get_Value(missing);
2- 在这里我想用System.Buffer.BlockCopy 进行迭代以将整行放入一个临时对象[](因为我有固定的列数据序列)但我看到 BlockCopy 要求数组类型是原始的,所以这没有不行。但我觉得解决方案很接近:)
因此,感谢任何帮助、代码、方法(或即使在我的情况下也不可能的解释);非常感谢。
【问题讨论】:
-
您正在从 excel 读取/转换。 C# 级别的任何内容都不会影响性能。
-
@HenkHolterman 在添加到数据表之前将此 Range 对象视为“行”而不是“单元格”不是性能提升吗?
-
没有。这可能是这里运行时间的 1%,所以即使你设法将速度提高一倍,总体上也会提高 0.5%。
-
我明白了,然后让我们使用传统的嵌套循环(:只是好奇;这是因为即使我以整行为目标,excel“范围”也在后台逐个单元格地工作?
-
@stratovarius 检查是否对您有帮助 social.msdn.microsoft.com/Forums/en-US/…