簡體   English   中英

讀取Excel文件的特定列並使用C#添加到查詢

[英]read particular column of excel file and add to query using c#

我想從Excel文件中讀取特定列,並選擇每個值並將其放入使用C#的查詢中。 我已經編寫了一個代碼來讀取Excel文件並在datagridview中顯示它,但是在讀取特定列時卡住了。

需要一些幫助。 下面是代碼。

private void button1_Click(object sender, EventArgs e)
{
    using (OpenFileDialog ofd = new OpenFileDialog() { Filter = "Excel Workbook|*.xls", ValidateNames = true })
    {
        if (ofd.ShowDialog() == DialogResult.OK)
        {
            FileStream fs = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read);
            IExcelDataReader reader = ExcelReaderFactory.CreateBinaryReader(fs);
            var conf = new ExcelDataSetConfiguration
            {
                ConfigureDataTable = _ => new ExcelDataTableConfiguration
                {
                    UseHeaderRow = true
                }
            };
            dataSet = reader.AsDataSet(conf);
            cboSheet.Items.Clear();
            foreach (DataTable dt in dataSet.Tables)
                cboSheet.Items.Add(dt.TableName);
            reader.Close();
        }
    }
}

private void cboSheet_SelectedIndexChanged(object sender, EventArgs e)
{
    dataGridView.DataSource = dataSet.Tables[cboSheet.SelectedIndex];
}

您知道excel文件每次都相同嗎? 如果可以確保文件在沒有任何列修改的情況下保持一致,則可以使用OfficeOpenXml軟件包執行以下OfficeOpenXml

public IEnumerable<string> ReadFile(string path)
{
     using(var file = new FileStream(path, FileMode.Open))
     using(var memory = new MemoryStream())
     {
          file.CopyTo(memory);
          using(var package = new ExcelPackage(memory))
               if(package.Workbook.Worksheets.Count != 0)
                    foreach(ExcelWorksheet worksheet in package.Workbook.Worksheets)
                         for(var row = 0; worksheet.Dimension.Start.Row; row <= worksheet.Dimension.End.Row; row++)
                              yield return worksheet.Cells[row, 2].Value;
     }
}

為簡便起見,我沒有抽象化,您可以通過將多個循環分開來簡化代碼,首先是工作表,然后是行。 如您所見,“ 2”代表指定的列。 但這將為您提供一個集合,您可以迭代將其轉儲到查詢中以進行處理。

您可以使用ExcelDataReader ,它將為您提供整個Excel內容作為DataTable

或者您可以使用OleDbCommand

    OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ExcelPath + "; Extended Properties = 'Excel 12.0;HDR=YES;';");

    conn.Open();

    OleDbCommand cmd = new OleDbCommand();

    cmd.Connection = conn;

    cmd.CommandText = SELECT [Colum1], [Colum2] FROM [Sheet1$];

    OleDbDataReader reader =  cmd.ExecuteReader();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM