Chapter 03. Excelからの読み込み

このチュートリアルは、Excel から値を読み込む解説を行います。Excel から値を読み込むためには、 SGLXRequest() 関数を用います。また、キーボードも使います。 キーボードを使ったチュートリアルは、こちらにありますので、そちらもご参照下さい。

1. 準備

サンプルファイル

Chapter 03 で使用するサンプルファイルをご用意致しましたので、ダウンロードして下さい。 Excel ファイルを開きます。開く際に警告が表示された場合は、マクロを有効にする、を選択して下さい。もし、マクロを無効に してしまった場合は、Excel ファイルを一旦閉じ、もう一度開いて今度はマクロを有効にする、を選択して下さい。 Chapter 03 ではSGLXRequest() 関数を用いて、AN5 の値を受信するプログラムの例を紹介します。

2. セルの座標

SGLXRequest 関数は、以下のように宣言されています。

/**
 * SGLX からデータを受信します
 * @param cell (char*) セルの座標
 */
void SGLXRequest(char* cell);

SGLXRequest 関数による受信の結果を取得するためには、 SGLXGetLastResult() という関数を呼びます。SGLXGetLastResult() 関数は、常に最新の結果を返します。

/**
 * 最新の通信の結果を取得します
 * @param (char*) result 結果
 */
void SGLXGetLastResult(char* result);

3. 取得する

セルの AN5 をSGLXRequest() 関数の引数に指定します。

SGLXRequest("AN5");

SGLXGetlastResult() 関数を呼び、読み込んだ値をプログラム内で取得します。

SGLXGetLastResult(result);             // 読み込んだ値を取得する 
printf("文字列\t%s\n", result);        // 文字列としての出力     

SGLXGetlastResult() 関数の引数は、char* 型です。プログラム内で、result を整数値や実数値として扱いたい場合は、 atoi 関数や atof 関数を用いて下さい。

SGLXGetLastResult(result);             // 読み込んだ値を取得する 
printf("文字列\t%s\n", result);        // 文字列としての出力     
printf("整数値\t%d\n", atoi(result));  // 整数値としての出力
printf("実数値\t%f\n", atof(result));  // 実数値としての出力

では、キーボードの操作と連動させます。以下に全文を載せます。

// Chapter03. Excelシートからの読み込み
#include "sfcglx.h"

char result[512]; // 結果を格納する変数

void display() {   
    SGLXServer();            // 
    BGColor(200, 200, 200);  // 背景の色
    SGBeginEdit();           // 形状の描画の開始.   
    SGEndEdit();             // 形状の描画の終了.   
    SGSwapFrames();          // フレームを入れ替える. 
}

void key(unsigned char c, int x, int y) {
    if (c == 'a') {
      SGLXRequest("AN5"); // セルの値を読み込む
    } else if (c == 'b') {
      SGLXGetLastResult(result);        // 読み込んだ値を取得する
      printf("文字列\t%s\n", result);       // 文字列としての出力
      printf("整数値\t%d\n", atoi(result)); // 整数値としての出力
      printf("実数値\t%f\n", atof(result)); // 実数値としての出力
    } 
}

int main(int argc, char** argv) {
    SGInit(argc, argv); // SGL の初期化

    // SGLX の初期化
    SGLXInit("C:\\Users\\Akito\\Documents\\MediaDesign3D\\6");

    SGOpenWindow(0,0,500,500); // 500x500のウィンドウ
    SGSetDisplay(display); // 描画
    SGKeyBoard(key); // キーボード

    SGCallBack(); // コールバック関数を登録
    return 0; 
}

display() 関数の中の SGLXServer() 関数の説明は、こちらです。 Chapter 03 は以上です。お疲れ様でした。