[英]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.