通过C#.NET从Excel 97-2003电子表格中提取单个单元格或单元格范围

时间:2018-08-01 16:10:27

标签: c# asp.net excel

我正在开发一个基于Web的应用程序,需要从excel 97-2003(.xls)电子表格中提取数据,该电子表格在单个工作表上有多个小表。

我目前正在尝试使用以下代码打开并阅读工作表:

            string properties = String.Format(@"Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C:\Users\Macy\Desktop\lbr_ems.xls; Extended Properties = 'Excel 8.0;'");

        using (OleDbConnection conn = new OleDbConnection(properties))
        {
            string worksheet = "LbrRpt";
            conn.Open();
            DataSet ds = new DataSet();
            //string columns = String.Join(",", columnNames.ToArray());
            using (OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [" + worksheet + "$]", properties))
            {
                DataTable dt = new DataTable();
                da.Fill(dt);
                ds.Tables.Add(dt);

                grdComponent.DataSource = dt;
                grdComponent.DataBind();
            }

问题在于,它拉出整个工作表,并且所有数值均为空白。我认为这不是我要构建的应用程序所需的代码。

我一直在看这段代码:

    Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(workbookPath, 0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
Excel.Sheets excelSheets = excelWorkbook.Worksheets;
string currentSheet = "Sheet1";
Excel.Worksheet excelWorksheet = (Excel.Worksheet)excelSheets.get_Item(currentSheet);
var cell = (Excel.Range)excelWorksheet.Cells[10, 2];

根据How to read single Excel cell value,但是由于没有提及.net,我被认为可能不是基于Web的用途,或者我在某处缺少了using子句。

我见过的大多数其他解决方案通常表明使用了第三方项目。

我错过了一些愚蠢的事情吗?或者只是没看对地方?

1 个答案:

答案 0 :(得分:1)

使用SQL从Excel读取数据时,您并不严格限于将工作表用作FROM子句的主题:

SELECT *
FROM [Sheet1$]

您几乎可以使用Excel支持的任何寻址方案。例如,您可以引用一系列单元格:

SELECT *
FROM [Sheet1$A1:C172]

您可以将范围的开始和结束设置为同一单元格,以返回单个单元格:

SELECT *
FROM [Sheet1$A1:A1]

您还可以引用一系列列:

SELECT *
FROM [Sheet1$A:B]

或行范围:

SELECT *
FROM [Sheet1$1:5]

或到指定范围:

SELECT *
FROM NamedRange

(请注意,如果连接字符串中为HDR=Yes,则第一行将被视为列标题。)