2023年4月16日日曜日

VBAで系列を追加する jpegをpptスライドに貼る pythonでs2pファイルをde-embedする

Chat-GPTに教えてもらいました。あいつ凄いな。


vbaで散布図に系列を追加する
系列の順序を指定したい場合、非表示の系列(.IsFiltered = True)があるとPlotOrderが機能しないので.Formulaプロパティで順序を指定することにしました。Formulaプロパティの操作はエラーがおきやすいので注意。withを使ったほうが速いらしいのでwithを入れました。

Sub AddNewSeries3()
    Dim myChart As Chart
    Set myChart = ActiveSheet.ChartObjects("Chart 1").Chart
   
    Dim mySeries As Series
    Set mySeries = myChart.SeriesCollection.NewSeries
   
    With mySeries
        'Name,X,Y,Order
        .Formula = "=SERIES(Sheet3!$A$1,Sheet3!$A$2:$A$6,Sheet3!$B$2:$B$6,3)"
       
        'set the marker type and size
        .MarkerStyle = xlMarkerStyleCircle
        .MarkerSize = 8
       
        'set the line type and color
        .ChartType = xlXYScatterLines
        .Format.Line.Weight = 2
        .Format.Line.ForeColor.RGB = RGB(255, 0, 0)
    End With
End Sub


pptでフォルダ内のjpegファイルをpptの各ページに貼り付ける。

Sub InsertImagesToSlides()
    Dim imagePath As String
    Dim imageFiles() As String
    Dim i As Integer
    Dim slide As Slide
    Dim slideIndex As Integer
   
    ' Specify the path to the folder containing the JPEG files
    imagePath = "C:\Path\To\Your\Images\Folder\"
   
    ' Collect all JPEG files in the specified folder
    imageFiles = GetFilesInFolder(imagePath, "*.jpg")
   
    ' Create a new PowerPoint presentation
    Dim pptApp As Object
    Set pptApp = CreateObject("PowerPoint.Application")
    pptApp.Visible = True
    Dim pptPres As Object
    Set pptPres = pptApp.Presentations.Add
   
    ' Loop through the image files and insert each one into a new slide
    slideIndex = 1
    For i = LBound(imageFiles) To UBound(imageFiles)
        Set slide = pptPres.Slides.Add(slideIndex, 12) ' 12 represents the slide layout (blank slide)
        slide.Shapes.AddPicture FileName:=imagePath & imageFiles(i), LinkToFile:=msoFalse, SaveWithDocument:=msoTrue, Left:=0, Top:=0, Width:=pptPres.PageSetup.SlideWidth, Height:=pptPres.PageSetup.SlideHeight
        slideIndex = slideIndex + 1
    Next i
   
    ' Clean up
    Set slide = Nothing
    Set pptPres = Nothing
    Set pptApp = Nothing
   
    MsgBox "Images inserted successfully!"
End Sub

Function GetFilesInFolder(folderPath As String, filePattern As String) As String()
    Dim files() As String
    Dim file As String
    Dim i As Integer
   
    file = Dir(folderPath & filePattern)
    i = 0
   
    Do While file <> ""
        ReDim Preserve files(i)
        files(i) = file
        i = i + 1
        file = Dir
    Loop
   
    GetFilesInFolder = files
End Function


pythonでサブフォルダ[rename]内のすべてのファイルについて、ファイル名先頭の数字(アンダーバー区切り)を3桁で0埋めしてリネーム

import os, re

def main():
    for f in os.listdir("resize"):
 
        ff=f.split('_',1)
        ff[0]='{0:03d}'.format(int(ff[0]))
        f2="_".join(ff)
        of = "resize/" + f
        nf2="resize/" + f2
        try:
            os.rename(of, nf2)
            print(of, " >> ", nf2)
        except:
            print(u"リネーム前と後が同じです。", nf2)

if __name__ == '__main__':
    main()



pythonでtouchstone file をde-embedする。
ドラッグアンドドロップや引数での処理に対応したいけどpathの処理がうまく理解できず、残課題です。

import skrf as rf
from os import path

mypath =path.dirname(__file__)
evb1 = rf.Network(path.join(mypath,"a.s2p"))
evb2 = rf.Network(path.join(mypath,"b.s2p"))
dut = rf.Network(path.join(mypath,"dut.s2p"))

