HOME HELP 新規作成 新着記事 ツリー表示 スレッド表示 トピック表示 ファイル一覧 検索 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■1495 / inTopicNo.1)  Excelのシート名の取得方法
  
□投稿者/ 田代正美 -(2024/08/29(Thu) 10:47:34)
    またまたExcelについての質問です。

    Excelのワークシート名を取得する方法はないでしょうか?
    ワークシート名を取得して
    桐に渡したいのですが
    こんなことは可能なのでしょうか?

    よろしくお願いします。
引用返信 [メール受信/OFF] 削除キー/
■1496 / inTopicNo.2)  Re[1]: Excelのシート名の取得方法
□投稿者/ ONnoji -(2024/08/30(Fri) 09:25:15)
    > またまたExcelについての質問です。
    > Excelのワークシート名を取得する方法はないでしょうか?
    > ワークシート名を取得して
    > 桐に渡したいのですが
    > こんなことは可能なのでしょうか?

    直近の「Excelのシート名の変更」の投稿に対する回答と同じで、

    VBA または VBS または Windows PowerShell のどれかを使う必要がありますよ。

    ただし、これらの経験が無いと相当敷居が高くなります。

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

    ちなみに、ChatGPT(チャットGPT)日本語 無料版を使ってみると・・・

    このスクリプトでは、Excelオブジェクトを作成し、指定したExcelファイルを開いて、各シートの名前を取得しています。
    最後にExcelを閉じます。
    Excelファイルのパスを適切に指定して、上記のスクリプトを実行すると、Excelファイル内のすべてのシート名が表示されます。

    powershell
    # Excelオブジェクトを作成
    $excel = New-Object -ComObject Excel.Application

    # Excelファイルを開く
    $workbook = $excel.Workbooks.Open("C:\path\to\your\excel\file.xlsx")

    # シート名を取得
    foreach ($sheet in $workbook.Sheets) {
    Write-Output $sheet.Name
    }

    # Excelを閉じる
    $excel.Quit()

    と、シンプルなスクリプトが生成されました。

    p.s.

    現在、当方では Windows PowerShell の勉強がてら、ネット上の他のスクリプトを参照して研究しています。

    Win桐のシェル実行で何とかなりそうですが・・・

    まだ、先が遠そうです。

    決してお約束できませんが、もしも完成したらお知らせいたします。

引用返信 [メール受信/OFF] 削除キー/
■1497 / inTopicNo.3)  Re[2]: Excelのシート名の取得方法
□投稿者/ 田代正美 -(2024/08/30(Fri) 10:02:09)
    ONnojiさん

    まったくチンプンカンプンなんで
    やはり敷居が高そうですね

    桐の中で処理できるようなことを考えます。


    ありがとうございました。
引用返信 [メール受信/OFF] 削除キー/
■1498 / inTopicNo.4)  Re[3]: Excelのシート名の取得方法
□投稿者/ ONnoji -(2024/08/30(Fri) 12:14:19)
    2024/08/30(Fri) 12:39:59 編集(投稿者)

    > 桐の中で処理できるようなことを考えます。

    桐単独では無理かもしれませんけれど・・・

     ◇ ◇ ◇ ◇ ◇ ◇ ◇

    ちょっと質問させてください。

    エクセルのデータを桐へ読み込もうという目論見だと思いますが、

    現行ではどのような方法で行っているのでしょうか?

    p.s.

    現在 Windows PowerShell で実験しています。

    ワークシートの名前は簡単に見つかるのですが、

    見つかったワークシートの名前は、ひとつとは限りませんね。

    これを桐の変数に代入出来ればOKでしょうか??

    ちなみに、当方は[フォーム+イベント処理]しか出来ませんのでご了承ください。

    p.p.s.

    ひょっとして、[エクセル]コマンドで変換しているのでしょうか???

    エクセル <ワークブック名>,\
          <ワークシート名>,・・・



引用返信 [メール受信/OFF] 削除キー/
■1499 / inTopicNo.5)  Re[4]: Excelのシート名の取得方法
□投稿者/ 田代正美 -(2024/09/01(Sun) 09:03:07)
    ONnojiさん

    一括処理で期日しています。


    &シート名="1234"

    エクセル &Excel,&シート名,項目名行=する,表名=表名.tbx,上書き="する",終了状態=&実行リターン

    通常はワークシート名は1234なのですが
    たまに違うときがあるのです。
    その時にエラーになってしまうので、、、

