2

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

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

但是,当用户决定选择整个列时,此 API 调用仅返回一个包含列的范围,例如“C1:C3”,这当然是一个有效的 excel 范围,但这对我来说意味着我必须修改它所以它看起来像上面的范围;换句话说,我必须手动将其添加到行范围。

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

也许此时您已经注意到我的问题,正如您所看到的,我将行范围硬编码为 Excel 2003 支持的最大行数(该应用程序也适用于该版本的 excel)。

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

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

4

3 回答 3

3

Excel 4 API?真的吗?

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

于 2009-03-11T04:33:33.423 回答
1

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

于 2009-03-11T02:59:48.390 回答
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
于 2009-04-16T09:43:19.757 回答