# evb2.renumber([0,1],[1,0])

evb1_intp=evb1.interpolate(dut.frequency)
evb2_intp=evb2.interpolate(dut.frequency)

dut_de=evb1_intp.inv ** dut ** evb2_intp.inv

dut_de.write_touchstone(path.join(mypath,"dut_de-embed3.s2p"))

2023年3月3日金曜日

VBAでcsvファイルを開く

 VBAでcsvファイルを開く

QueryTableで開くと速いという記事を見つけたので試してみた。別に早くない。区切り文字が決まっているならline inputで1行づつ読んでsplitして配列に入れて貼り付けるほうが早い。


sub open_csv()

    Dim msh, fname

    fname ="C:\local\test.csv"

    msh ="test"

    Sheets.Add(After:=Sheets(Sheets.Count)).Name  = msh

    Set ws = Sheets(msh)

    Set qt = ws.QueryTables.Add(Connection:="TEXT;" & fname, Destination:=ws.Range("A1")) 

    With qt

        .TextFilePlatform = 932          ' 文字コードを指定

        .TextFileParseType = xlDelimited ' 区切り文字の形式

        .TextFileCommaDelimiter = True   ' カンマ区切り

        .RefreshStyle = xlOverwriteCells ' セルに上書き

        .Refresh                         ' データを表示

        .Delete                          ' CSV との接続を解除

    End With


End Sub



VBAで複素数の計算とSparameterの変換

Excel VBAで複素数の計算

vbaで複素数を扱う場合、WorkSheetFunctionを使うより自分で関数を作ったほうがかなり速い。



'複素数の型宣言
Type Complex
    re As Double
    im As Double
End Type


'VBA 複素数の定義
Function CPX(a As Double, b As Double) As Complex
    CPX.re = a
    CPX.im = b
End Function

Function CPXR(a As Complex) As Double
    CPXR = a.re
End Function

Function CPXI(a As Complex) As Double
    CPXI = a.im
End Function

Function CPXABS(z As Complex) As Double
    CPXABS = Sqr(z.re ^ 2 + z.im ^ 2)
End Function

Function CPXSUM(z1 As Complex, z2 As Complex) As Complex
    Dim z As Complex
    z.re = z1.re + z2.re
    z.im = z1.im + z2.im
    CPXSUM = z
End Function

Function CPXSUB(z1 As Complex, z2 As Complex) As Complex
    Dim z As Complex
    z.re = z1.re - z2.re
    z.im = z1.im - z2.im
    CPXSUB = z
End Function

Function CPXPRD(z1 As Complex, z2 As Complex) As Complex
    Dim z As Complex
    z.re = z1.re * z2.re - z1.im * z2.im
    z.im = z1.re * z2.im + z1.im * z2.re
    CPXPRD = z
End Function


Function CPXDIV(z1 As Complex, z2 As Complex) As Complex
    Dim z As Complex
    Dim k As Double
    k = z2.re ^ 2 + z2.im ^ 2
    z.re = (z1.re * z2.re + z1.im * z2.im) / k
    z.im = (z1.im * z2.re - z1.re * z2.im) / k
    CPXDIV = z
End Function



vbaでSパラメータを処理するときのフォーマット変換とk値やMAGの算出

Function RItoDB(r, i)
    RItoDB = 20 * Log(Sqr((r ^ 2) + (i ^ 2))) / Log(10)
End Function

Function RItoMAG(r, i)
    RItoMAG = Sqr((r ^ 2) + (i ^ 2))
End Function

Function RItoANG(r, i)
    RItoANG = WorksheetFunction.Degrees(WorksheetFunction.Atan2(r, i))
End Function

Function LINtoDB(mag)
    LINtoDB = 20 * Log(mag) / Log(10)
End Function


s11 = CPX(S_11R, S_11I)
s21 = CPX(S_21R, S_21I)
s12 = CPX(S_12R, S_12I)
s22 = CPX(S_22R, S_22I)

