如何在Excel 2007中获取最后一个活动单元格

时间:2009-03-05 22:25:05

标签: c++ excel-2007

我正在使用C ++ unmanaged和Excel 2007.我正在使用Excel4 API调用来获取用户选择的单元格范围。

当用户选择我称之为“常用”范围的内容时,此调用将返回类似“R1C1:R4C3”的范围,这正是我在应用程序中执行其他操作所需的格式。

然而,当用户决定选择整列时,这个API调用只返回一个范围,只有列,类似于“C1:C3”,这当然是一个有效的excel范围,但它对我来说意味着我有修改它,使它看起来像上面的范围;换句话说,我必须手动添加行范围。

所以我把这个范围“C1C3”改为“R1C1:R65534C3”。

也许在这一点上你已经注意到了我的问题,因为你可以看到我很难将行范围编码为Excel 2003支持的最大行数(该应用程序也适用于此版本的excel)。

这当然不是我想要的,因为一旦我得到所选范围,我就会读取该范围内的信息并使用该信息向服务器发出查询,因此想象一下用户只输入了数据直到第534行仍然我的查询将有65000行没有任何内容。

所以我的问题是如何获取用户输入数据的最后一个单元格,我认为它被称为最后一个活动单元格,所以我可以划分我的范围直到该行,请记住我正在使用非托管代码。

3 个答案:

答案 0 :(得分:3)

Excel 4 API?真的?

有一个命令xlcSelectEnd,您可以使用它来跳转到最后一个单元格,其中包含从给定单元格的任何方向输入的文本。

答案 1 :(得分:1)

尝试将range.selection转换为Range对象。

答案 2 :(得分:0)

区域获取上次使用的行

     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