« Kria KV260のバウンダリスキャン | トップページ | Cosmo-Zからパルスを出力する基板 »

2021.12.08

Visual C#でのExcel出力

作成中のCosmo-Zアプリで、波形データをExcelのファイルとして出力できるようにしました。

まず、下の図はサンプリングした波形です。

Export1

ファイル→エクスポート→Excel形式とやると、Excelのファイルができます。

1つ目のシートには測定の情報が、

Export2

2つ目のシートにはデータが表で羅列されています。

Export3

範囲選択して挿入、グラフとやると、すぐにグラフが描けます。

Export4

 

うーん。Excelでのエクスポートって便利かも!

Excelでエクスポートするプログラムの作り方ですが、ネットで検索すればいろいろ出てくるので詳しくは検索してください。

よくわからなかった点だけを書きます。まず、Microsoft.Office.CoreとMicrosoft.Office.Interop.Excelを参照に追加するようです。バージョンをどうすればよいのかわかりませんが、私のPCに入っているOfficeのバージョンが16なので、バージョン16を追加しました。おそらく、どれでもいいのだと思います。

Export5

とすることでExcelが使えるようになります。

Excelのセルに値をセットするのは、

using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
Excel.Application ExcelApp = new Excel.Application();
Excel.Workbooks wbs = ExcelApp.Workbooks;
Excel.Workbook wb = wbs.Add();
Excel.Sheets sheets = wb.Sheets;
Excel.Worksheet ws = sheets[1];
ws.Select(Type.Missing);
ExcelApp.Visible = false;
ws.Cells[1, 1] = "aaa";

のような感じでいけるのですが、Cellに代入するのがめっちゃ遅いです。10000個のセルを設定しようとすると1分以上かかります。おそらくnew Excel.Application()をやった時に裏でExcelが起動していて、Excelクラスの中にあるオブジェクトを触ると、Excelと通信して、Excelのほうのプロセスがセルの設定とかをやっているのでしょう。

高速にやるには、

object[,] values = new object[rows + 1, cols + 1];

と、object型の2次元配列を作って、

try
{
  Excel.Range range = ws.Range[ws.Cells[1, 1], ws.Cells[1 + rows, 1 + cols]];
  range.Value = values;
}

で、範囲を指定して一括コピーします。

 

つまり、C#の中でExcelファイルを作っているのではなく、裏でExcelを起動してExcelを操作してファイルを作っているのでしょう。だから、Excelファイルを出力するプログラムを作るにはあらかじめExcelがインストールされていなければならないし、バージョンまで指定しなければならないのでしょう。

|

« Kria KV260のバウンダリスキャン | トップページ | Cosmo-Zからパルスを出力する基板 »

コメント

コメントを書く



(ウェブ上には掲載しません)




« Kria KV260のバウンダリスキャン | トップページ | Cosmo-Zからパルスを出力する基板 »