0

この単純なタスクを実行する方法がわからないため、コードを手伝ってください。Excelファイルからランダムに10行を選択するには?

        string filepath = @"C:\1.xlsx";
        OleDbConnection conn = new OleDbConnection();
        conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + @";Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text""";
        OleDbCommand command = new OleDbCommand("SELECT * FROM [Sheet1$]", conn);
        DataSet ds = new DataSet();
        OleDbDataAdapter adapter = new OleDbDataAdapter(command);
        adapter.Fill(ds);
        showdata.DataSource = ds.Tables[0];
4

2 に答える 2

0

これが私の解決策です:

        string filepath = @"C:\1.xlsx";
        OleDbConnection conn = new OleDbConnection();
        conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + @";Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text""";
        OleDbCommand command = new OleDbCommand("SELECT * FROM [Sheet1$]", conn);
        DataSet ds = new DataSet();
        OleDbDataAdapter adapter = new OleDbDataAdapter(command);
        adapter.Fill(ds);
        // above code block is yours as is.
        // below part is for sorting.

        DataTable data = ds.Tables[0];
        data.Columns.Add(new DataColumn("Guid"));
        for (int i = 0; i < data.Rows.Count; i++)
        {
            data.Rows[i].SetField("Guid", Guid.NewGuid());
        }
        DataView dv = data.DefaultView;
        dv.Sort = "Guid desc";            
        showdata.DataSource = dv.ToTable();
于 2015-05-22T23:07:46.113 に答える
0

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 ファイルなどを参照できるようにすることもできます。

于 2012-09-20T15:01:38.430 に答える