投稿

PythonnでGUI作成

イメージ
久々の投稿です。 久々過ぎますね・・・ しばらくVBAを使いエクセル操作を自動化してました。 複雑なものは組めませんが、基礎的なことはネット情報や書籍を見ながらできるようになってきました。 Pythonでエクセルを操作できるライブラリ「openpyxl」がある事を知り簡単なPGを作ってみたところ 動くではありませんか! openpyxl.xlskというエクセルファイルのセルに入力後保存するという簡単なもの ////////////////////////////////////////////////////////////////////////////////// import openpyxl as px wb = px.load_workbook("openpyxltest.xlsx") ws = wb["Sheet"] ws.cell(1,1).value ="int" ws.cell(1,2).value =1234 ws.cell(1,3).value ="str" ws.cell(1,4).value ="1234" ws.cell(2,2).value = 4567 ws.cell(2,4).value ="4567" for i in range(1,11): ws.cell(3,i).value = i ws.cell(i+3,1).value = "TEST" + str(i) wb.save("openpyxltest.xlsx") ////////////////////////////////////////////////////////////////////////////////// しかし、作ったPGは他の人も使うので、GUIにできないかと調べておりました。 標準ライブラリの「tkinter」を使えばできるのですが、素人にはとっつきにくく 理解し難いものでした。(いずれ勉強して覚えたいと思いますが。。。) 他に何かライブラリはないかとインターネットで検索していると「PySimplGUI」という ライブラリを見つけ

結局はVBAに戻る。。。

Python → C#と進めてきた。 会社という組織中でコンピュータ環境を自由に使えないノンエンジニアが業務運用の効率化の為に主にエクセルを使ったルーチンワークを自動化できないものかと考え勉強してきた。 目的としては「業務の効率化」「人の能力に左右されない」がメインの課題であった。 そうなぜならエクセルをまともに使えない人が多い環境で運用がエクセルベースだとかなり非効率です。 メイン業務の運用としてはクライアントサーバでシステムが管理している。 エクセルはそのサブ的な扱いになる為、極端なことを言うと紙と鉛筆があればなんとかなる。 話がそれました。。。 ノンエンジニアがエクセル操作の自動化はVBAが最強では?という一つの答えがでたような気がする。 ・windowsマシンの場合Pythonをインストールする必要があるから、勝手なインストールは許可されていない。 ・C#なら.NETがあれば動くつまりwindowsであればほぼ動くでしょう。 しかし、これもIDEのインストールが必要、別の環境で作成したとしても許可されていないEXEファイルの起動は許されていない。 ・PythonやC#でデータを扱うためにSQLが必要。(なくてもできるかもしれない) そしてこちらもSQLiteやMicrosoft SQLサーバ等SQLのクライアントのインストールが必要。 何もできない。。。。しかし!! ・VBAであればエクセルが入っていれば問題ない。 業務用のPCであればほぼ100%エクセルがインストール済 ・簡単な自動化であればマクロの記録機能をうまく使えば簡単に組める。 非効率なコードにはなるのが、複雑なコードでなければ速度的にも可視化的にも問題ないでしょ ・最終目的はエクセル操作、上記の言語の場合エクセルに戻すコードが必要だがVBAであれば直接可能。 ・VBAは糞だというが、ノンエンジニアが組むコードであれば気にすることもない。 むしろVBAでもエクセル関数が使えて便利。(ライブラリを入れれば他の言語でも可能ですけど) ・複雑なコードの場合、VBAではお手上げなケースもあるが最終的にはエクセルシートを作ることが目的なのでVBAとエクセルシートでの計算と組み合わせるとどうだろうか? ということでVBAの勉強を始めました。 いえ。。

【備忘録】文字列を分割して数値変換し計算する場合

