「なでしこv1」開発掲示板

なでしこv1のバグや要望を書き込む掲示板

@617■ (#1954) Excelの機能に最右列取得の追加の要望 - うぇいく (2012-01-20 09:39) /低 アイデア
Excelに最下行取得が有るが、最右列取得は無いっぽい。あれば便利なのではないかと。
 下記に記載のような感じに修正(追加)することでわりと他の動作に影響せずに追加できそうです。もっとも、ソースが修正されても、リリースが無いと意味は無いんですが・・・

 あとは、ふと、あちこちに最大列番号/最大行番号を直接埋め込んで書かれているので、最近の環境でははうまく動かなかったりとかが気になっています。
(このソースで言うと、'IV'というのがマジックナンバーで256列目の意味。Excel2007では16384列ありますから、おそらくは正しく動作しません。当方は2003のため、うまく行かないのかどうかは未確認。)


■dll_office_function.pasの適切な箇所に以下を追加

function excel_getLastCol(h: DWORD): PHiValue; stdcall;
var
  row: string;
  v: PHiValue;
begin
  v := nako_getFuncArg(h, 0);
  if v = nil then
  begin
    row := '1';
  end else
  begin
    row := hi_str(v);
  end;
  Result := hi_newInt(excel.getLastCol(row));
end;

  AddFunc  ('エクセル最右列取得','{=1}ROWの|ROWで', ???, excel_getLastCol,'Excelの行番号ROW(123..で指定)の最右列を調べて返す。','えくせるさいうれつしゅとく');

■unit_office.psaの適切な箇所に以下を追加
    function getLastCol(col:string):Integer;

  xlToLeft = -4159;

function TKExcel.getLastCol(row: string): Integer;
var
  v1, v2:Variant;
begin
  E_WorkSheet := E_Application.ActiveSheet;
  v1 := E_WorkSheet.Range['IV' + row];
  v2 := v1.End[xlToLeft];
  Result := v2.column;
  v1 := Unassigned;
  v2 := Unassigned;
end;


# AddFuncの番号はどう管理・採番しているのか不明・・・
Excelの機能に最右列取得の追加の要望 / うぇいく (2012-01-20 09:39) (#1954)/ 低 アイデア
  r268で実装 / クジラ飛行机 (2012-07-04 16:46) (#2013)/ 低 確認待ち

(#1954)へ返信する:

👆お手数ですが、いたずら防止のために、「真夏」の読み方を記入してください。

編集時に使うキーを入力(省略可能)

画像ファイル(最大300KB)を添付可能