' calculation MAG k
d = CPXABS(CPXSUB(CPXPRD(s11, s22), CPXPRD(s12, s21)))
bb = (1 + CPXABS(s11) * CPXABS(s11) - CPXABS(s22) * CPXABS(s22) - d * d)
k = (1 - CPXABS(s11) * CPXABS(s11) - CPXABS(s22) * CPXABS(s22) + d * d) / (2 * CPXABS(CPXPRD(s12, s21)))
If (1 - CPXABS(s11)) <> 0 Then vswr1 = (1 + CPXABS(s11)) / (1 - CPXABS(s11))
If (1 - CPXABS(s22)) <> 0 Then vswr2 = (1 + CPXABS(s22)) / (1 - CPXABS(s22))
msg = 10 * (Log(CPXABS(s21) / CPXABS(s12)) / Log(10))
If bb > 0 Then mag = msg - 10 * (Log(k * 1 + Sqr(k * k - 1))) / Log(10)

2022年12月11日日曜日

オズの魔法使いシリーズ The Wonderful Wizard of Oz

 オズの魔法使いシリーズ  


1. The Wonderful Wizard of Oz

有名な1作目。

Dorothy 主人公。カンサス出身の女の子。

Scarecrow カカシ。続編でも頻繁に出てくる。魔法生物ではないが、同等のチート能力(食べない、眠らない、疲れない)を持つ。ただし、火や水に弱いため、まだ納得できる。

Tin Woodman 木こり。続編でもたまに出てくる。やさしくて良いやつ。彼も魔法生物ではないのにチート能力を持つ。水に弱いが武器もあり、カカシより能力としては高い。

Cowardly Lion ライオン。珍しく普通の動物。続編では主にちょい役。

Wizard of Oz 魔法使い。続編ではかなりパワーアップして頻繁に活躍する。


2. The Marvelous Land of Oz

オズの国の体制が出来上がる話。以降の続編では基本的にこの体制が続くことになる。

Tip 主人公の少年。ほとんどの続編に出てくる。

Jack Pumpkinhead 魔法生物。おとなしい。

Sawhorse ヘボい見た目とは裏腹に、オズシリーズで最強の魔法生物。性格も超強気。続編でも頻繁に登場し、大活躍する。

Jinjur 女の子。軽いノリでエメラルドシティを制圧する。


3. Ozma of Oz

2作目にドロシーが出なかったことにかなりの苦情が来たみたいで、ドロシーが出てくる。

Billina ニワトリ。珍しく普通の動物。性格が超強気。

Tik-Tok ゼンマイ駆動のロボ。

Nome King 地下の王様。気性が荒い。続編でもよく出てくる。いろいろ大変。


4. Dorothy and the Wizard in Oz

地割れに飲み込まれて地下に落ちる。Ozのおっさんがエメラルドシティに帰ってくる。個人的にはシリーズ一番のそりゃないだろエンド。

Zeb ドロシーのいとこ。続編には登場しない。

Jim Zebの馬。続編には登場しない。

Eureka ネコ。覚えていない。


5. The Road to Oz

みんな大好きShaggy Manが出てくる。というかこのお話ではまともなのは彼くらい。
ここで出てくるButton-BrightやPolychromeは全く役に立たない。Button-Brightに至ってはI don't know以外しゃべっていないと思う。

Syaggy Man けばだってるだけでまともなおじさん。安定感抜群。オズシリーズの良心。

Button-Bright 3~4歳くらいの男の子。すぐ迷子になる。I don't knowしか言わない。この話では全く役に立たないが続編で(人間的に)成長した姿が見られる。

Polychrome 虹の娘。踊りまくる。Button-Bright同様に役に立たない。彼女も続編で(人間的に)成長した姿が見られる。


6. The Emerald City of Oz

Nome Kingが攻め入ってくる話。作者としてはいったん終わりにしたかったようだ。


7. The Patchwork Girl of Oz

たぶん作者はほかのシリーズを作りたかったけど挫折してオズシリーズに戻ってきた。

Scraps いわゆるPatchwork Girl。Crazyと言われることが多いが、オズシリーズの中ではまともな方。ひたすらポジティブ。

Ojo Munchkinの少年。 Ojo the unluckyと呼ばれるが、そうでもない。

Uncle Nunkie 一つの単語しかしゃべらない。理由はわからないけど、とても好きなキャラ。


8. Tik-Tok of Oz

Tik-Tokはそんなに活躍しない。みんな大好きShaggy Manがお兄ちゃんを助けに行く。

