2

私は C++ unmanaged と 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

region 最後に使用した行を取得

     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 に答える