我正在尝试使用COM从C#读取excel文件,并且可以将其打开并加载就好了。但是,我不想使用工作表上的所有数据(它每月扩展),只是从工作表顶部下方开始的某个子集(标题第3行,数据第4行)并结束。我现在可以得到一个表示整个数据集的范围为Excel.Worksheet.UsedRange
,但接下来我需要将其操作到所需的范围,或者(最好)找到终点以传递到我的实际数据的另一个范围恢复。谁能告诉我怎么做这些?感谢。
答案 0 :(得分:6)
我不确定你要做什么。但这里有一些例子。
假设我有以下范围:
Excel.Worksheet sheet = this.Application.ActiveSheet as Excel.Worksheet;
Excel.Range range = sheet.get_Range("A1", "B5") as Excel.Range;
将你的范围向下移动n
- 行数:
int n = 1;
int rows = range.Rows.Count;
int cols = range.Columns.Count;
Excel.Range newRange = range.get_Offset(n, 0).get_Resize(rows-n,cols);
newRange.Select(); //will select the new range will be 1 row lower
向上移动你的底线
Excel.Range newRange = range.get_Resize(rows-n,cols);
newRange.Select(); //will select the new range will be 1 row higher
我认为你可以弄清楚如何将它左右移动。
get_Offset()
将移动整个范围,然后您需要调整范围。
编辑:现在我知道你想要什么了。
选择最后一个单元格:
Excel.Range lastCell = range.Cells[rows, cols] as Excel.Range;
lastCell.Select();
现在您可以像这样使用自己的起点:
Excel.Range newRange = sheet.get_Range("B1", lastCell);
newRange.Select();
答案 1 :(得分:2)
好的,找到答案(经过近3个小时的总搜索,在这里问了2个小时),所以会在这里发帖给别人。
Excel.Range urange = (Excel.Range)xlWorkSheet.UsedRange; // gives us the actual range
string used = urange.get_Address(false, false, Excel.XlReferenceStyle.xlA1, Type.Missing, Type.Missing));
来自MSDN:
public string get_Address (
[OptionalAttribute] Object RowAbsolute,
[OptionalAttribute] Object ColumnAbsolute,
[OptionalAttribute] XlReferenceStyle ReferenceStyle,
[OptionalAttribute] Object External,
[OptionalAttribute] Object RelativeTo
)
显然前两个是真/假标志,下一个被定义为Microsoft.Office.Interop.Excel.XlReferenceStyle
对象,我猜测外部是对外部文件的引用,或者是某种标志。 RelativeTo,我只能猜测它指的是一个定义的任意位置,也许是一个范围对象,也许是一个字符串。不幸的是,MSDN在这个主题上非常稀少,所以我只是猜测并发布我的猜测。但是,使用我发布的代码,我能够检索用作“A1:B245”的总数,这正是我想要的,然后我可以通过提取第二部分创建一个新的范围,然后可以继续。
答案 2 :(得分:1)
来自MSDN:
“使用End属性以及XlDirection枚举中的值(xlUp,xlToRight,xlToLeft,xlDown)来检索表示区域末尾单元格的范围,就像您按下了键一样由枚举值描述;“
rngDown = rng.get_End(Excel.XlDirection.xlDown);
答案 3 :(得分:1)
您应该可以使用Range.Row,Range.Rows.Count,Range.Column和Range.Columns.Count属性来获取范围的开头和结尾,如下所示:
Dim used As Range, first As Range, last As Range
Set used = Sheet1.UsedRange
Set first = Sheet1.Cells(used.Row, used.Column)
Set last = Sheet1.Cells(used.Row + used.Rows.Count, used.Column + used.Columns.Count)
MsgBox ("First: " + first.Address + " Last: " + last.Address)
该示例代码在VBA中,但所有这些函数都应该在带有COM的C#中可用。