我正在将应用程序从vba转换为C#。它进展缓慢。这是我的第一个挑战......
在vba中,我可以将Excel范围分配给vba二维数组:
Dim strSheetArray as Variant
strSheetArray = xlSH.UsedRange
...
debug.print strSheetArray[1,2] 'etc.
当我转换为C#时,“UsedRange”属性似乎返回一个对象。我似乎无法像数组那样使用该对象,从而导致代码时错误。那么,我如何引用返回的对象,以便我可以遍历它?
并且,只要我在它,细胞没有类型,所以我如何使用它们(一些是数字,另一些是文本等)在vba中很容易....
感谢您的帮助。
答案 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。