Betsy Bobbin 女の子。

Hank ラバ。超強気。


9. The Scarecrow of Oz

前半がものすごく地味で読むのがつらい。Button-Brightが成長して話が通じるようになっている。このへんのキャラは別の小説から持ってきたようだ。Scarecrowはそんなに活躍しない。いつも謙虚な彼が終盤に超強気で現れる。その割に無策。

Trot 女の子。

Cap'n Bill  片足の船長。

Ork 鳥。しっぽがプロペラになっている。


10. Rinkitink in Oz

オズシリーズとはほとんど関係ない。たぶん別の話として作っていて、なんらかの理由でオズシリーズに組み込まれた。申し訳程度にノームキングが出てくる。

Inga 主人公の王子様。国を滅ぼされてひどい目に合う。

King Rinkitink しゃれを言ってひたすら笑っている王様。英語学習者には笑いのツボが少し難しい。

Bilbil ヤギ。口が悪いが本当はいいやつ。


11. The Lost Princess of Oz

Ozmaと魔法関連の道具が消えるてみんなで探しに行くというストーリー。各種チート道具を完封してオズ一味を手玉に取る悪役がいつになく強力。

Frogman でかいカエル。知識人ぶっている。

Cayke the Cookie Maker クッキー職人。フライパンをなくして探しに行く。珍しくまとも。


12. The Tin Woodman of Oz

 みんな大好きTin WoodmanとScarecrowが旅をするお話。前作最後でも少しだけこの2人の掛け合いが見られたが、今作では1冊たっぷり楽しめる。Polychromeが出てくるが、すっかり成長してまともになっている。

Woot 少年。珍しくバックグラウンドなどが一切説明されずにいきなり出てくる。

Captain Fyter Tin Woodmanのそっくりさん。

Chopfyt ニコイチの人。ろくでなしとして書かれている。


13. The Magic of Oz

ひみつの言葉を使った魔法をめぐるお話。悪役も駆け引きがあってなかなか楽しめる。

Kiki Aru  Hyupの青年。お父さんのメモから魔法を習得

Bini Aru  Kikiのお父さん。失われた先祖の魔法を解き明かす。

Ruggido  元ノームキング。記憶を失ったりしてもやっぱり悪い人として再登場した。典型的な悪い人として作者も使いやすいのだろう。


14. Glinda of Oz

作者Baumさんの最後の作品。いつもチートなOzmaやGlindaが珍しくお手上げ。

Queen Coo-ee-oh Skeezersの女王様 悪い人

Lady Aurex Skeezersの良い人

Ervic  Skeezersの良い人 頭がよく大活躍する

Su-dic  Flatheadの王様 悪い人

Red Reera パワフルYookoohoo 怪物というか魔法使いというか


15. The Royal Book of Oz 

ボームさんが亡くなり、Ruth Plumly Thompsonさんに交代した1作目
Family Tree(家系図)とScarecrowがぶら下がっていたBean PoleのTreeとかけている。こういった言葉遊びがノンネイティブにはわかりづらい。

 Sir Hokus of Pokes 騎士の人

Chang Wang Woe Silver Islandの偉い人

Happy Toko Silver Islandの元奴隷、Scarecrowと仲良し

Comfortable Camel ラクダ Wish Roadで出会った。Karawan Bashiとよく言うが、調べても意味やニュアンスが分からない

Doubtful Dromedary ヒトコブラクダ Wish Roadで出会った 

A-B-Sea Serpent Scarecrowと川で出合った

Rattle Snake Scarecrowと川で出合った



16. Kabumpo in Oz 

Pumperdinkという王国の王子様が象のKabumpoと一緒に嫁を探しに行く話。
作者の好みだと思うけど言葉遊びで辞書に載っていない単語が多いので英語学習者には厳しい。お話自体は前作より面白く、読みやすかった。


Pompadore 王子様。自分がお姫様と結婚しないと国をつぶすと脅されて大変。

Kabumpo 象さん。Elegant Elephantと言われる。

Wag うさぎ。魔法の薬で大きくなる。子音を入れ替えてしゃべる。

Peg Amy 木の人形。魔法の薬で大きくなる。

Ruggedo 悪役として使いやすいのかすごくよく出てくるNome King。

