【发布时间】:2018-04-11 21:13:08
【问题描述】:
我正在尝试提高从 Excel 工作表中逐行读取单元格的应用程序的性能。我找到了这个解决方案
https://stackoverflow.com/a/25842904/1462656
您想在一次操作中完成:
object[,] objectArray = cSheet.get_Range("A1:C4").Value2;
dataRange.Value2 = objectArray;
是否假设所有单元格都是 Value2 类型?
一般来说,我想知道如何将 UsedRange 的内容放入本地数组以便更快地访问(而不是通过互操作来回走动)。但是我不提前知道大小,但是我提前知道每列的单元格类型。它们是 Value2 和 Formula 的组合。
到目前为止我的代码
Application application = new Application();
application.Workbooks.Open(file);
Workbook workbook = application.Workbooks.get_Item(1);
Worksheet worksheet = workbook.Worksheets.get_Item(1);
Range UsedRange = worksheet.UsedRange;
int rows = UsedRange.Rows.Count;
int cols = UsedRange.Columns.Count;
object[,] objectArray = new object[rows,cols];
我不知道下一步该做什么。
我打算这样做
objectArray = (object[,])UsedRange.Range[?,?];
但我不知道使用上面找到的列数和行数指定范围的语法。
最初我有一个这样的 for 循环,非常慢
for (int rowIndex = 2; rowIndex < UsedRange.Rows.Count; rowIndex++){
string str1= UsedRange.Rows.Cells[rowIndex, 0 + 1].Value2.ToString();
string str2= UsedRange.Rows.Cells[rowIndex, 1 + 1].Formula as string;
}
【问题讨论】:
-
为什么不问答案 1 的操作?他在 SO 上很活跃,可能会更好地帮助你..
-
你试过
object[,] objectArray = worksheet.get_Range($"A1:{cols}{rows}").Value2;吗? -
@Michael 我认为有些单元格是公式,而不是所有的 Value2....我该怎么做而不必提前指定它们都是 Value2
-
But I don't understand the first two lines of code of the first post.您最好在这篇帖子中包含所有相关代码 - 人们不太可能点击链接并阅读其他地方的内容。每个问题都应尽可能独立。 -
试试
cSheet.get_Range("A1:C4").Formula。 AFAIK 这将返回一个字符串数组,可能是公式或单元格值
标签: c# excel office-interop excel-interop