チュートリアル
簡単にライブラリーを使用するためのチュートリアルコレクション
Excel のデータ検証では、セルに入力される情報の種類を制限できます。この機能を使用すると、特定のデータタイプ(数値や日付など)をセル内に制限したり、数値を特定の範囲内に制限したり、テキストを特定の長さに制限したりできます。また、ユーザーが選択できるように、ドロップダウンメニューに事前定義された値のリストを提供することもできます。この記事では、Spire.XLS for C++ を使用して C++ で Excel でデータの入力規則を適用または削除する方法について説明します。
Spire.XLS for C++ をアプリケーションに組み込むには、2つの方法があります。一つは NuGet 経由でインストールする方法、もう一つは当社のウェブサイトからパッケージをダウンロードし、ライブラリをプログラムにコピーする方法です。NuGet 経由のインストールの方が便利で、より推奨されます。詳しくは、以下のリンクからご覧いただけます。
Spire.XLS for C++ を C++ アプリケーションに統合する方法
Spire.XLS for C++ では、数字、日付、テキスト値、リストなどの検証規則を作成できます。以下は、Excel の指定されたセルに異なるデータ検証タイプを適用する手順です。
#include "Spire.Xls.o.h";
using namespace Spire::Xls;
int main() {
//出力ファイルを指定する
std::wstring outputFile = L"DataValidation.xlsx";
//Workbookオブジェクトを作成する
intrusive_ptr<Workbook> workbook = new Workbook();
//最初のワークシートを取得する
intrusive_ptr<Worksheet> sheet = dynamic_pointer_cast<Worksheet>(workbook->GetWorksheets()->Get(0));
//指定したセルにテキストを挿入する
dynamic_pointer_cast<CellRange>(sheet->GetRange(L"B2"))->SetText(L"データ検証: ");
dynamic_pointer_cast<CellRange>(sheet->GetRange(L"B4"))->SetText(L"日付検証: ");
dynamic_pointer_cast<CellRange>(sheet->GetRange(L"B6"))->SetText(L"テキストの長さ検証: ");
dynamic_pointer_cast<CellRange>(sheet->GetRange(L"B8"))->SetText(L"リスト検証: ");
dynamic_pointer_cast<CellRange>(sheet->GetRange(L"B10"))->SetText(L"時間検証: ");
//C 2にデータ検証を追加する
intrusive_ptr<CellRange> rangeNumber = dynamic_pointer_cast<CellRange>(sheet->GetRange(L"C2"));
rangeNumber->GetDataValidation()->SetAllowType(CellDataType::Decimal);
rangeNumber->GetDataValidation()->SetCompareOperator(ValidationComparisonOperator::Between);
rangeNumber->GetDataValidation()->SetFormula1(L"3");
rangeNumber->GetDataValidation()->SetFormula2(L"6");
rangeNumber->GetDataValidation()->SetInputMessage(L"1から10の間の数字を入力してください。");
rangeNumber->GetDataValidation()->SetErrorMessage(L"正しい数値を入力してください。");
rangeNumber->GetDataValidation()->SetShowError(true);
rangeNumber->GetDataValidation()->SetAlertStyle(AlertStyleType::Warning);
rangeNumber->GetStyle()->SetKnownColor(ExcelColors::Gray25Percent);
//C4に日付検証を追加する
intrusive_ptr<CellRange> rangeDate = dynamic_pointer_cast<CellRange>(sheet->GetRange(L"C4"));
rangeDate->GetDataValidation()->SetAllowType(CellDataType::Date);
rangeDate->GetDataValidation()->SetCompareOperator(ValidationComparisonOperator::Between);
rangeDate->GetDataValidation()->SetFormula1(L"1/1/2021");
rangeDate->GetDataValidation()->SetFormula2(L"12/31/2021");
rangeDate->GetDataValidation()->SetInputMessage(L"1/1/2021から12/31/2021の間の日付を入力してください。");
rangeDate->GetStyle()->SetKnownColor(ExcelColors::Gray25Percent);
//C6にテキストの長さ検証を追加する
intrusive_ptr<CellRange> rangeTextLength = dynamic_pointer_cast<CellRange>(sheet->GetRange(L"C6"));
rangeTextLength->GetDataValidation()->SetAllowType(CellDataType::TextLength);
rangeTextLength->GetDataValidation()->SetCompareOperator(ValidationComparisonOperator::LessOrEqual);
rangeTextLength->GetDataValidation()->SetFormula1(L"5");
rangeTextLength->GetDataValidation()->SetErrorMessage(L"有効な文字列を入力してください。");
rangeTextLength->GetDataValidation()->SetShowError(true);
rangeTextLength->GetDataValidation()->SetAlertStyle(AlertStyleType::Stop);
rangeTextLength->GetStyle()->SetKnownColor(ExcelColors::Gray25Percent);
//C8にリストの検証を追加する
intrusive_ptr<CellRange> rangeList = dynamic_pointer_cast<CellRange>(sheet->GetRange(L"C8"));
std::vector<LPCWSTR_S> files = { L"アメリカ", L"カナダ", L"イギリス" };
rangeList->GetDataValidation()->SetValues(files);
rangeList->GetDataValidation()->SetIsSuppressDropDownArrow(false);
rangeList->GetDataValidation()->SetInputMessage(L"リストから項目を選択してください。");
rangeList->GetStyle()->SetKnownColor(ExcelColors::Gray25Percent);
//C10に時間の検証を適用する
intrusive_ptr<CellRange> rangeTime = dynamic_pointer_cast<CellRange>(sheet->GetRange(L"C10"));
rangeTime->GetDataValidation()->SetAllowType(CellDataType::Time);
rangeTime->GetDataValidation()->SetCompareOperator(ValidationComparisonOperator::Between);
rangeTime->GetDataValidation()->SetFormula1(L"9:00");
rangeTime->GetDataValidation()->SetFormula2(L"12:00");
rangeTime->GetDataValidation()->SetInputMessage(L"9:00から12:00の間の時間を入力してください。");
rangeTime->GetStyle()->SetKnownColor(ExcelColors::Gray25Percent);
//列2の幅を自動調整する
sheet->AutoFitColumn(2);
//列3の幅を設定する
sheet->GetColumns()->GetItem(2)->SetColumnWidth(20);
//結果文書を保存する
workbook->SaveToFile(outputFile.c_str(), ExcelVersion::Version2016);
workbook->Dispose();
}
セルに適用されたデータ検証を削除するために、Spire.XLS for C++ には Worksheet->GetDVTable()->Remove() メソッドが用意されています。詳細な手順は次のとおりです。
#include "Spire.Xls.o.h";
using namespace Spire::Xls;
int main() {
//入出力ファイルを指定する
std::wstring inputFile = L"DataValidation.xlsx";
std::wstring outputFile = L"RemoveDataValidation.xlsx";
//Workbookオブジェクトを作成する
intrusive_ptr<Workbook> workbook = new Workbook();
//ディスクからのExcelドキュメントをロードする
workbook->LoadFromFile(inputFile.c_str());
//最初のシートを取得する
intrusive_ptr<Worksheet> sheet = dynamic_pointer_cast<Worksheet>(workbook->GetWorksheets()->Get(0));
//検証を削除するセルを決定するために矩形配列を作成する
std::vector<intrusive_ptr<Spire::Common::Rectangle>> rectangles(1);
//配列の最初の要素に値を設定し、矩形に基づいたセル範囲を指定する
rectangles[0] = Spire::Common::Rectangle::FromLTRB(0, 0, 2, 9);
//矩形範囲内の検証を削除する
sheet->GetDVTable()->Remove(rectangles);
//結果文書を保存する
workbook->SaveToFile(outputFile.c_str(), ExcelVersion::Version2016);
workbook->Dispose();
}
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。
Excel のスプレッドシートはグリッドベースの文書であり、情報を整理するために有機的な方法で使用されています。人々はビジネスや個人の必要に応じてスプレッドシートを作成することがよくあります。多年にわたり、Excel のスプレッドシートは多くの機能を提供し、煩雑なデータ管理プロセスを簡素化する上で重要な役割を果たしてきました。この記事では、Spire.XLS for C++ を使用して C++ で Excel 文書を作成し、Excel のシートにデータを書き込む方法について説明します。
Spire.XLS for C++ をアプリケーションに組み込むには、2つの方法があります。一つは NuGet 経由でインストールする方法、もう一つは当社のウェブサイトからパッケージをダウンロードし、ライブラリをプログラムにコピーする方法です。NuGet 経由のインストールの方が便利で、より推奨されます。詳しくは、以下のリンクからご覧いただけます。
Spire.XLS for C++ を C++ アプリケーションに統合する方法
Spire.XLS for C++ は、Excel 文書とワークシートをそれぞれ表す Workbook クラスと Worksheet クラスを提供しています。ユーザーは、Worksheet->GetRange(int row, int column) メソッドを使用して特定のセルにアクセスできます。その後、CellRange->SetText() または CellRange->SetNumberValue() メソッドを使用してセルにテキスト値または数値を追加します。以下に詳細な手順が示されています。
#include "Spire.Xls.o.h";
using namespace Spire::Xls;
int main() {
//出力ファイルのパスと名前を指定する
std::wstring outputPath = L"Output\\";
std::wstring outputFile = outputPath + L"WriteIndividualValuesToCells.xlsx";
//Workbookオブジェクトを作成する
Workbook* workbook = new Workbook();
//最初のシートを取得する
Worksheet* sheet = workbook->GetWorksheets()->Get(0);
//指定したセルにテキストと数を書き込む
sheet->GetRange(1, 1)->SetText(L"名前");
sheet->GetRange(1, 2)->SetText(L"年齢");
sheet->GetRange(1, 3)->SetText(L"部門");
sheet->GetRange(1, 4)->SetText(L"雇用日");
sheet->GetRange(1, 1)->SetText(L"名前");
sheet->GetRange(2, 1)->SetText(L"中村");
sheet->GetRange(2, 2)->SetNumberValue(29);
sheet->GetRange(2, 3)->SetText(L"研究部門");
sheet->GetRange(2, 4)->SetText(L"2021-02-26");
sheet->GetRange(3, 1)->SetText(L"田中");
sheet->GetRange(3, 2)->SetNumberValue(27);
sheet->GetRange(3, 3)->SetText(L"生産部門");
sheet->GetRange(3, 4)->SetText(L"2020-07-13");
sheet->GetRange(4, 1)->SetText(L"小林");
sheet->GetRange(4, 2)->SetNumberValue(35);
sheet->GetRange(4, 3)->SetText(L"営業部門");
sheet->GetRange(4, 4)->SetText(L"2019-04-01");
//列幅を自動調整する
sheet->GetAllocatedRange()->AutoFitColumns();
//最初の行にスタイルを適用する
CellStyle* style = workbook->GetStyles()->Add(L"newStyle");
style->GetFont()->SetIsBold(true);
sheet->GetRange(1, 1, 1, 4)->SetStyle(style);
//ファイルに保存する
workbook->SaveToFile(outputFile.c_str(), ExcelVersion::Version2016);
workbook->Dispose();
}
Spire.XLS for C++ は、Worksheet->InsertArray() メソッドを提供し、プログラマーがシートの指定されたセル範囲にコンテナを書き込むことができます。シートに配列を書き込む前に、配列をコンテナに変換する必要があります。以下に詳細な手順が示されています。
#include "Spire.Xls.o.h";
using namespace Spire::Xls;
using namespace std;
int main() {
//出力ファイルのパスと名前を指定する
wstring outputPath = L"Output\\";
wstring outputFile = outputPath + L"WriteArraysToCellRanges.xlsx";
//Workbookオブジェクトを作成する
Workbook* workbook = new Workbook();
//最初のシートを取得する
Worksheet* sheet = workbook->GetWorksheets()->Get(0);
//1次元配列を作成する
wstring oneDimensionalArray[6] = { L"月曜日", L"火曜日", L"水曜日", L"木曜日", L"金曜日", L"土曜日" };
//配列をコンテナに変換する
vector<LPCWSTR> vec;
for (size_t i = 0; i < sizeof(oneDimensionalArray) / sizeof(oneDimensionalArray[0]); i++)
{
vec.push_back(oneDimensionalArray[i].c_str());
}
//シートにコンテナを挿入する
sheet->InsertArray(vec, 1, 1, false);
//2次元配列を作成する
wstring twoDimensionalArray[4][5] = {
{L"名前", L"年齢", L"性別", L"部門", L"電話番号"},
{L"中村", L"25", L"男性", L"研究部門", L"654214"},
{L"田中", L"24", L"女性", L"生産部門", L"624847"},
{L"小林", L"26", L"女性", L"営業部門", L"624758"}
};
//行番号と列番号を取得する
int rowNum = sizeof(twoDimensionalArray) / sizeof(twoDimensionalArray[0]);
int columnNum = sizeof(twoDimensionalArray[0]) / sizeof(twoDimensionalArray[0][0]);
//2 D配列を複数の1 Dコンテナに分割する
for (size_t i = 0; i < rowNum; i++)
{
vector<LPCWSTR> vec_temp;
for (size_t j = 0; j < columnNum; j++)
{
vec_temp.push_back(twoDimensionalArray[i][j].c_str());
}
//シートにコンテナを挿入する
sheet->InsertArray(vec_temp, 4 + i, 1, false);
}
//列幅を自動調整する
sheet->GetAllocatedRange()->AutoFitColumns();
//最初の行にスタイルを適用する
CellStyle* style = workbook->GetStyles()->Add(L"newStyle");
style->GetFont()->SetIsBold(true);
sheet->GetRange(1, 1, 1, 6)->SetStyle(style);
sheet->GetRange(4, 1, 4, 5)->SetStyle(style);
//ファイルに保存する
workbook->SaveToFile(outputFile.c_str(), ExcelVersion::Version2016);
workbook->Dispose();
}
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。