首页新闻找找看学习计划

C#读取EXCEL,表头不在第一行,怎么读取啊?

0
悬赏园豆:5 [已解决问题] 解决于 2016-04-11 08:42
 
这种表头不在第一行的,怎么读取啊?
Dellienware的主页 Dellienware | 初学一级 | 园豆:39
提问于:2016-01-27 11:39
< >
分享
最佳答案
0
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.OleDb;

namespace ExcelReader
{
    public class ExcelHelper
    {
        private OleDbConnection conn = new OleDbConnection();
        public ExcelHelper(string excelPath)
        {
            string connectionStr = string.Format(ConfigurationManager.AppSettings["ConnectionString"], excelPath);
            conn.ConnectionString = connectionStr;
        }
        public DataTable GetExcelTable()
        {
            OleDbCommand cmd = conn.CreateCommand();
            cmd.CommandText = "select * from [Sheet1$]";
            DataTable table = new DataTable();
            OleDbDataAdapter oda = new OleDbDataAdapter(cmd);
            oda.Fill(table);
            foreach (DataRow row in table.Rows)
            {
                if (!(row[0].ToString()).Equals("交易日期"))
                {
                    row.Delete();
                }
                else
                {
                    break;
                }
            }
            for (int i = 0; i < table.Columns.Count; i++)
            {
                table.Columns[i].ColumnName = table.Rows[0][i].ToString();
            }
            table.Rows[0].Delete();
            table = table.GetChanges(DataRowState.Unchanged);
            return table;
        }
    }
}

经过实验,可以获取数据表~

下面是连接字符串:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="ConnectionString" value="Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR=NO;IMEX=1'"/>
  </appSettings>
</configuration>
收获园豆:5
龙葛格 | 小虾三级 |园豆:712 | 2016-01-28 21:08

赞~ 最喜欢看代码了,一目了然,比理论知识形象多了。

小刺猬001 | 园豆:656 (小虾三级) | 2016-02-05 14:06

@小刺猬001: 哈哈,多谢支持

龙葛格 | 园豆:712 (小虾三级) | 2016-02-05 20:04

@龙葛格: 谢谢啊 我来试试

Dellienware | 园豆:39 (初学一级) | 2016-03-09 09:22
其他回答(7)
0

 string StrConExcel2007 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=\"Excel 12.0;HDR=YES\"" HDR=YES的时候,第一行会被读成列头 如果你第一行就是数据的话,请设置HDR=NO

Ctrl` | 园豆:2248 (老鸟四级) | 2016-01-27 11:48

支持(0) 反对(0) 斯拉克 | 园豆:223 (菜鸟二级) | 2016-01-27 16:06

@斯拉克: 。。你看、我都给你说了

支持(0) 反对(0) Ctrl` | 园豆:2248 (老鸟四级) | 2016-01-27 16:08
0

读取出来的时候循环表可以控制从哪一行开始去读 控制到这一行就去读然后取列头就可以了

IT小白鸽 | 园豆:-2 (初学一级) | 2016-01-27 11:58
0

判断条件,第五行,第一列,值等于“交易”日期的时候,才开始读取。

贫民窟大侠 | 园豆:4270 (老鸟四级) | 2016-01-27 14:00
1

从第五行开始循环就ok了

powerixao | 园豆:401 (菜鸟二级) | 2016-02-05 17:23
1

用NPOI来读吧

http://npoi.codeplex.com/

Tryc | 园豆:195 (初学一级) | 2016-03-17 20:48
0

指定行索引读取

http://git.oschina.net/lishilei0523/SD.Toolkits

黄昏MMM | 园豆:320 (菜鸟二级) | 2017-01-11 15:17
0

public static DataTable ImportCompareMeanExcel(string strFilePath)
{
Workbook workbook = new Workbook();
DataTable dtExcel = null;
try
{
workbook.Open(strFilePath);
Cells cells = workbook.Worksheets[0].Cells;

//4表示从第5行开始,0代表第一行
dtExcel = cells.ExportDataTableAsString(4, 0, cells.MaxDataRow + 1, cells.MaxColumn+1, true);//showTitle
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return dtExcel;
}

石禹 | 园豆:202 (菜鸟二级) | 2018-01-12 11:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册