Excel Worksheet.Usedrange返回什么类型

时间:2012-03-08 17:03:11

标签: c# excel c#-4.0 office-interop

我正在将应用程序从vba转换为C#。它进展缓慢。这是我的第一个挑战......

在vba中,我可以将Excel范围分配给vba二维数组:

Dim strSheetArray as Variant
strSheetArray = xlSH.UsedRange
...
debug.print strSheetArray[1,2]     'etc.

当我转换为C#时,“UsedRange”属性似乎返回一个对象。我似乎无法像数组那样使用该对象,从而导致代码时错误。那么,我如何引用返回的对象,以便我可以遍历它?

并且,只要我在它,细胞没有类型,所以我如何使用它们(一些是数字,另一些是文本等)在vba中很容易....

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

返回Range接口。您可以阅读更多相关信息at MSDN

  

并且,只要我在它,细胞没有类型,所以我如何使用它们(一些是数字,另一些是文本等)在vba中很容易....

单元格确实有一个类型,但它们只是对象。您必须转换为您想要的类型。因此,如果单元格是文本,则必须执行以下操作:

(string)xlSheet.Cells[row,col].Value2

xlSheet.Cells[row,col].Value2.ToString();

如果您知道它们是数字,则必须转换为数字类型。


基于编辑的评论:

因此,如果您想获得使用范围,您可以这样做:

using Excel = Microsoft.Office.Interop.Excel;

Excel.Range range = xlSheet.UsedRange;

这将为您提供工作表中的所有内容(我使用了变量xlSheet,即Excel.Worksheet)。

现在我们可以通过执行以下操作来迭代:

int rows = range.Rows.Count;
int cols = range.Columns.Count;

for(int r=1; r <= rows; r++)
{
    for(int c=1; c <= cols; c++)
    {
        Console.Write(range.Cells[r,c].Value2.ToString());
    }
    Console.WriteLine();
}

这将迭代范围,并基本上复制控制台窗口中电子表格中的内容。我希望这有帮助。我还写了一篇关于使用C#阅读Excel电子表格的博客文章,如果你愿意,你可以阅读here