0

C19から始まる「C」列のみでExcelシートデータを選択するには、SQLクエリを(C#で)作成する必要があります。しかし、より多くのデータが列に追加されているため、終了セル番号を指定できません。したがって、列の終わりを指定する方法を知る必要があります。助けてください。私が使用しているクエリについて言及しました。そして、私が使用しているExcelシートの画像を添付しました!.そして、出力データグリッドビューを添付しました!

//Generte Oracle Datatable
            OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;"
            + @"Data Source=" + textBox1.Text + ";" + @"Extended Properties=""Excel 12.0 Macro;HDR=Yes""");
            conn.Open();

            OleDbCommand ccmd = new OleDbCommand(@"Select * From [SPAT$]", conn);
            OleDbDataAdapter adapter = new OleDbDataAdapter(ccmd);                     
            DataTable Oracle = new DataTable();
            adapter.Fill(Oracle);

            for (int y = 19; y < Oracle.Rows.Count; y++)
            {
                var value = Oracle.Rows[y][3].ToString();           
            }   
            dataGridView1.DataSource = Oracle.AsEnumerable().Where((row, index) => index > 3).CopyToDataTable();                
4

1 に答える 1

1

OLE クエリを使用した最初のアプローチ:

OleDbCommand ccmd = new OleDbCommand(@"Select * From [SPAT$]", conn);
OleDbDataAdapter da = new OleDbDataAdapter(ccmd);
DataTable dt = new DataTable();
da.Fill(dt);

for (int i = 19; i < dt.Rows.Count; i++)
{
    var value = dt.Rows[i][3].ToString(); // here 3 refers to column 'C'
}

基準ベースの DataTable の場合

dataGridView1.DataSource = dt.AsEnumerable()
                          .Where((row, index) => index >= 19)
                          .CopyToDataTable();

C列のみ

dataGridView1.DataSource = dt.AsEnumerable()
                      .Where((row, index) => index >= 19)
                      .Select(t => t[3].ToString()).ToList();

Excel COM オブジェクトを使用した 2 番目のアプローチ:

using Excel = Microsoft.Office.Interop.Excel;

Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open("path to book");
Excel.Worksheet xlSheet = xlWorkbook.Sheets[1]; // get first sheet
Excel.Range xlRange = xlSheet.UsedRange; // get the entire used range

int numberOfRows = xlRange.Rows.Count;

List<string> columnValue = new List<string>();
// loop over each column number and add results to the list

int c = 3; // Column 'C'
for(int r = 19; r <= numberOfRows; r++)
{
    if(xlRange.Cells[r,c].Value2 != null) // ADDED IN EDIT
    {
        columnValue.Add(xlRange.Cells[r,c].Value2.ToString());
    }
}
于 2012-10-17T04:53:51.020 に答える