大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

Qtプログラミング – スプレッドシートの読み込み

著者:津路高広
公開日:2019/10/31
最終更新日:2019/10/31
カテゴリー:技術情報

津路です。
今回は、前回作成したクラスを利用して、スプレッドシートをファイルから読み込みます。
そのクラスとはCellという名前で、QTableWidgetItemクラスをサブクラス化したクラスです。
これをSpreadSheetクラスから利用するために、cell関数と、式を設定するsetFormula関数を、前回紹介しました。

始めに、save関数で設定した形式のファイルからデータを読み込みます。

bool Spreadsheet::readFile(const QString &fileName)
{
    QFile file(fileName);
    if(!file.open(QIODevice::ReadOnly)) {
	QMessageBox::warning(this, tr("Spreadsheet"),
		tr("Cannot read file %1:\n%2,").arg(file.fileName()).arg(file.errorString()));
	return false;
    }
    QDataStream in(&file);
    in.setVersion(QDataStream::Qt_4_1);
    quint32 magic;
    in >> magic;
    if(magic != MagicNumber) {
	QMessageBox::warning(this, tr("Spreadsheet"),
		tr("The file is not a Spreadsheet file."));
	return false;
    }
}

ここで、MagicNumberとは、このプログラム独自の番号です。

enum { MagicNumber = 0x7F51C883 };

setVersionは、QDataStreamに設定するQtバージョンです。
この処理は、入出力においてバージョン管理をするための仕組みです。

次に clear関数にて、シートの初期値を設定します。

void Spreadsheet::clear()
{
    setRowCount(0);  //行列の1つめをカレントとする
    setColumnCount(0);
    setRowCount(RowCount); //行数
    setColumnCount(ColumnCount); //列数
    for(int i=0; i<ColumnCount; ++i) {  //セルのインスタンスを生成し、名前を設定
	QTableWidgetItem *item = new QTableWidgetItem;
	item->setText(QString(QChar('A'+i)));
	setHorizontalHeaderItem(i,item);
    }
    setCurrentCell(0,0); //0行0列をデフォルトに設定
}

そして、読み込んだデータを、各セルに反映します。

    quint16 row;
    quint16 column;
    QString str;
    QApplication::setOverrideCursor(Qt::WaitCursor);
    while (!in.atEnd()) {
	in >> row >> column >> str;
	setFormula(row, column, str);
    }
    QApplication::restoreOverrideCursor();
    上に戻る