Windows フォームに という DataGridView を作成する場合はRandomExcelRows
、 というボタンを作成しbutton1
、次のコードを のClickイベント ハンドラー内に配置しbutton1
ます。
private void button1_Click(object sender, EventArgs e)
{
Excel.Range[] rows = RandomRows(10, @"C:\test\whatever.xlsx");
DataTable dt = new DataTable();
bool ColumnsCreated = false;
foreach(Excel.Range row in rows)
{
object[,] values = row.Value;
int columnCount = values.Length;
if(!ColumnsCreated)
{
for(int i = 0; i < columnCount; i++)
{
DataColumn dc = new DataColumn(String.Format("Column {0}", i));
dt.Columns.Add(dc);
ColumnsCreated = true;
}
}
DataRow dr = dt.NewRow();
for (int i = 0; i < columnCount; i++)
{
dr[String.Format("Column {0}", i)] = values[1,i+1];
}
dt.Rows.Add(dr);
}
RandomExcelRows.DataSource = dt;
}
次に、以下を含むRandomRowsと呼ばれるメソッドを作成します。
private Excel.Range[] RandomRows(int randomRowsToGet, string worksheetLocation, int worksheetNumber = 1, int lowestRow = 0, int highestRow = 99)
{
Excel.Range[] rows = new Excel.Range[randomRowsToGet];
Excel.Application excel = new Excel.Application();
Excel.Workbook workbook = excel.Workbooks.Open(worksheetLocation);
Excel.Worksheet worksheet = workbook.Worksheets[worksheetNumber];
List<int> rowNumbers = new List<int>();
bool allUniqueNumbers = false;
Random random = new Random();
while (!allUniqueNumbers)
{
int nextNumber = random.Next(lowestRow, highestRow);
if (!rowNumbers.Contains(nextNumber))
rowNumbers.Add(nextNumber);
if (rowNumbers.Count == randomRowsToGet)
allUniqueNumbers = true;
}
for (int i = 0; i < randomRowsToGet; i++)
{
rows[i] = worksheet.UsedRange.Rows[rowNumbers[i]];
}
Marshal.ReleaseComObject(excel);
return rows;
}
プログラムは、指定したスプレッドシートからランダムな数の行 (この量はユーザーが指定) を取得し、これらの行を DataGridView に配置します。
それはかなり粗雑で、リファクタリングが必要ですが、必要なものの基礎です。これをハードコーディングする代わりに、テキストボックスからファイルの場所を含む文字列を取得することもできます。必要な行数や、最小行数や最大行数などの他のパラメーターについても同様です。
同様に、OpenFileDialogを使用して、ユーザーが Excel ファイルなどを参照できるようにすることもできます。