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

なでしこv1のバグや要望を書き込む掲示板
[一覧へ] > (@617) [低] [確認待ち]
@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の番号はどう管理・採番しているのか不明・・・

(#2013) r268で実装 - クジラ飛行机 (2012-07-04 16:46) /低 確認待ち
-「エクセル最右列取得」命令を追加(@617)(r268)
ありがとうございます!
お待たせしましたが、r268で実装しました!
感謝、感謝です。

(#1954)へ返信する:

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

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

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