質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

858閲覧

PythonでExcelから値を抜き出したい

kitagawasho

総合スコア28

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2022/01/28 05:14

前提・実現したいこと

ファンクションジェネレーターをPythonを用いて制御させるシステムを作成しています。

Excelの表から周波数と振幅の値を抜き出して、
その値でファンクションジェネレーターの各コマンドから制御しようと思っています。
下記表のNo1なら、周波数と振幅を10に設定する。

プログラミング苦手なうえにPython初めてでベースのものを参考に自分で書き換えていますが、Excelから値を抜き出してくる部分で手間取っています。
Excelの表から列を読み込むことはできてると思いますが、そこからがわからなくなっています。
現在考えているのは、No1までは手動でファンクションジェネレーターの設定をし、
Pythonを実行させたらNo2の設定にする。
またPythonを実行させたらNo3の設定にする。
というようなプログラムを作成したいです。

ファンクションジェネレーターのコマンドについては下記のサイト等を参考に作成しています。
https://teledynelecroy.com/japan/pdf/support/t3awg3kseries-afg-pm-jp.pdf
ファンクションジェネレーターの動作については、中心周波数と振幅のみの変更ができればとりあえずはいいと思っています。
Excelの表は下記のようになっています。

No周波数振幅
11010
22020
33030

該当のソースコード

Python

1#(FG_test1.py) 2 3import os 4import subprocess 5import re 6import time 7import numpy as np 8import openpyxl 9#import pymsteams 10from FUNCTIONGENERATOR import FUNCTIONGENERATOR 11 12#--------------------------------------------- 13# 14# 機能ON/OFF 15# 16#--------------------------------------------- 17GPIB_DEVICE_FUNCTIONGENERATOR_ON = True 18 19#--------------------------------------------- 20# 21# 初期設定 22# 23#--------------------------------------------- 24## 評価項目Excelの絶対パスを"path(str型)"に記入 25path = './FG_test.xlsx' 26 27## 評価項目Excelのシート名を"sheet_name(str型)"に記入 28sheet_name = 'test' 29 30## 読み込み始める行番号を指定。最初から処理する場合は5行目を指定すること。 31start_row = 2 32 33## FUNCTIONGENERATORのインスタンス"FG"を生成 34if GPIB_DEVICE_FUNCTIONGENERATOR_ON : 35 FG = FG_test2() 36 37#--------------------------------------------- 38# シートデータ"sheet"、最大行"sheet.max_row"、 39# 最大列"sheet.max_column"を取得する 40#--------------------------------------------- 41def OpenExcel(path): 42 wb = openpyxl.load_workbook(path, data_only=True) 43 sheet = wb[sheet_name] 44 return sheet,sheet.max_row,sheet.max_column 45 46#--------------------------------------------- 47# Excelシートデータから取得波形設定を読み込み 48# No、中心周波数(freq)、振幅(ampl)をExcelから取得する 49#--------------------------------------------- 50def ReadWaveformSettings(sheet, i): 51 No = int(sheet.cell(row=i, column=1).value) 52 freq = int(sheet.cell(row=i, column=2).value) 53 ampl = int(sheet.cell(row=i, column=3).value) 54 55 return freq, ampl 56 57#--------------------------------------------- 58# main関数 59# forループは評価項目Excelの最終行"max_row"まで実行される 60#--------------------------------------------- 61def main(): 62 ## 評価項目エクセルを開く 63 sheet, max_row, max_column = OpenExcel(path) 64 65 Range = np.arange(start_row, max_row+1) 66 67 68 ## No、中心周波数(freq)、振幅(ampl)をExcelから読み出す 69 No, freq, ampl = ReadWaveformSettings(sheet, i) 70 71 if GPIB_DEVICE_FUNCTIONGENERATOR_ON : 72 #現在の設定の照会 73 #FG.inquiry() 74 #設定の初期化 75 #FG.Initialize() 76 ##周波数、振幅、位相、オフセットの設定 77 FG.setting( , ) 78 79 if GPIB_DEVICE_FUNCTIONGENERATOR_ON : 80 FG.close() 81 82 print("") 83 print("--- Finish All Processes ---") 84 85#--------------------------------------------- 86# 87# 実行部 88# 89#--------------------------------------------- 90if __name__ == "__main__" : 91 print("-----------------------------------------") 92 print("--- Check FUNCTIONGENERATOR ON ---") 93 print("-----------------------------------------") 94 95 main() 96 97 98 99#(FG_test2.py) 100# -*- coding: utf-8 -*- 101 102import sys 103import time 104import pyvisa as visa 105 106 107VISA_LIB_PATH = 'C:\\Windows\\System32\\visa32.dll' 108TIMEOUT = 10000 109 110class FUNCTIONGENERATOR : 111 112 def __init__( self ) : 113 self.RsrcMgr = visa.ResourceManager( VISA_LIB_PATH ) 114 self.Inst = None 115 116 def open( self, gpibId ) : 117 address = 'GPIB0::' + str( gpibId ) + '::INSTR' 118 self.Inst = self.RsrcMgr.open_resource( address ) 119 self.Inst.timeout = TIMEOUT 120 121 def close( self ) : 122 ret = self.Inst.close() 123 # print( ret ) 124 125 def scan( self ) : 126 self.RsrcMgr.list_resources() # 最初にScanしないとエラーが発生するので一回実行 127 128 129 def Initialize(self): 130 seif.Inst.write("*RST") #設定の初期化 131 132 def inquiry(self): #現在の設定の照会 133 seif.Inst.read("FREQUENCY?") #周波数の照会 134 seif.Inst.read("VOLTAGE:AMPLITUDE?") #振幅の照会 135 136 def setting( self , fre , amp ) : #周波数、振幅、位相、オフセットの設定 137 seif.Inst.write("FREQUENCY freE3") #周波数の設定 138 seif.Inst.write("VOLTAGE:AMPLITUDE amp") #振幅の設定 139 seif.Inst.write("VOLTAGE:OFFSET 0.00") #オフセットの設定 140 seif.Inst.write("PHASE:ADJUST 0DEG") #位相の設定 141 142 143def main() : 144 argv = sys.argv 145 argc = len( argv ) 146 147 FG = FUNCTIONGENERATOR() 148 149 if argc == 1 : 150 print( FG.scan() ) 151 sys.exit() 152 153 devId = argv[1] 154 argf = 155 arga = 156 157 FG.open( devId ) 158 159 #FG.inquiry() #現在の設定の照会 160 #FG.Initialize() #設定の初期化 161 FG.setting( argf , arga ) #周波数、振幅、位相、オフセットの設定 162 163 FG.close() 164 165if __name__ == "__main__" : 166 main() 167

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2022/01/28 05:55

