如何使用c#基于特定单元格值从excel获取记录

时间:2011-09-06 05:41:34

标签: c# excel

查看更多:C#你好每个人    我非常熟悉Windows项目。我想使用c#将excel数据导入数据库。

我的SpreadSheet是

  ExcelSheet
  |--------------------------------------------------|
  |                                                                           |
  |--------------------------------------------------|
  |                                                                           |
  |--------------------------------------------------|
  | Merchant no:12345                                                |
  |--------------------------------------------------|
  | merchant no|         Id No |Amount   | branch name |   
  |------------|-------------|---------|-------------|
  |      12345   |            101 |   10000   | Hyd            |   
  |------------| ------------| --------|-------------|
  |      12345   |            102 |   20000   |   Bombay      | 
  |------------|-------------|---------|-------------|
  |      12345   |            103 |   30000   |      Delhi            |
  |---------------------------------------------------

现在我想根据单元格值= 12345读取总excel表(这里开始两行为空,我的代码读取所有记录忽略empteis) 并将所有记录存储到数据库中。这是我的任务。我已经实现了如下代码

private void btnImport_Click(object sender, EventArgs e)
{
    try
    {
        DataTable dtExcel=new DataTable();
        string SourceConstr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + txtExcelFile.Text + "';Extended Properties= 'Excel 8.0;HDR=Yes;IMEX=1'";
        OleDbConnection con = new OleDbConnection(SourceConstr);
        string query="Select * from [Sheet1$]";
        OleDbDataAdapter data=new OleDbDataAdapter(query,con);
        data.Fill(dtExcel);
        //dgvExcelData.DataSource = dtExcel;
        //dgvExcelData.ColumnHeadersVisible=false;
        string DestConstr = @"Data Source=COMPUTER-8EB749;Initial Catalog=TRMSDB;Integrated Security=true";
        SqlConnection connection = new SqlConnection(DestConstr);
        connection.Open();

        string Mno = "";
        foreach (DataRow rowExcel in dtExcel.Rows)
        {
            foreach (DataColumn colExcel in dtExcel.Columns)
            {
                Mno = rowExcel[colExcel].ToString().Trim();
                if (Mno != "")
                {
                    string Mno1 = Mno.Substring(16, 10);
                    Mno =Mno1.ToString();
                    //Int32 MerchNo = Convert.ToInt32(Mno);
                }
                break;
            }
        if(Mno!="")// Mno contains the exact MerchantNo.
        {
            for(int i=0;i<dtExcel.Rows.Count;i++)
            {
                if (dtExcel.Rows.Contains("MerchantNo=1105393011"))
                {
                     string str = dtExcel.Rows[i][0].ToString().Trim();
                     string str1 = dtExcel.Rows[i][1].ToString().Trim();
                }
            }
        }
    }
}

是的,我有这种知识可以将excel导入到数据表和数据表到数据库。

我对这张excel表的要求是       1.忽略空行。       2.不读取前两行并将其视为空行。       3.基于单元格值读取记录(12345)

我的查询是    1.i想要一次读取总记录或根据行号和读取单元格值 并存储到变量?

我很困惑。任何机构都给我很好的进口数据建议,并提供了很好的例子 或修改我的代码。 PLZ ........

1 个答案:

答案 0 :(得分:0)

 using Microsoft.Office.Interop.Excel;

  ApplicationClass app = null;
  Workbook workBook = null;
  CultureInfo ci = Thread.CurrentThread.CurrentCulture;
  Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
  app = new ApplicationClass();
  workBook = app.Workbooks.Open(pathToExcelFile, Type.Missing, true, Type.Missing,      Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

  Range range = ((Microsoft.Office.Interop.Excel.Worksheet)workBook.Sheets[sheet.Index]).UsedRange;

  for (int i = 0; i < range.Rows.Count - 1; i++)
  {
      Index++;
      string val  = ((Range)range.Cells[rowIndex, colIndex]).Value2;
  }

像这样的东西。至少它对我有用。对不起,但是尝试/ catch,检查null等取决于你。它适用于净3.5