C++でExcelファイルを読み書きする1【Visual Studioを使ったC言語実践】

C++でExcelファイルを読み書きする1【Visual Studioを使ったC言語実践】

今回は、C++でExcelファイル(CSVファイル)を読み書きする方法をお伝えしていきます。

この方法ではVisual Studio 2019 Communityを使っていきますが、インストールの方法は、

VISUAL STUDIOを使ったC++開発の準備1【VISUAL STUDIO 2019 COMMUNITYのインストール】

をご覧ください。



できるようになること・利点

今回から数回に分けて、C言語によるExcelファイルの読み書きの仕方をお伝えしていきます。これらの記事の中で、

  • C++を使ったCSVファイルの作成・上書き保存
  • C++を使ったCSVファイルの読み取り
  • C++でデータ処理を一括で済ませることにより、エクセル業務を効率化

といったことができるようになることを目標にしていきます。

何千ものデータをデータ処理したり、たくさんのエクセルファイルのデータを参照しながら一つのファイルにデーターを処理してまとめたり、といっただるい作業をC++を用いて自動化していきます。



そして第一回の今回は、

CSVファイルの作成・上書き保存

について解説していきます。



CSVファイルとは?

C言語でエクセルファイルを扱う時に使うファイル形式として、CSVというものがあります。

CSVファイルとは、データをカンマで区切って並べたデータ形式のことです。CSVファイルをエクセルで開くと、カンマで区切られた個々のデータが個々のセルに横並びに表示されます。

とはいってもぴんと来ないと思うので、下の画像を見てください。

このようにエクセルで開かれたCSVファイルがあるとします。

この場合、xとyのように横の列のデータは「,」で区切られ、縦の列のデータは今まで通り「¥」で区切られることで、エクセルでこのようにデータの表示ができるのです。

CSVファイルは主にエクセルなどの表計算ソフトがデータを保存するときに使われる形式ですが、その実体はテキストファイルであるため汎用性が高く、様々なソフトでの編集が可能であり、異なるアプリ間でのデータ交換によく使われる形式です。



ソースコード例

今回はC++を使って、CSVファイルの作成・上書き保存をやっていきますが、まずその説明に使うソースコードを全て下に示します。

#include <stdio.h>
#include <math.h>
#define _USE_MATH_DEFINES //数値演算定数が定義されたヘッダファイルの読み込み

FILE *fp; //FILEポインタの宣言
int main(void){
    //Step1. CSVファイルを開く
  double x,y;
    x=2.5;
    y=sqrt(x);

    fopen_s(&fp, "exam1.csv", "w");

    //Step2. データの書き込み
    printf("x\tsqrt(x)\n");
    printf("%lf\t%lf\n", x,y); //PC画面に表示

    fprintf(fp, "x,sqrt(x)\n");
    fprintf(fp, "%lf,%lf\n", x,y); //CSVファイルに上書き保存

    //Step3. CSVファイルを閉じる
    fclose(fp);

    return 0;
}

上に示したプログラムは、xの値に関してその平方根の値を返してその値を書き出し、またその結果をCSVファイルへ出力するというプログラムです。



Step1. CSVファイルを開く

まず、CSVファイルを開きます。

fopen_s(&fp, “exam1.csv”, “w”);

の部分ですね。ここについて説明していきます。



まず、fopen_sというのはファイルを開くための関数です。(fopen_s関数はマイクロソフト独自の関数なので、Visual Studio以外の環境で動作するかは知りません)

かっこを開いて、FILEポインタに “開くファイル名.csv”, “ファイル書き込みモード” の情報を与えます。

今回FILEポインタはfp、ファイル名はexam1.csv、ファイル書き込みモードは”w”です。

ファイル書き込みモードについては、

w:ライトモード(上書き保存モード)
新しく開くファイルが無ければ、新しくファイルを生成し、
すでにファイルが存在すれば、その内容を空にして上書き保存する。
a:アペンドモード(追記保存モード)
新しく開くファイルが無ければ、新しくファイルを生成し、
すでにファイルが存在すれば、そのファイルの現在位置から追加書き込みをする。

などがあります。今回は追記するファイルが無いのでライトモードにします。



Step2. データの書き込み

次はCSVファイルにデータの書き込みをしていきます。

fprintf(fp, “x,sqrt(x)\n”);
fprintf(fp, “%lf,%lf\n”, x,y);

の部分ですね。

fprintf関数はファイルにデータの書き込みを行う関数です。



かっこを開いて、FILEポインタと、 ” ” の中にカンマ区切りでデータを入力します。

CSVファイルなので、エクセルで開いたときにカンマ区切りで横セルの移動、\nで縦セルの改行がされています。

今回は一行目に表タイトル、二行目にそれぞれの値を書き込むようになっています。



Step3. CSVファイルを閉じる

最後に開いたCSVファイルを閉じます。

fclose関数で、かっこ開いてFILEポインタを中に入れて終わりです。



実行結果

このコードをコンパイルして実行してみます。

実行結果はこんな感じです。

そして実行したときにCSVファイルがプロジェクトの中に生成されています。中身を見てみると

こんな感じでエクセルで表示されました。

もし罫線などを編集してエクセルファイルとして保存したいときはCSVファイルではなく、.xlsxファイルの形式で保存しましょう。

先ほども言いましたがCSVファイルの実体はカンマ区切りのテキストファイルのため、エクセルで罫線などを編集しても保存されないので注意してください。



以上で今回は終わりにしたいと思います。次回以降にまたC言語でのExcelファイル(CSVファイル)の読み書きの方法についてお伝えしていくのでよろしくお願いします。

参考書

続き