ブログ

割とコンピュータよりの情報をお届けします。

2019年

WinPython64-3.7.1.0ZeroでSavitzyky-Golayフィルタ

WinPython64-3.7.1.0Zeroを準備して参考ページ「SciPy で Savitzky-Golay フィルタ」を実行できるようにするまで記録する.

1. WinPythonをダウンロードする.

2. ダウンロードしたファイルを実行して適当なフォルダにインストールする.

3. WinPython Command Prompt.exeを実行して,
pip install scipy
を実行する.すると,numpyもインストールされる.
pip install matplotlib
も実行しておく.
4. IDLE (Python GUI).exeを実行して,参考ページからコードをコピーしてくる.
そしてF5キーでこれを実行してみる.
おそらく,
「TypeError: slice indices must be integers or None or have an __index__ method」とエラーになるはず.

5. y1 = signal.savgol_filter(y, n/4+1, 5)などとなっている部分の「/」が問題で「//」に置き換える必要がある.
(y1 = signal.savgol_filter(y, n//4+1, 5)とするということ)

最近のPythonでは「/」が実数を返してしまうということであった.

≫ 続きを読む

2019/01/10 コンピュータ   TakeMe

C#からExcel操作

C#からExcelを操作して計算結果をエクスポートする例を求められた.
 

レイトバインディングならdllへの依存性が減らせるが,プログラムの作成中に面倒なことにオートコンプリートが効かない.Microsoft.Office.Interop.Excelを参照に追加するアーリーバインディングが普通です.

using Excel = Microsoft.Office.Interop.Excel;

これが参考に載っていたやり方.ただし,using Microsoft.Office.Interopでもよいかも.

namespace app
{
    public partial class Form1 : Form
    {
        private Excel.Application objApp;
        private Excel.Workbook objWorkbook;
        private Excel.Worksheet objWorksheet;


        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            objApp = new Excel.Application();
            objWorkbook = objApp.Workbooks.Add();
            objWorksheet = (Excel.Worksheet)objWorkbook.Sheets[1];
            Excel.Range objRange = objWorksheet.Range["A1..B2"];//objApp.get_Range("A1");
            object[,] tbl = new object[2, 2];
            tbl[0, 0] = "TEST";
            tbl[0, 1] = "TEST2";
            tbl[1, 0] = 0;
            tbl[1, 1] = 0.1;
            objRange.Value = tbl;
            objApp.Visible = true;
        }
    }
}

いったんここまで出来上がってからレイトバインディングに直すのが宜しい.
昔は,VBとC#では大きな違いがあったが,最近はC#でもdynamicなる属性が追加されており,InvokeMember関数を最小限にして置き換えができるようになった.

dynamic属性に付け替えExcel.Application()の部分を汎用のType.GetTypeFromProgID()に変更するだけでよい

    public partial class Form1 : Form
    {
        private dynamic objApp;
        private dynamic objWorkbook;
        private dynamic objWorksheet;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Type t = Type.GetTypeFromProgID("Excel.Application");
            objApp = Activator.CreateInstance(t);

            objWorkbook = objApp.Workbooks.Add();
            objWorksheet = objWorkbook.Sheets[1];
            dynamic objRange = objWorksheet.Range["A1..B2"];
            object[,] tbl = new object[2, 2];
            tbl[0, 0] = "TEST";
            tbl[0, 1] = "TEST2";
            tbl[1, 0] = 0;
            tbl[1, 1] = 0.1;
            objRange.Value = tbl;
            objApp.Visible = true;
        }
    }

参考

【Excelの起動から】 C#でExcelを操作する【保存まで】 ( Milk's Memo Note: https://www.milkmemo.com/entry/csharp_excel)

≫ 続きを読む

2019/01/05 コンピュータ   TakeMe