如何使用VSTO / C#中的行号和列号来获取Excel范围?
我认为这个问题总结了一下。 给定行和列的两个整数或范围的两个angular的行和列的四个整数,如何获得该范围的范围对象。
如果范围是多个单元格:
Excel.Worksheet sheet = workbook.ActiveSheet; Excel.Range rng = (Excel.Range) sheet.get_Range(sheet.Cells[1, 1], sheet.Cells[3,3]);
范围是一个单元格的地方:
Excel.Worksheet sheet = workbook.ActiveSheet; Excel.Range rng = (Excel.Range) sheet.Cells[1, 1];
如果在Microsoft Excel 14.0对象库中使用给定的答案将引发错误。 对象不包含get_range的定义。 反而使用
int countRows = xlWorkSheetData.UsedRange.Rows.Count; int countColumns = xlWorkSheetData.UsedRange.Columns.Count; object[,] data = xlWorkSheetData.Range[xlWorkSheetData.Cells[1, 1], xlWorkSheetData.Cells[countRows, countColumns]].Cells.Value2;
你可以像这样检索值
string str = (string)(range.Cells[row, col] as Excel.Range).Value2 ;
select整个使用的范围
Excel.Range range = xlWorkSheet.UsedRange;
资源 :
http://csharp.net-informations.com/excel/csharp-read-excel.htm
炽盛
面对同样的问题,我发现最快的解决scheme是实际扫描我希望sorting的单元格的行,确定最后一行非空元素,然后select和sorting该分组。
Dim lastrow As Integer lastrow = 0 For r = 3 To 120 If Cells(r, 2) = "" Then Dim rng As Range Set rng = Range(Cells(3, 2), Cells(r - 1, 2 + 6)) rng.Select rng.Sort Key1:=Range("h3"), order1:=xlDescending, Header:=xlGuess, DataOption1:=xlSortNormal r = 205 End If Next r
我发现了一个很好的简短方法,似乎很好…
Dim x, y As Integer x = 3: y = 5 ActiveSheet.Cells(y, x).Select ActiveCell.Value = "Tada"
在这个例子中,我们select了3列和5行,然后在单元格中放置“Tada”。
UsedRange可以和“virgins”单元一起工作,但是如果你的单元格填满了过去,那么UsedRange会为你提供旧的值。
例如:
“在Excel工作表中考虑单元格A1到A5填充文本”。 在这种情况下, UsedRange必须实现为:
Long SheetRows; SheetRows = ActiveSheet.UsedRange.Rows.Count;
在执行这几行之后,一个监视SheetRowsvariables的值必须显示为5。
Q1:但是,如果A5的值被删除,会发生什么?
A1:SheetRows的值是5
Q2:为什么呢?
A2:因为MSDN定义UsedRange属性为:
获取一个Microsoft.Office.Interop.Excel.Range对象, 该 对象表示 随时包含值的 所有 单元格。
所以,问题是:存在这种行为的一些/任何解决方法?
我认为在2个select:
- 避免删除单元格内容,宁愿删除整行(右键单击行号,然后“删除行”。
- 使用CurrentRegion而不是UsedRange属性如下:
Long SheetRows; SheetRows = ActiveSheet.Range("A1").CurrentRegion.Rows.Count;
如果你想像Cells(Rows.Count, 1).End(xlUp).Row
,你可以这样做。
只需使用下面的代码:
using Excel = Microsoft.Office.Interop.Excel; string xlBk = @"D:\Test.xlsx"; Excel.Application xlApp; Excel.Workbook xlWb; Excel.Worksheet xlWs; Excel.Range rng; int iLast; xlApp = new Excel.Application(); xlWb = xlApp.Workbooks.Open(xlBk, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); xlWs = (Excel.Worksheet)xlWb.Worksheets.get_Item(1); iLast = xlWs.Rows.Count; rng = (Excel.Range)xlWs.Cells[iLast, 1]; iLast = rng.get_End(Excel.XlDirection.xlUp).Row;