引用返信 [メール受信/OFF] 削除キー/
■1500 / inTopicNo.6)  Re[5]: Excelのシート名の取得方法
□投稿者/ ONnoji -(2024/09/02(Mon) 06:55:52)
    2024/09/02(Mon) 08:52:24 編集(投稿者)
    2024/09/02(Mon) 08:02:04 編集(投稿者)

    > 一括処理で記述しています。
    > &シート名="1234"
    >
    > エクセル &Excel,&シート名,項目名行=する,表名=表名.tbx,上書き="する",終了状態=&実行リターン
    >
    > 通常はワークシート名は1234なのですが
    > たまに違うときがあるのです。
    > その時にエラーになってしまうので、、、

    私は[エクセル]コマンドを使ったことがありませんが・・・(^^ゞ

     エクセル <ワークブック名>,\
           <ワークシート名>,\
            変換範囲 = (<開始セル>,<終了セル>),\
             項目名行 = する|しない,\
              表名 = <文字列型の変数名>,\
               上書き = しない|する,\
                強制改行文字 = <文字>,\
                 終了状態 = <変数名>

    ↑こういうコマンドなんですね。

    > エクセル &Excel,&シート名,項目名行=する,表名=表名.tbx,上書き="する",終了状態=&実行リターン

    ↑このコマンドを実行すると、&実行リターン に

    正常終了 → 0(ゼロ)
    それ以外 → 0(ゼロ)以外の値

    が代入されますね。

    もしも、&実行リターンの値が0(ゼロ)以外の値の場合の処理はどうされていますか?
        ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    <ワークブック名>:&Excel の値は常に固定で同じ内容ですか??それとも毎回違いますか??
             ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    p.s.

    なぜこのような事をお尋ねするかというと、

    桐の[シェル実行]コマンドで VBS または Windows PowerShell のスクリプトを実行すれば、

    ワークシートの名前を変更することも、ワークシートの名前一覧を調べることも可能です。

    しかし、そこまでする必要があるのか否かがクエスチョン?なんです。

    だって、&実行リターン の値が0(ゼロ)以外の値の場合の処理をすれば良いだけの事ですから。
        ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    つまり、適切な対処法を書いた文言をオペレータに[メッセージボックス]で見せればよいのですから・・・

     if ( &実行リターン = 0 )

      通常の処理を実行

     else

      メッセージボックスを表示

     end

    しかし、もしも、VBS または Windows PowerShell のスクリプトを絡ませると、

    現在使用されている一括処理の内容がややこしくなるので、プログラムのメンテナンス(保守)が大変になるわけです。

    そこまで、リスクを負ってまでして、VBS または Windows PowerShell のスクリプトを利用する価値はあるのでしょうか?

    私( ONnoji )的には、VBS または Windows PowerShell のスクリプトを利用しない方がベターだろうと思えます。


引用返信 [メール受信/OFF] 削除キー/
■1501 / inTopicNo.7)  Re[6]: Excelのシート名の取得方法
□投稿者/ ONnoji -(2024/09/02(Mon) 13:13:05)
    2024/09/02(Mon) 21:00:35 編集(投稿者)

    > つまり、適切な対処法を書いた文言をオペレータに[メッセージボックス]で見せればよいのですから・・・
    >
    >  if ( &実行リターン = 0 )
    >
    >   通常の処理を実行
    >
    >  else
    >
    >   メッセージボックスを表示
    >
    >  end
    >
    > しかし、もしも、VBS または Windows PowerShell のスクリプトを絡ませると、
    >
    > 現在使用されている一括処理の内容がややこしくなるので、プログラムのメンテナンス(保守)が大変になるわけです。
    >
    > そこまで、リスクを負ってまでして、VBS または Windows PowerShell のスクリプトを利用する価値はあるのでしょうか?
    >
    > 私( ONnoji )的には、VBS または Windows PowerShell のスクリプトを利用しない方がベターだろうと思えます。

    一括処理を例に、エラーメッセージを簡単に表示する例を以下に示しますので参考にしてください。
            ・・・・・・・・・・・・・・・・・

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

     ** begin of program

     変数宣言 固有,文字列{ &Excel  = "hogehoge.xlsx" }
     変数宣言 固有,文字列{ &シート名 = "1234" }

     変数宣言 固有,文字列{ &gMsg }
     変数宣言 固有,整数 { &gErrorRefErrno }
     変数宣言 固有,長整数{ &gErrorRefLineno }
     変数宣言 固有,文字列{ &gErrorRefCmdname }
     変数宣言 固有,文字列{ &gErrorRefErrmsg }
     変数宣言 固有,文字列{ &gErrorRefDetail }


     ** 変数の値を未定義値に初期化する
     &gErrorRefErrno  = #u
     &gErrorRefLineno = #u
     &gErrorRefCmdname = #u
     &gErrorRefErrmsg = #u
     &gErrorRefDetail = #u

     エラー処理 手続き名 = "prcOnErrorExcellCommand"
     *エクセル &Excel,&シート名,項目名行=する,表名="表名.tbl",上書き="する",終了状態=&実行リターン
     エクセル &Excel,&シート名,項目名行=する,表名="表名.tbx",上書き="する"
     エラー処理 /* 解除を忘れずに */

     if ( &gErrorRefErrmsg = #u ) /* エラーメッセージが代入されていなければ */

      ** 通常処理

     else

      ** エラーの場合に else を実行

      ** エラー番号・エラーメッセージ・エラーの詳細・一括処理・行番号をメッセージボックスで表示する

      &gMsg =       "[エクセル]コマンドの実行に失敗しました。"
      &gMsg = &gMsg + "\n\nエラー番号:"    + #cond( &gErrorRefErrno > 0, "KU", 1, "KD" ) + #str( &gErrorRefErrno )
      &gMsg = &gMsg + "\n\nエラーメッセージ:" + &gErrorRefErrmsg
      &gMsg = &gMsg + "\n\nエラーの詳細:"   + &gErrorRefDetail
      &gMsg = &gMsg + "\n\n一括処理名:"    + &gErrorRefCmdname
      &gMsg = &gMsg + "\n\n行番号:"      + #str( &gErrorRefLineno )

      メッセージボックス "タイトル", &gMsg, アイコン = E, ボタン指定 = 1, 制御文字展開 = する

     end


     終了

     ** end of program

    手続き定義開始 prcOnErrorExcellCommand( )
     変数宣言 自動,文字列{ &icon, &title = "prcOnErrorExcellCommand( )", &gsg }

     エラー処理 /* ここでも解除を忘れずに */

     ** エラー番号・エラーメッセージ・エラーの詳細・一括処理・行番号を固有変数に代入する

     &gErrorRefErrno  = &errno
     &gErrorRefLineno = &lineno
     &gErrorRefCmdname = &cmdname
     &gErrorRefErrmsg = &errmsg
     &gErrorRefDetail = &detail

    手続き定義終了


    p.s.

    [エラー処理]コマンドは、非常に使い道が限られています。

    なので、むやみやたらと[エラー処理]コマンドを使うのは慎んでください。

    <参考>

    桐の釣魚大全のトップ > 目からウロコのデータベース桐プログラミング入門 パート2 より転載
    http://silicon7565.html.xdomain.jp/primer/primer_side_reader_part2.html#section13-2

    13.2 エラー処理コマンドはあるけれど
     エクセルのVBAを知っている人の場合、VBAの[ On Error ステートメント]に相当する桐のコマンドを使いたいという思う人が現れても不思議ではありません。
    実は、桐には[エラー処理]というコマンドがあります。※桐9-2012 までは非公開のコマンドでした。
    しかし、結論から申し上げると、桐でこの[エラー処理]コマンドを実行する必要はまずありません。
    その理由は、多くのコマンドにおいて、そのコマンドが実行出来たか否かの結果を変数に格納する[終了状態 = <変数名>]パラメータが用意されているからです。
    また、使用するファイルがディスクに存在しなかった場合の対処に使用するのもNGです。
    その場合には、#ファイルサイズ( )という関数を使用して判定できますゾ。(^^ok
    なによりも厄介なのは[エラー処理]コマンドを使うと、単純なスペルミスによる文法エラーも拾ってしまうのです。
    そうなると、何が何だかサッパリ分からなくなってプログラムのテスト(デバッグ)どころではなくなってしまいます。
    ということで、初級者は[エラー処理]コマンドを使わないと覚えてください。

    p.p.s.

    > 桐の中で処理できるようなことを考えます。

    「エラーする前に先回りして処置したい」という気持ちは確かによく分かります。

    しかし、今回の場合には「エラーする前に先回りして処置する」という行為が、桐の単独で出来ません。

    なので、先回りせずに、素直に「エラーまんねん。エラーでっせ。エラーちゅ−てんねん。エラーまんにゃわ。!」と表示することで、

    現行で使用している一括処理のメンテナンス(保守)が容易になると思いますよ。

874×515 => 250×147

1725278382.jpg
/84KB
引用返信 [メール受信/OFF] 削除キー/
■1502 / inTopicNo.8)  Re[7]: Excelのシート名の取得方法
□投稿者/ 田代正美 -(2024/09/05(Thu) 08:34:12)
    ONnojiさん

    ありがとうございます。

    勉強します。

    またわからな事がでましたら
    よろしくお願いします。