文字列を分割する場合 Splitを使用し配列に代入する。 string[] 変換後の配列名 = 変換元の変数.Split(); 引数が空白の場合変換元の変数の区切り文字が空白となる。 区切り文字を空白以外の場合 (例)「、(カンマ)」で区切る場合(CSV等) string[] 変換後の配列名 = 変換元の変数.Split(new char[]{','}); <空白を区切りにする場合の参考コード> using System; public class Split {     public static void Main()   {                  string str = "10 12";          string[] str1 = str.Split ();  //10と12に分け配列に代入                 Console.WriteLine(str);  //デバッグ用 strの中身を表示         int a = int.Parse(str1[0]);  //数値変換         int b = int.Parse(str1[1]);  //数値変換         int c = a * b;         Console.WriteLine(c); //掛け算の答え表示                  var k= str.Length;  //デバッグ用          for (var i=0; i<k; i++)  //デバッグ用     {           Console.Write(str[i]); //デバッグ用 配列の中身表示           }         } }

【課題】C# 繰り返し処理(for文)

【課題】難易度1 コンソールから正数値を入力させた後、forループを用いて、その数だけ■マークを表示するプログラムを作りなさい。 【私の答え】 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp1 {     class Program     {         static void Main(string[] args)         {             Console.Write("数:");             int a = int.Parse(Console.ReadLine());                          for (int i=1; i <= a; i++)              {                 Console.Write("■");             }             Console.WriteLine();  //改行 ------- この課題に30分かかってようやく解けました。。。 すごい単純な事に悩んでました。 for文の条件定義を(int i=1; i==a; i++)としておりコマンドプロンプトで数値入力直後にプログラムが終了するという結果になりました。 for文に誤りがあるのだろうと思い。以下のコードを修正しました。 数字の動きを確認しました。 for (int i=1; i >= a; i++)              {                 Console.WriteLine("a=" + a);                       →当然このブロックはパスされているので実行しません。                  Console.WriteLine("i="  + i );    

【備忘録】C# 関数作成構文復習

アクセス修飾子 戻り値のデータ型 関数名 (引数のデータ型 引数の変数名) { 処理の定義 (メソッド) } (例) private int zetaichi (int hikisu) {     if (hikisu<0) hikisu = hikisu * -1;     return hikisu; } <解説> 変数hikisuが0以下(負の値)であれば-1を乗法し正にしている。 つまり絶対値を求める関数「zetaichi」を作成した。 if文の結果を変数hikisuに代入し関数「zetaichi」に戻している。 hikisu=-5とした場合の動作 private int zetaichi (int 5) {     if (-5<0) 5 = -5 * -1;     return 5; } <アクセス修飾子> private 同一クラス内で使用可能 public   どこからでも使用可能 その他 アクセス修飾子参照 ☆関数やクラスのカプセル化に使う 関数もクラス基本は同じ考え方 関数=同一メソッド内のみ使用可能 クラス=C#の構造そのもの

【備忘録】C#<オブジェクト指向>を一旦整理

勉強に使用している「Visual C# 2017 パーフェクトマスター」 およそ1/3程進んだチャプター3「オブジェクト指向」もう全くもってわからず オブジェクト指向の事ばかり考えて1週間。。。 C#というよりも今のプログラミングの要なので、飛ばすわけにもいかないので必死です。 一旦ここで頭を整理したいと思います。 わからないワード(予約語)を調べる為新たに「C#ポケットリファレンス」も購入。 間違えていたらごめんなさい。指摘してくれると助かります。 オブジェクト指向で出てくるワード。 「クラス」「フィールド」「メンバー」「メソッド」「コンストラクタ」「プロパティ」 これらの関係性と使い方が理解できず苦しんでいるところです。 これらの整理する前にC#の構造を再度整理してみます。 名前空間  メイン  {    クラス A    { →ブロック開始     フィールド ・・・ 変数                   → これをメンバー     メソッド  ・・・ 機能     } →ブロック終了    クラス B     { →ブロック開始     フィールド ・・・ 変数                   → これをメンバー     メソッド  ・・・ 機能     } →ブロック終了      {           コンストラクタ A → インスタンス(実装)                             →これをオブジェクト       機能       }         {       コンストラクタ B → インスタンス(実装)       機能   } プロパティは。。。とりあえず後回し。 C#は名前空間によって階層管理されている。 windowsの場合階層(フォルダ)は「¥」によって仕切っているが、C#場合「.(ドット)」で仕切る。 (例) windowsの場合 myprogram\test\sampledate C#の場合     myprogram.test.sampeldate テレビの置き換えて考えてみた。 名前空間 〇芝 〇EGZ〇    クラス 液晶   メソッド カラー液晶 42インチ    クラス ボタン

【備忘録】Microsoft SQL Sever Management Studio 2017 <設定>

イメージ
【Microsoft SQL Sever Management Studio 2017】 <接続設定> サーバー名 SQLインスタンス確認方法 コマンドプロンプトより「sqllocaldb info」を実行 MSSQLLocalDB → これがインスタンス localDBに接続する場合 ☆Microsoft SQL Server 2015 Express LocalDB Visual Studio 2017 communityをインストール時にインストールされたもの                    サーバー名に(localdb)\MSSQLLocaDBとする。 *「()」を忘れずに、これを忘れて1時間以上格闘してました。 SQL Severに接続する場合 ☆Microsoft SQL Server 2017 expressをインストール インストール時に勝手にサーバー名が作られたようで変更の仕方は今後勉強です。 当面はLocalDBで勉強していくつもりですのでしばらくこちらは使用しませんので忘れないように備忘録です。 Serverに接続場合は構成マネージャーで状態を確認「停止」→「開始」 windows10では構成マネージャーがアプリケーションとして表示されないので注意が必要。 「スタート」右クリック「検索」より「SQLSeverManager14.msc」から起動 SQLSeverManager14→SQL Server 2017 ☆最後の14を小さくする事で古いバージョンを開く(例)SQLSeverManager13→2016 【Microsoft SQL Sever Management Studio 2016】 サブ機<設定> windows10 32bitでMicrosoft SQL Sever Management Studio 2017は64bit専用の為残念ながらインストールができないのでMicrosoft SQL Sever Management Studio 2016をインストール。 Microsoft SQL Server Manager2016構成