Glegg 魔法使い。Glegg's Box of Mixed Magicという魔法入りの箱を作成。

The Runaway Country 島みたいなのがしゃべったり走ったりする。ついていけない。


17. The Cowardly Lion of Oz


Notta Bit More 主人公のピエロの人 

Bob Up (Bobby Downs) 孤児の男の子

Nickadoodle unの国にいた鳥 魔法使い?

Crunch 岩人間 超問題児。

Mustafa Mudgeの国の王様でトラ好き


18. Grampa in Oz 







2022年10月2日日曜日

洋書の登場人物

洋書の登場人物まとめ 

Kindleで無料もしくは低価格で買える洋書の登場人物をまとめていこうと思います。
読んでいてわからなくなってしまった人向け。
未読で事前情報を全く入れたくない人は避けてください。


(1) Too Many Crooks Spoil the Plot (A Ditie Brown Mystery) 
Sarah Osborne 
https://www.amazon.co.jp/Too-Many-Crooks-Spoil-Plot/dp/1516108108

Mabel Brown (Ditie) 主人公。 小児科の医師。少しふくよか。
Tommy                   主人公の兄。弁護士。
Ellie                        主人公の幼馴染。美人。LucieとJasonの2人の子供をDitieに預けた。
Lurlean                   主人公の友人。
美人。フランス語を織り交ぜて話す。
Mason Garret           探偵。本書の殺人事件を担当する。
Dan                        ボディーガード。Masonの友人。
Charie Flack            サンドラ社の新商品開発部をクビになった。
Marie  Vanderling     サンドラ社の情報通の人。Lurleanの友達。
Billy Joe                  サンドラ社の偉い人の孫。悪くて有名。
Schmiddy                警察の人。サイバー犯罪担当だけど殺された。
Victoria                   Ditieの上司。
Hermione                犬。
Majestic                  猫。
Kathleen                サンドラ社の偉い人の娘
Amy                      Masonの妻。癌で亡くなった。
xxx                    主人公の元カレ。
Eddie                    Masonの母親。元警官。
Aunt Therese        Lurleanのおばさん?Ditieは名前を聞いたことがなかった。

(2) The Super-Secret Science Club: Case of the Disappearing Glass
S.C. Davis 著
https://www.amazon.co.jp/Super-Secret-Science-Club-Disappearing-Glass/dp/0997190507

Jenna                            主人公 女
Chase Ortiz                    大きい 男
Britt Schwartz                か弱い 女
Alexandra Carmichael      スポーツ得意 女
Ethan Webb                    頭良い 人気ない New kid 男
Wesley Nguyen             背が高い 黒い服 パンク お気に入り 男
Mr Gregory                    理科の先生
Alma Rossetti                Jennaの友達 NYから越してきた  女
Miss Mason                    担任
Timmy                           Almaに席を取られた 男




2022年9月19日月曜日

WSHでクリップボードの内容をpptに貼り付け

 WSHでクリップボードの内容をpptに貼り付け


動作未確認です。




'sub pptpaste
    'On Error resume Next

    Dim objWshShell,PPTapp
    Set objWshShell =WScript.CreateObject("WScript.Shell")
    Set PPTapp=CreateObject("powerpoint.Application")

    'Activate PowerPoint Window
    objWshShell.AppActivate GetProcID("powerpoint.exe")
    'PPTapp.WindowState = 1
    PPTapp.visible=true

    Set PPTPre = PPTapp.ActivePresentation
    ' If there is no presentation, Open new presentation
    If Err.Number <> 0 Then
        Set PPTPre = PPTapp.Presentations.Add
        Set PPTsl = PPTPre.Slides.Add(1, 12)
        Err.Clear
    End If

    If PPTapp.ActiveWindow.Selection.Type = 1 Then
        PPTapp.ActiveWindow.WiewType = 1
        PPTapp.ActiveWindow.WiewType = 9
    End If
   
    now_slno = PPTapp.ActiveWindow.Selection.SlideRange.SlideIndex
   
    Set PPTsl = PPTPre.Slides(now_slno)
    PPTsl.Select
   
 '   Dim w, h
 '   w = PPTPre.PageSetup.Slidewidth
 '   h = PPTPre.PageSetup.SlideHeight
   
