Нужно найти начальную и конечную точки диапазона Excel в C # - PullRequest
5 голосов
/ 18 февраля 2010

Я пытаюсь прочитать файл Excel из C #, используя COM, и могу его открыть и загрузить просто отлично. Однако я не хочу использовать все данные на листе (они расширяются ежемесячно), просто определенное подмножество, которое начинается ниже верхней части листа (строка 3 для заголовков, строка 4 для данных) и идет до конца , В настоящее время я могу получить диапазон, представляющий весь набор данных как Excel.Worksheet.UsedRange, но затем мне нужно либо манипулировать этим до требуемого диапазона, либо (предпочтительно) найти конечную точку для перехода в другой диапазон для моего фактического поиска данных. Кто-нибудь может сказать мне, как это сделать? Благодаря.

Ответы [ 4 ]

6 голосов
/ 18 февраля 2010

Я не уверен, что вы пытаетесь сделать. Но вот несколько примеров.

Предположим, у меня есть следующий диапазон:

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();
2 голосов
/ 18 февраля 2010

Хорошо, нашел ответ (после почти 3-х часов общего поиска, здесь просили 2 часа), поэтому опубликую здесь для других.

Excel.Range urange = (Excel.Range)xlWorkSheet.UsedRange; // gives us the actual range<br> string used = urange.get_Address(false, false, Excel.XlReferenceStyle.xlA1, Type.Missing, Type.Missing));

От MSDN:
public string get_Address (<br> [OptionalAttribute] Object RowAbsolute,<br> [OptionalAttribute] Object ColumnAbsolute,<br> [OptionalAttribute] XlReferenceStyle ReferenceStyle,<br> [OptionalAttribute] Object External,<br> [OptionalAttribute] Object RelativeTo<br> )
, которые, по-видимому, первые два являются флагами true / false, следующий определяется как объект Microsoft.Office.Interop.Excel.XlReferenceStyle, и я предполагаю, что External является либо ссылкой на внешний файл, либо флагомкакой-то.RelativeTo, я могу только догадываться, что это относится к произвольно определенной позиции, может быть объект диапазона, может быть строка.К сожалению, MSDN крайне редок по этой теме, поэтому я просто угадываю здесь и публикую свои догадки.Однако, используя этот код, который я опубликовал, я могу получить общее количество, используемое как «A1: B245», которое дает мне именно то, что я хочу, и затем я могу создать новый диапазон, извлекая вторую часть и затем могупродолжить

1 голос
/ 18 февраля 2010

Вы сможете использовать Range.Row , Range.Rows.Count , Range.Column и Range.Columns.Подсчитайте свойств, чтобы получить начало и конец диапазона следующим образом:

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, но все эти функции должны быть доступны в C # с COM.

1 голос
/ 18 февраля 2010

С MSDN :

"Используйте свойство End вместе со значением из перечисления XlDirection (xlUp, xlToRight, xlToLeft, xlDown), чтобы извлечь диапазон, представляющий ячейку в конце области, как если бы вы нажали клавишу описывается перечисляемым значением; "

rngDown = rng.get_End(Excel.XlDirection.xlDown);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...