Как получить последнюю активную ячейку в Excel 2007
-
03-07-2019 - |
Вопрос
Я работаю с неуправляемым C ++ и Excel 2007. Я использую вызов Excel4 API, чтобы получить диапазон ячеек, выбранных пользователем.
Когда пользователь выбирает то, что я называю "общим" range, этот вызов возвращает такой диапазон, как этот «R1C1: R4C3», который является именно тем форматом, который мне нужен для выполнения других операций в моем приложении.
Однако, когда пользователь решает выбрать целые столбцы, этот вызов API возвращает диапазон только со столбцами, что-то вроде этого "C1: C3", что, конечно, является допустимым диапазоном Excel, но для меня это означает, что я нужно изменить его так, чтобы он выглядел как диапазон выше; другими словами, я должен вручную добавить диапазон строк.
Поэтому я беру этот диапазон "C1C3" и измените его на «R1C1: R65534C3».
Возможно, в этот момент вы уже заметили мою проблему, так как вы можете видеть, что я жестко кодирую диапазон строк, чтобы быть максимальным количеством строк, поддерживаемых Excel 2003 (приложение также работает с этой версией Excel). р>
Это, конечно, не то, что я ищу, потому что как только я получаю выбранный диапазон, я читаю информацию в этом диапазоне и использую эту информацию, чтобы сделать запрос к серверу, поэтому представьте, что пользователь только вводил данные до строки 534, и все равно в моем запросе будет 65000 строк без данных.
Итак, мой вопрос: как я могу получить последнюю ячейку, в которую пользователь ввел данные, я думаю, что она называется последней активной ячейкой, поэтому я могу ограничить свой диапазон до этой строки и, пожалуйста, помните, что я работаю с неуправляемой код.
Решение
Excel 4 API? Действительно?
Существует команда xlcSelectEnd, которую можно использовать для перехода к последней ячейке с текстом, введенным в нее в любом направлении от данной ячейки.
Другие советы
Попробуйте привести range.selection к объекту Range.
регион Получить последнюю использованную строку
Excel.ApplicationClass app = new Excel.ApplicationClass();
Excel.Workbook workBook = app.Workbooks.Open(_PathFile,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value);
// Get the active worksheet using sheet name or active sheet
Excel.Worksheet workSheet = (Excel.Worksheet)workBook.ActiveSheet;
// Find the last real row
int _InLastRow = workSheet.Cells.Find("*",System.Reflection.Missing.Value,
System.Reflection.Missing.Value, System.Reflection.Missing.Value, Excel.XlSearchOrder.xlByRows,Excel.XlSearchDirection.xlPrevious, false,System.Reflection.Missing.Value,System.Reflection.Missing.Value).Row;
#endregion