引用返信 [メール受信/OFF] 削除キー/
■1503 / inTopicNo.9)  Re[8]: Excelのシート名の取得方法
□投稿者/ ONnoji -(2024/09/05(Thu) 11:29:53)
    > 勉強します。

    サンプルを再掲載します。

    新しく一括処理を作って、以下の内容をコピー&ペーストしてください。

    こうして作った一括処理を実行すると、より具体的に分かると思いますよ

    このサンプルはコピペだけで動くように作ってありますよ。

     ** begin of program

     変数宣言 固有,文字列{ &Excel  = "hogehoge.xlsx" }
     変数宣言 固有,文字列{ &シート名 = "1234" }

     変数宣言 固有,文字列{ &gMsg }
     変数宣言 固有,整数 { &gErrorRefErrno }
     変数宣言 固有,長整数{ &gErrorRefLineno }
     変数宣言 固有,文字列{ &gErrorRefCmdname }
     変数宣言 固有,文字列{ &gErrorRefErrmsg }
     変数宣言 固有,文字列{ &gErrorRefDetail }


     ** 変数の値を未定義値に初期化する
     &gErrorRefErrno  = #u
     &gErrorRefLineno = #u
     &gErrorRefCmdname = #u
     &gErrorRefErrmsg = #u
     &gErrorRefDetail = #u

     エラー処理 手続き名 = "prcOnErrorExcellCommand"
     *エクセル &Excel,&シート名,項目名行=する,表名="表名.tbl",上書き="する",終了状態=&実行リターン
     エクセル &Excel,&シート名,項目名行=する,表名="表名.tbx",上書き="する"
     エラー処理 /* 解除を忘れずに */

     if ( &gErrorRefErrmsg = #u ) /* エラーメッセージが代入されていなければ */

      ** 通常処理

     else

      ** エラーの場合に else を実行

      ** エラー番号・エラーメッセージ・エラーの詳細・一括処理・行番号をメッセージボックスで表示する

      &gMsg =       "[エクセル]コマンドの実行に失敗しました。"
      &gMsg = &gMsg + "\n\nエラー番号:"    + #cond( &gErrorRefErrno > 0, "KU", 1, "KD" ) + #str( &gErrorRefErrno )
      &gMsg = &gMsg + "\n\nエラーメッセージ:" + &gErrorRefErrmsg
      &gMsg = &gMsg + "\n\nエラーの詳細:"   + &gErrorRefDetail
      &gMsg = &gMsg + "\n\n一括処理名:"    + &gErrorRefCmdname
      &gMsg = &gMsg + "\n\n行番号:"      + #str( &gErrorRefLineno )

      メッセージボックス "タイトル", &gMsg, アイコン = E, ボタン指定 = 1, 制御文字展開 = する

     end


     終了

     ** end of program

    手続き定義開始 prcOnErrorExcellCommand( )
     変数宣言 自動,文字列{ &icon, &title = "prcOnErrorExcellCommand( )", &gsg }

     エラー処理 /* ここでも解除を忘れずに */

     ** エラー番号・エラーメッセージ・エラーの詳細・一括処理・行番号を固有変数に代入する

     &gErrorRefErrno  = &errno
     &gErrorRefLineno = &lineno
     &gErrorRefCmdname = &cmdname
     &gErrorRefErrmsg = &errmsg
     &gErrorRefDetail = &detail

    手続き定義終了

引用返信 [メール受信/OFF] 削除キー/
■1504 / inTopicNo.10)  Re[9]: Excelのシート名の取得方法
□投稿者/ 田代正美 -(2024/09/06(Fri) 09:11:44)
    ONnojiさん

    ありがとうございます。

    作成いただいた一括処理でわからない点がでてくるかとおもいますので
    その折はよろしくお願いいたします。
引用返信 [メール受信/OFF] 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

Mode/  Pass/

HOME HELP 新規作成 新着記事 ツリー表示 スレッド表示 トピック表示 ファイル一覧 検索 過去ログ

- Child Tree -
- Antispam Version -