Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Onedriveフォルダー内の別excelブックのセルにスクリプトの実行で得た変数を入力したい。

解決したいこと

Power automate(クラウド無償版)とofficeスクリプトを使用して、Excelブック(book1.xlsx)から別フォルダのExcelブック上(book2.xlsx)のシートのセルにスクリプトで得た変数(数値型)を入力しようとしてます。
手順は以下の通りです。
①book1のシート1から各行の値(日付、7種の商品別個数)を配列で変数(kosu)に格納。
タイトルなし.02png.png

②book2のシート1のA列から、kosu[0]の日付の行を検索する。
③book2シート1の1列目の商品ごと(マフラーなど)の個数(kosu[1]~[6])を13:00のセルから1時間ごとに入力させる。
タイトルなし.01png.png

発生している問題・エラー

①のスクリプトで変数を取得し、Power automateにて、入力先のbook2のプロパティを取得することまではできたのですが、②から③へのアプローチに迷っています。Power automateのみで実行可能なのか、またはofficeスクリプトを使用しないとできないのか?この先からの方法がなかなかわかりませんのでご教授いただければ幸いです。
タイトルなし03.png

自分で試したこと

Power automateのコネクタや、スクリプトの記述など参考。

0

1Answer

book2のスクリプトで、Power automateから受け取る引数を指定してあげればよいはずです。

function main(workbook: ExcelScript.Workbook, practice: string) {
	let selectedSheet = workbook.getActiveWorksheet();
	//Set range Al on selectedSheet
	selectedSheet.getRange("A1").setValue(practice);
}

↑このコード例では、引数practiceがPower automateから受け取る変数です。ここでは文字列で受け取った変数を、このブックのA1セルにセットしています。

数値ならNumberです。数値の配列ならNumber[]ですが、配列が受け取れるかは試していません。

1Like