現在どの部分までができていて、どこから何がどのように分からないのか(どうしたいのか)を 提示されたソースコードの具体的な部分とともに説明ください。 ざっと見て単純に「FG.setting( , )」に必要な変数値を渡せばいいと思いますが。
kitagawasho

2022/01/28 06:16

Excelの中身全体(ほしい情報の部分だけ)を読み取ることはできていると思います。またファンクションジェネレーターのコマンドの方も構文がもしかしたら違っているかもしれませんが、参考にできるサイト等あるので自力で直せると思います。 わからないところはNo1の設定からNo2の設定に変更する際にExcelからどうやって値を取ってくればいいか。また次にPythonを実行した際にNo2からNo3の設定にできるようにすることです。 FG.setting( , )に必要な変数を入れるために読み込んだExcelから適した値を持ってこないといけないと思います。 例えばNo2の設置にしたい場合、Excelから(20,20)の値を取ってくる必要がありますが、その部分がわかりません。
guest

回答1

0

ベストアンサー

Excelから欲しい情報の部分を取得することはできるとのことなので
あとは実行毎に取得する行の位置を更新する仕組みを組み込めばよいと思います。
まずは以下のように単純に別ファイルに「処理した行位置」を保持すればよいでしょう。

Python

1# 前回の行位置を読み込む 2line = 0 3try: 4 with open('line.txt') as f: 5 line = int(f.read()) 6except IOError: 7 pass 8 9# Excelファイルから行位置(line)におうじた情報を読みこんで 10# 必要な処理をおこなう 11print(line) 12 13# 次の行位置を書き込む 14line += 1 15with open('line.txt', 'w') as f: 16 f.write(f'{line}')

投稿2022/01/28 07:16

can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問