チュートリアル
簡単にライブラリーを使用するためのチュートリアルコレクション
システム間でデータを効率的に統合することは、生産性を向上させ、情報に基づいた意思決定を行う上で非常に重要です。この分野で一般的なタスクの 1 つは、Excel とデータベース間でデータを転送することです。Excel ファイルをデータベースにインポートすることで、Excel にはない効率的なクエリ、トランザクションサポート、並行処理管理などの強力な機能を活用できます。一方、データベースのデータを Excel にエクスポートすることで、広く使用されている馴染みのある形式で、詳細な分析、レポート作成、および共有が可能になります。
この記事では、Spire.XLS for .NET と C# を使用して、Excel データをデータベースにインポートする方法と、データベースのデータを Excel ファイルにエクスポートする方法を解説します。
まず、Spire.XLS for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。
PM> Install-Package Spire.XLS
Spire.XLS for .NET を使うと、Workbook.LoadFromFile() メソッドで Excel ファイルをロードし、CellRange.Value プロパティを利用してセルデータを取得できます。その後、System.Data.SQLite モジュールなどを使用してデータベース操作を行い、データをデータベースに書き込むことが可能です。
以下の手順とコードでは、SQLite を例にして、C# を使って Excel データをデータベースにインポートする方法を示します。
using System.Data.SQLite;
using Spire.Xls;
namespace ExcelToSQLite
{
class Program
{
static void Main(string[] args)
{
// Excelファイルのパス
string excelFilePath = "Sample.xlsx";
// SQLiteデータベースのパス
string sqliteFilePath = "output/Database.db";
// Excelファイルを開く
Workbook workbook = new Workbook();
workbook.LoadFromFile(excelFilePath);
// データベースファイルが存在しない場合、新規作成する
if (!File.Exists(sqliteFilePath))
{
SQLiteConnection.CreateFile(sqliteFilePath);
Console.WriteLine("新しいSQLiteデータベースファイルが作成されました: output.db");
}
// SQLite接続を作成
using (SQLiteConnection connection = new SQLiteConnection($"Data Source={sqliteFilePath};Version=3;"))
{
connection.Open();
// 各ワークシートを繰り返し処理
foreach (Worksheet sheet in workbook.Worksheets)
{
string tableName = sheet.Name;
// 最初の行を列名として取得
var columns = sheet.Rows[0].CellList;
string createTableQuery = $"CREATE TABLE IF NOT EXISTS [{tableName}] (";
foreach (var column in columns)
{
createTableQuery += $"[{column.Value}] TEXT,";
}
createTableQuery = createTableQuery.TrimEnd(',') + ");";
// テーブルを作成
using (SQLiteCommand createTableCommand = new SQLiteCommand(createTableQuery, connection))
{
createTableCommand.ExecuteNonQuery();
}
// データを挿入
for (int i = 1; i < sheet.Rows.Length; i++) // 最初の行をスキップ
{
var row = sheet.Rows[i];
string insertQuery = $"INSERT INTO [{tableName}] VALUES (";
foreach (var cell in row.CellList)
{
insertQuery += $"'{cell.Value?.Replace("'", "''")}',"; // SQLインジェクション対策
}
insertQuery = insertQuery.TrimEnd(',') + ");";
using (SQLiteCommand insertCommand = new SQLiteCommand(insertQuery, connection))
{
insertCommand.ExecuteNonQuery();
}
}
}
connection.Close();
workbook.Dispose();
}
Console.WriteLine("Excelのデータは正常に新しいSQLiteデータベースに書き込まれました!");
}
}
}
SQLite データベースからデータを読み取り、Workbook オブジェクトを使用して新しい Excel ファイルを生成する方法を説明します。
using System.Data;
using System.Data.SQLite;
using Spire.Xls;
namespace SQLiteToExcel
{
class Program
{
static void Main(string[] args)
{
// SQLiteデータベースのパス
string sqliteFilePath = "Database.db";
// Excelファイルのパス
string excelFilePath = "output/DatabaseToExcel.xlsx";
// 新しいWorkbookインスタンスを作成
Workbook workbook = new Workbook();
// デフォルトのワークシートをクリア
workbook.Worksheets.Clear();
// SQLite接続を作成
using (SQLiteConnection connection = new SQLiteConnection($"Data Source={sqliteFilePath};Version=3;"))
{
connection.Open();
// すべてのテーブル名を取得
DataTable tables = connection.GetSchema("Tables");
// 各テーブルを繰り返し処理
foreach (DataRow tableRow in tables.Rows)
{
string tableName = tableRow["TABLE_NAME"].ToString();
// 新しいワークシートを作成
Worksheet sheet = workbook.Worksheets.Add(tableName);
// テーブルデータを取得
string selectQuery = $"SELECT * FROM [{tableName}]";
using (SQLiteCommand command = new SQLiteCommand(selectQuery, connection))
{
using (SQLiteDataReader reader = command.ExecuteReader())
{
// 列名を取得して、最初の行に書き込む
for (int col = 0; col < reader.FieldCount; col++)
{
sheet.Range[1, col + 1].Value = reader.GetName(col);
}
// ヘッダーのフォントスタイルを設定
sheet.Rows[0].Style.Font.IsBold = true;
sheet.Rows[0].Style.Font.Size = 12;
// データ行を挿入
int rowIndex = 2;
while (reader.Read())
{
for (int col = 0; col < reader.FieldCount; col++)
{
sheet.Range[rowIndex, col + 1].Value = reader.GetValue(col).ToString();
// 列幅を自動調整
sheet.AutoFitColumn(col + 1);
}
// データ行のフォントスタイルを設定
sheet.Rows[rowIndex - 1].Style.Font.Size = 11;
rowIndex++;
}
}
}
}
connection.Close();
}
// Excelファイルを保存
workbook.SaveToFile(excelFilePath);
workbook.Dispose();
Console.WriteLine("データは正常にExcelファイルにエクスポートされました!");
}
}
}
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。
C# アプリケーションでは、Excel ファイルと DataTable 間でデータを効率よく変換することが、データの利用、分析、処理能力を向上させるために不可欠です。Excel から DataTable にデータを転送することで、.NET の機能を最大限に活用し、データの分析や変換、処理が可能になります。また、データを Excel に戻すことで、他のシステムと簡単に共有、報告、および統合できます。本記事では、C# コードを使用して Spire.XLS for .NET を活用し、Excel ファイルから DataTable にデータをエクスポートし、DataTable から Excel ファイルにデータをインポートする方法を説明します。
まず、Spire.XLS for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。
PM> Install-Package Spire.XLS
Spire.XLS for .NET は、Worksheet.ExportDataTable() メソッドを提供しており、Excel ワークシート全体のデータを DataTable オブジェクトにエクスポートできます。また、Worksheet.Range[].ExportDataTable() メソッドにより、特定のセル範囲から DataTable にエクスポートすることも可能です。ExportTableOptions クラスを使用すると、セル範囲からデータをエクスポートする際のオプションをカスタマイズできます。Excel データを DataTable にエクスポートする詳しい手順は以下の通りです:
using Spire.Xls;
using System.Data;
namespace ExcelToDataTable
{
class Program
{
static void Main(string[] args)
{
// Workbook インスタンスを作成
Workbook wb = new Workbook();
// Excel ファイルを読み込む
wb.LoadFromFile("Sample.xlsx");
// ワークシートを取得
Worksheet sheet = wb.Worksheets[0];
// ワークシートのデータを DataTable にエクスポート
//DataTable dataTable = sheet.ExportDataTable();
// または指定したセル範囲を DataTable にエクスポート
ExportTableOptions options = new ExportTableOptions();
options.ComputedFormulaValue = true;
options.ExportColumnNames = false;
options.KeepDataFormat = true;
options.RenameStrategy = RenameStrategy.Letter;
DataTable dataTable = sheet.Range[2, 1, 6, 5].ExportDataTable(options);
// DataTable の列名を出力
for (int i = 0; i < dataTable.Columns.Count; i++)
{
Console.Write(dataTable.Columns[i].ColumnName + "\t");
}
Console.WriteLine();
// DataTable のデータ行を出力
foreach (DataRow row in dataTable.Rows)
{
foreach (var item in row.ItemArray)
{
Console.Write(item + "\t");
}
Console.WriteLine();
}
}
}
}
Spire.XLS for .NET は、DataTable オブジェクトのデータを Excel ワークシートに挿入するための Worksheet.InsertDataTable(DataTable, colHeaders: bool, firstRow: int, firstColumn: int) メソッドを提供しています。DataTable から Excel にデータをインポートする手順は以下の通りです:
using Spire.Xls;
using System.Data;
namespace DataTableToExcel
{
class Program
{
static void Main(string[] args)
{
// データセットを定義し、DataTableインスタンスを作成
// 新しい製品と数量でデータ配列を再定義
string[,] data = new string[,]
{
{ "カテゴリ", "書名", "著者", "出版社", "価格(円)" },
{ "小説", "ノルウェイの森", "村上春樹", "講談社", "1500" },
{ "科学", "人工知能の基礎", "佐藤一郎", "技術評論社", "2500" },
{ "歴史", "坂の上の雲", "司馬遼太郎", "文藝春秋", "1800" },
{ "哲学", "善と悪の彼岸", "フリードリッヒ・ニーチェ", "岩波書店", "1300" },
{ "芸術", "日本画入門", "横山大観", "美術出版社", "2000" },
{ "教育", "子どもを伸ばす方法", "齋藤孝", "NHK出版", "1200" }
};
DataTable dataTable = new DataTable();
// 列数を取得
int columnCount = data.GetLength(1);
// DataTableに列を追加
for (int col = 0; col < columnCount; col++)
{
dataTable.Columns.Add(data[0, col]);
}
// DataTableに行を追加
for (int row = 1; row < data.GetLength(0); row++)
{
DataRow dataRow = dataTable.NewRow();
for (int col = 0; col < columnCount; col++)
{
dataRow[col] = data[row, col];
}
dataTable.Rows.Add(dataRow);
}
// Workbookインスタンスを作成
Workbook workbook = new Workbook();
// デフォルトのワークシートをクリアし、新しいワークシートを追加
workbook.Worksheets.Clear();
Worksheet sheet = workbook.Worksheets.Add("書目");
// DataTableデータをワークシートに挿入
sheet.InsertDataTable(dataTable, true, 1, 1);
// 必要に応じてフォーマットを調整
// フォントを調整
sheet.Rows[0].Style.Font.Size = 13;
sheet.Rows[0].Style.Font.IsBold = true;
sheet.Rows[0].Style.Font.FontName = "Yu Gothic UI";
for (int j = 1; j < sheet.AllocatedRange.RowCount; j++)
{
sheet.Rows[j].Style.Font.Size = 12;
sheet.Rows[j].Style.Font.FontName = "Yu Gothic UI";
}
// 列幅を自動調整
for (int i = 1; i <= sheet.AllocatedRange.ColumnCount; i++)
{
sheet.AutoFitColumn(i);
}
// ワークブックをファイルに保存
workbook.SaveToFile("output/DataTableをExcelに挿入.xlsx", FileFormat.Version2016);
workbook.Dispose();
}
}
}
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。