Comments

  1. @takaekokaz

    Questioner

    nak435さま
    ありがとうございます。
    以下のコードのように、配列で試してみました。kosuがひとつ前のスクリプトの実行で得た戻り値です。

    function main(workbook: ExcelScript.Workbook, kosu:object[]) {
    let selectedSheet = workbook.getWorksheet("NDOX");
    //Set range Al on selectedSheet;
    selectedSheet.getRange("D431").setValue(kosu[1]);
    }

    フロー自体は正常実行されたのですが、以下のように上記のスクリプト実行のoutputにはkosu[1]が入っていないようです。結果、D431のセルは空白のままでした。
    タイトルなし.png

  2. book2へ渡す変数をセットしているフローの中身のスクショを撮り、ここへ貼ることは可能でしょうか? (何個の要素の配列を渡したのかを見たい)

    また、配列だから引き継げないのか、そもそも引き継げてないのかを切り分けたいので、配列以外(例えば、単なる文字列)を渡すことは可能でしょうか?

  3. @takaekokaz

    Questioner

    >book2へ渡す変数をセットしているフローの中身のスクショを撮り、ここへ貼ることは>可能でしょうか? (何個の要素の配列を渡したのかを見たい)
    下記にスクショをフロー順に表示します。変数は文字列1個、数値7個、合計8つの要素数です。スクショ上は7つしかありませんが、生データの都合上、1個は空の状態です。

    タイトルなし.png
    2
    タイトルなし02.png
    3
    タイトルなし03.png
    4
    タイトルなし04.png

    5 フロー自体は正常実行されたが、上記のスクリプト実行1のoutputにはkosu[1]が入っていない。

  4. 上記2で「変数kosuをobject型で初期化」とありますが、ここを配列型(アレイ)に変更することはできますか?
    当方の擬似環境で、配列型とすることでbook2でkosu[1]に入っていることを確認しました。

    ちなみに、変数non-doxの型は何でしょうか?
    JSONでもないし、配列でもないし、不思議な構造をしています。このせいでobject型にしたのかなとも想定できますが。。。
    book1の戻り値は配列型だと思いますが、「変数の設定1」で変数non-doxへ設定したところのスクショが見てみたいです。

  5. @takaekokaz

    Questioner

    変数non-doxはobject型です。
    image.png

    変数の設定1のパラメータです。
    image.png

    ちなみにnon-dox、kosuの変数をarray型に変更しようとすると以下の警告が出て、保存できません。変数にstringがあるから?みたいなことを言うてるようです。
    image.png

  6. book1の戻り値は配列型だと想定したのですが、この時点ですでにobjectのようですね。book1の戻り値を定義している箇所のスクショを見せてもらえないでしょうか。

  7. 当方の環境でも再現できました。
    book1の戻りを受け取る変数の設定で「出力」を指定していますが、ここを「result」に変更してください。そうすれば、その先の変数はObjectではなく、配列(アレイ)で受け取れるようになります。

    scr1.png

    もし、「result」が選択肢に現れない場合は、book1のスクリプト「件数計算その1」の最後に行を追加してreturn result;を記載ください。

  8. @takaekokaz

    Questioner

    book1のスクリプトでkosuを定義し、結果を表しているスクショです。
    image.png

    image.png

    returnのkosuの中身は配列のようです。ちなみに配列内の変数Hidukeは文字列、あとの変数は数値型です。

    image.png

    スクリプトの実行後もresultは配列型のようです。
    image.png

  9. 上のスクショで確認しました。
    先の回答を訂正します。

    scr1.png

    book1の戻りを受け取る変数の設定で「出力」を指定していますが、ここを「result」に変更してください。

    book1の戻りを受け取る変数の設定で「出力」を指定していますが、ここを「kosu」に変更してください。

    そうすれば、その先の変数はObjectではなく、配列(アレイ)で受け取れるようになります。

  10. @takaekokaz

    Questioner

    ?以下のようにですか?
    image.png
    動的な変数にはkosuは出てきません。kosuはこれ以降の変数を初期化する1ではじめて定義するので、、、。
    image.png

  11. すみません。やはり「result」に変更してください。

  12. @takaekokaz

    Questioner

    resultに変えて、以降のkosuをarray型に初期化すればよいのでしょうか?
    image.png

  13. resultに変えて、以降のkosuをarray型に初期化すればよいのでしょうか?

    そうです。
    non-dox と kosu の変数型を配列(array)型に変更してください(resultに変えることで、array型に変更できるはずです)。

  14. @takaekokaz

    Questioner

    non-dox,kosuともにarrayで初期化しました。non-doxの設定もresultにしてます。
    kosuの変数設定にもnon-doxがarrayの形で設定されています。
    image.png

    ただ、最後のスクリプトの実行1で実行できないようです。
    image.png
    image.png
    ひょっとしてスクリプトの変数宣言が間違っているのでしょうか?
    最後のスクリプトの実行の全文がこちらです。
    image.png

  15. 以下のように変更してください。

    - function main(workbook: ExcelScript.Workbook, kosu: string|number[]) {
    
    + function main(workbook: ExcelScript.Workbook, kosu: object[]) {
    

    文字列と数値が混ざったArrayなので、objectの配列で受け取ります。
    セルにセットすると、Excelがよしなにやってくれます。


    追伸;

    console.log(kosu);の行を追加すると、配列の全体が確認できます。

  16. @takaekokaz

    Questioner

    object[]にしたところ、kosu1が指定の別ブックのセルに入力されました。
    image.png
    logにも配列の形で入っています。
    image.png

    今回の紆余曲折の原因は、
    スクリプト実行後の「出力」と「result」の違い。
    power automateの「変数の初期化」で決める型と、office scriptで宣言する変数の型が同一でないといけない、、scriptでobject[]の戻り値は、初期化の際もobject型にしないといけない、みたいな理解が間違いだったこと?power automateから別スクリプトに変数を渡すときの型の指定方法の理解が足りなかったようです。

    懇切丁寧に教えていただきまして、心から御礼申し上げます。

  17. うまく出来てよかったですね✌️

  18. @takaekokaz

    Questioner

    @nak435 さま
    先日はご指導いただきありがとうございます。
    実はまたトラブってまして、、、。
    先日はうまくいったのですが、今度はスクリプトの実行1で以下のスクショのエラーが出ました。
    image.png
    直前の変数kosuの受け渡しは触っておりません。arrayの形で納まっています。
    image.png

    最初のスクショで、スクリプトの28行目でundefinedとでたので、image.png
    range.find()の引数である変数OPSDATEを調べました。
    kosu[0]"23/12/08→文字列化→EXCELの書式(月/日/西暦)に合わせて"12/08/2023”を変数OPSDATEに格納、B列からその日付の行をfindで取得できていたのですが、現在次のスクショにあるように配列のすべての数値がkosu[0]に格納されているようです。そのため日付の行が取得できない状態です。
    image.png

  19. 何も変えていないのに、急にエラーとなるとは考えにくいです。この一連のフローのどこかを変更していませんか?

    エラーとなったスクリプトの先頭に、console.log(kosu);を入れて、受け取った内容を確認できますか?
    また、このスクリプトの先頭からエラーとなったgetRowIndexの行までのコードを貼れますか。

  20. @takaekokaz

    Questioner

    @nak435 さま
    すいません、初歩的なミスでした。
    転記先のファイルがあるフォルダーには一つだけのファイルしかない設定でしたが、いつの間にか複数ファイルありました。ですので、変数kosu[]はスクリプトの実行1のパラメータには[ kosu[] ]と書かれていて、kosu[]自体が配列0番になっていたようです。道理ですべての数値がつながっていたわけです。
    フォルダーを一つにしてスクリプト実行1が入っていたループをはずせば元通りに動きました。お手数をおかけして申し訳ありません。

Your answer might help someone💌