'    PPTsl.Shapes.PasteSpecial DataType:=2
     PPTsl.Shapes.Paste
   
    For m = 1 To 600 Step 1
        Wscript.sleep 10
        If PPTsl.Shapes.Count >= zu + 1 Then Exit For
        If m = 400 Then PPTapp.CommandBars.ExecuteMso "PastePicture"
        If m = 590 Then
            Set PPTapp = Nothing: Set PPTPre = Nothing: Set PPTsl = Nothing
            'GoTo myerr:
        End If
    Next
   
    zu = PPTsl.Shapes.Count
'    If PPTsl.Shapes(zu).Width > w - 40 Then PPTsl.Shapes(zu).Width = w - 10
'    If PPTsl.Shapes(zu).Height > h - 70 Then PPTsl.Shapes(zu).Height = h - 70
    PPTsl.Shapes(zu).Left = 4
    PPTsl.Shapes(zu).Top = 61
    If pgdown Then PPTPre.Slides(now_slno + 1).Select
   
   ' PPTapp.Activate
   Set PPTapp = Nothing: Set PPTPre = Nothing: Set PPTsl = Nothing
 '  Exit Sub

WScript.Quit

Function GetProcID(ProcessName)
    Dim Service
    Dim QfeSet
    Dim Qfe
    Dim intProcID
    Set Service = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer
    Set QfeSet = Service.ExecQuery("Select * From Win32_Process Where Caption='"& ProcessName &"'")
    intProcID = 0
    For Each Qfe in QfeSet
        intProcID = Qfe.ProcessId
        Exit For
    Next
    GetProcID = intProcID
End Function

2022年9月14日水曜日

JScriptで指定範囲の画面キャプチャ

 Jscriptで指定範囲の画面キャプチャ


同じフォルダにMouseEmulator.dllと設定ファイルPSC1.txtが必要です。

「WSH JScriptを使いこなそう ~マウス操作~」様

http://jscript.zouri.jp/Source/MouseCtrl.html



処理用ファイル

mouse.js

excel = WScript.CreateObject("Excel.Application")

function psc(str)
{
    //API Command for Mouse Control
    var s1 ="rundll32.exe MouseEmulator.dll, _";
    var s2 ="@16";
    var c1 ="SetMouseXY";
    var c2 ="DownLeft";
    var c3 ="UpLeft";

    //Get current mouse position
    var ret = excel.ExecuteExcel4Macro( "CALL(\"user32\",\"GetMessagePos\",\"J\")" );
    var strHex = ("00000000" + ret.toString(16).toUpperCase()).slice(-8);
    var y = parseInt("0x" + strHex.slice(0, 4),16);
    var x = parseInt("0x" + strHex.slice(-4),16);
    //WScript.Echo(x + "_" + y);

    var buf =str.split(",");

    //Send PrintSCreenKey
    excel.ExecuteExcel4Macro( "CALL(\"user32\",\"keybd_event\",\"JJJJJ\",44,121,1,0)" );
    excel.ExecuteExcel4Macro( "CALL(\"user32\",\"keybd_event\",\"JJJJJ\",44,121,3,0)" );
   
    WScript.Sleep( 900 );

    // MouseDrug
    var sh = new ActiveXObject( "WScript.Shell" );
    sh.Run( s1 + c1 + s2 + " "  + buf[0] + "," + buf[1] );
    sh.Run( s1 + c1 + s2 + " "  + buf[0] + "," + buf[1] );  //call twice to avoid errors
    sh.Run(  s1 + c2 + s2);

    WScript.Sleep( 100 );

    sh.Run( s1 + c1 + s2 + " " + buf[2] + "," + buf[3] );
    sh.Run(  s1 + c3 + s2);

    WScript.Sleep( 100 );
    sh.Run( s1 + c1 + s2 + " " + x + "," + y);
    WScript.Sleep( 100 );
    //WScript.Echo( "終了" );
    sh = null;
}


実行ファイル

test.js

理由はわかりませんが、ダブルクリックで実行するとミスりやすいです。ファイルを選択しておいて、エンターキーで実行すると取りこぼしが少ないようです。

a='100,200,300,400'
eval(WScript.CreateObject("Scripting.FileSystemObject").OpenTextFile("mouse.js", 1).ReadAll());
psc(a);


実行ファイル作成用

Set_psc.js